This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Alternate Parts in Reference Design PMP8955

Other Parts Discussed in Thread: PMP8955
 Hi, we want to build the reference design PMP-8955 for battery testing purpose. However, in the BOM,  T1: PQ20-149 from Click Tech can not be found,and D2: RB155-BP is obsolete. Moreover, there is a D? in the BOM, I think it should be the D1 in the Assembly drawing?  Can you help us with these?  
 
Thanks a lot!


<!-- |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/|
    Pendularm 1 simulation             Example of 1 DOF dynamics and control in HTML5/JavaScript and threejs
    @author ohseejay / https://github.com/ohseejay / https://bitbucket.org/ohseejay
    Chad Jenkins    Laboratory for Perception RObotics and Grounded REasoning Systems    University of Michigan
    License: Creative Commons 3.0 BY-SA
|\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| |\/| -->
<html>
<body>
<!-- //////////////////////////////////////////////////     /////     JAVASCRIPT INCLUDES     ////////////////////////////////////////////////// -->

<!-- threejs - github.com/.../ --><script src="js/three.min.js"></script>
<!-- threejs camera controls helpers --><script src="js/OrbitControls.js"></script>
<!-- threejs keyboard input helper --><script src="js/THREEx.KeyboardState.js"></script>
<script>
///////////////////////////////////////////////////////     MAIN FUNCTION CALLS//////////////////////////////////////////////////
// initialize threejs scene, user input, and robot kinematicsinit();
// main animation loop maintained by threejs animate();

///////////////////////////////////////////////////////     INITIALIZATION FUNCTION DEFINITONS//////////////////////////////////////////////////
function init() {
    // create pendulum object and its kinematic and dynamic parameters    pendulum = {length:2.0, mass:2.0, angle:Math.PI/2, angle_dot:0.0};
    // initialize pendulum controls    pendulum.control = 0;    pendulum.desired = -Math.PI/2.5;    pendulum.desired_dot = 0;
    // initialize integral term accumulated error to zero    accumulated_error = 0;
    // set gravity    gravity = 9.81;  // Earth gravity
    // initialize pendulum PID servo gains    pendulum.servo = {kp:0, kd:0, ki:0};  // no control
    // initialize time and set timestep     t = 0;    dt = 0.05;  // default     // initialize method of numerical integration of dynamics    //numerical_integrator = "euler";    //numerical_integrator = "verlet";    //numerical_integrator = "velocity verlet";    //numerical_integrator = "runge-kutta";
    // OPTIONAL servo controller additional features    steady_state_error_reset = false; // integral term resets after desired met    servo_error_threshold = 0.001; // threshold for achieving desired    servo_active_persist = false; // toggle to turn on servo controller    servo_active_state = {}; // string with current state of servo activation
    pendulum.previous_error = 0;    //STENCIL: for verlet integration, a first step in time is needed    verlet_first = 1;    start = 1;    // initialize rendering scene and user interface    createScene();
}

///////////////////////////////////////////////////////     ANIMATION AND INTERACTION LOOP//////////////////////////////////////////////////
function animate() {
    // note: three.js includes requestAnimationFrame shim    // alternative to using setInterval for updating in-browser drawing    // this effectively request that the animate function be called again for next draw    // learningwebgl.com/.../   requestAnimationFrame( animate );
    // switch between numerical integrators based on user input    if (keyboard.pressed("0"))        numerical_integrator = "none";    if (keyboard.pressed("1"))        numerical_integrator = "euler";    if (keyboard.pressed("2"))        numerical_integrator = "verlet";    if (keyboard.pressed("3"))        numerical_integrator = "velocity verlet";    if (keyboard.pressed("4"))        numerical_integrator = "runge-kutta";
    // update servo desired state from user interaction     if (keyboard.pressed("e"))    { pendulum.desired += 0.05; start = 1; }// move the desired angle for the servo    if (keyboard.pressed("q"))    { pendulum.desired += -0.05; start = 1; } // move the desired angle for the servo

    // add user force from user interaction    if ( keyboard.pressed("d") )        pendulum.control += 50.0;  // add a motor force to the pendulum motor    else if ( keyboard.pressed("a") )        pendulum.control += -50.0; // add a motor force to the pendulum motor
    // STENCIL: implement servo controller    if (keyboard.pressed("c"))    {        servo_active_persist = true;        servo_active_state = "active";       // pendulum.desired_true = pendulum.desired;        pendulum.servo.kp =300;        pendulum.servo.kd =150;        pendulum.servo.ki =120;    }    if(servo_active_persist && numerical_integrator != "none")    {       /* if (start)        {            pendulum.desired_true = pendulum.desired;            start = 0;        }        while (pendulum.angle > pendulum.desired_true + 2 * Math.PI) {            pendulum.desired_true = pendulum.desired_true + 2 * Math.PI;            //  pendulum.angle_previous = pendulum.angle_previous - 2 * Math.PI;        }        while (pendulum.angle < pendulum.desired_true - 2 * Math.PI) {            pendulum.desired_true = pendulum.desired_true - 2 * Math.PI;            // pendulum.angle_previous = pendulum.angle_previous + 2 * Math.PI;        }*/        var error = pendulum.desired - pendulum.angle;        if(pendulum.previous_error == 0)        {            pendulum.previous_error = error;        }        if(Math.abs(error) < servo_error_threshold)        {            steady_state_error_reset = true;        }// achieving desired        else {            steady_state_error_reset = false;            accumulated_error += error *dt;            pendulum.control = pendulum.servo.kp * error + pendulum.servo.ki * accumulated_error + pendulum.servo.kd * -pendulum.angle_dot;            pendulum.previous_error = error;        }    }
    // disable motor from user interaction     if (keyboard.pressed("s")||!servo_active_persist) {        pendulum.control = 0;        accumulated_error = 0;        start = 1;        servo_active_state = "disabled";    }    else        servo_active_state = "active";

    // integrate pendulum state forward in time by dt    if (typeof numerical_integrator === "undefined")        numerical_integrator = "none";        if (numerical_integrator === "euler") {
        // STENCIL: a correct Euler integrator is REQUIRED for assignment        var tmp1 = pendulum.angle;        pendulum.angle = pendulum.angle + pendulum.angle_dot * dt;        pendulum.angle_dot = pendulum.angle_dot + pendulum_acceleration(tmp1)* dt;
    }    else if (numerical_integrator === "verlet") {
        // STENCIL: basic Verlet integration        if (verlet_first == 1) {            pendulum.angle_previous = pendulum.angle;            pendulum.angle = pendulum.angle + pendulum.angle_dot * dt + 0.5 * pendulum_acceleration(pendulum.angle) * Math.pow(dt, 2);            verlet_first = 0;        }        else {            var tmp = pendulum.angle;            pendulum.angle = 2 * pendulum.angle - pendulum.angle_previous + pendulum_acceleration(pendulum.angle) * Math.pow(dt, 2);            pendulum.angle_previous = tmp;        }    }    else if (numerical_integrator === "velocity verlet") {
        // STENCIL: a correct velocity Verlet integrator is REQUIRED for assignment        var a = pendulum_acceleration(pendulum.angle);        pendulum.angle_previous = pendulum.angle;        pendulum.angle = pendulum.angle + pendulum.angle_dot * dt + 0.5 * a * Math.pow(dt, 2);        pendulum.angle_dot = pendulum.angle_dot + 0.5 * (pendulum_acceleration(pendulum.angle) + a) * dt;    }    else if (numerical_integrator === "runge-kutta") {
    // STENCIL: Runge-Kutta 4 integrator    }     else {        pendulum.angle_previous = pendulum.angle;        pendulum.angle = (pendulum.angle+Math.PI/180)%(2*Math.PI);        pendulum.angle_dot = (pendulum.angle - pendulum.angle_previous) / dt;        numerical_integrator = "none";
        pendulum.control = 0;        accumulated_error = 0;        start = 1;    }    // set the angle of the pendulum    pendulum.geom.rotation.y = pendulum.angle;  // threejs cylinders have their axes along the y-axis
    // advance time    t = t + dt;
    textbar.innerHTML =         "System <br> " +        " t = " + t.toFixed(2) +         " dt = " + dt.toFixed(2) +         "<br>" +        " integrator = " + numerical_integrator +         "<br>" +        " x = " + pendulum.angle.toFixed(2) +         "<br>" +        " x_dot = " + pendulum.angle_dot.toFixed(2) +         "<br>" +        " x_desired = " + pendulum.desired.toFixed(2) +         "<br><br> Servo: " + servo_active_state + " <br> " +        " u = " + pendulum.control.toFixed(2) +        "<br>" +        " kp = " + pendulum.servo.kp.toFixed(2) +         "<br>" +        " kd = " + pendulum.servo.kd.toFixed(2) +         "<br>" +        " ki = " + pendulum.servo.ki.toFixed(2) +        "<br><br>  Pendulum <br> " +        " mass = " + pendulum.mass.toFixed(2) +        "<br>" +        " length = " + pendulum.length.toFixed(2) +        "<br>" +        " gravity = " + gravity.toFixed(2) +        "<br><br>  Keys <br> " +        " [0-4] - select integrator " +        "<br>" +        " a/d - apply user force " +        "<br>" +        " q/e - adjust desired angle " +        "<br>" +        " c - toggle servo " +        "<br>" +        " s - disable servo "
    ;
    // threejs rendering update    renderer.render( scene, camera );
}
//function pendulum_acceleration(p,g) {function pendulum_acceleration(angle) {    // STENCIL: return acceleration(s) system equation(s) of motion     return (-gravity / pendulum.length * Math.sin(angle) + pendulum.control / (pendulum.mass * Math.pow(pendulum.length, 2)));}
function createScene() {
    // instantiate threejs scene graph    scene = new THREE.Scene();
    // instantiate threejs camera and set its position in the world    camera = new THREE.PerspectiveCamera( 75, window.innerWidth / window.innerHeight, 1, 10000 );    camera.position.y = 1;    camera.position.z = 4;
    var light1 = new THREE.PointLight( 0xffffff, 0.3, 1000 );     light1.position.set( 10, 10, 10 );     scene.add( light1 );
    var light2 = new THREE.PointLight( 0xffffff, 0.3, 1000 );     light2.position.set( 10, -10, 10 );     scene.add( light2 );
    var light3 = new THREE.PointLight( 0xffffff, 0.3, 1000 );     light3.position.set( -10, -10, 10 );     scene.add( light3 );
    var light4 = new THREE.PointLight( 0xffffff, 0.3, 1000 );     light4.position.set( -10, 10, 10 );     scene.add( light4 );
    // instantiate threejs renderer and its dimensions    renderer = new THREE.WebGLRenderer();    renderer.setSize( window.innerWidth, window.innerHeight );
    // attach threejs renderer to DOM    document.body.appendChild( renderer.domElement );
    // instantiate threejs camera controls    camera_controls = new THREE.OrbitControls( camera );    camera_controls.addEventListener( 'change', renderer );
    // instantiate threejs keyboard controls, for continuous interactive controls    keyboard = new THREEx.KeyboardState();
    textbar = document.createElement('div');    textbar.style.position = 'absolute';    //textbar.style.zIndex = 1;    // if you still don't see the label, try uncommenting this    textbar.style.width = window.width-10;    textbar.style["font-family"] = "Monospace";    textbar.style.height = 20;    //textbar.style.backgroundColor = "black";    textbar.style.color = "#000000";    textbar.innerHTML = "M4PRoGReS - pendularm!";    textbar.style.top = 10 + 'px';    textbar.style.left = 10 + 'px';    document.body.appendChild(textbar);
    temp_geom = new THREE.CylinderGeometry(0.2, 0.2, 3.5, 20, 20, false);    temp_material = new THREE.MeshLambertMaterial( { } );    temp_material.color.r = 1;    temp_material.color.g = 1;    temp_material.color.b = 1;    temp_material.color.b = 1;    temp_material.transparent = true;    temp_material.opacity = 0.3;
    leg1 = new THREE.Mesh(temp_geom, temp_material);    leg2 = new THREE.Mesh(temp_geom, temp_material);    leg3 = new THREE.Mesh(temp_geom, temp_material);    leg4 = new THREE.Mesh(temp_geom, temp_material);    leg1.position = {x:2,z:1,y:0};    leg2.position = {x:-2,z:1,y:0};    leg3.position = {x:-2,z:-1,y:0};    leg4.position = {x:2,z:-1,y:0};    scene.add(leg1);    scene.add(leg2);    scene.add(leg3);    scene.add(leg4);
    temp_geom = new THREE.CylinderGeometry(0.2, 0.2, 4.0, 20, 20, false);    sidebar1 = new THREE.Mesh(temp_geom, temp_material);    sidebar1.rotateOnAxis(new THREE.Vector3(0,0,1),Math.PI/2);    sidebar1.position = {x:-2,z:0,y:1.5};    leg1.add(sidebar1);    sidebar2 = new THREE.Mesh(temp_geom, temp_material);    sidebar2.rotateOnAxis(new THREE.Vector3(0,0,1),Math.PI/2);    sidebar2.position = {x:2,z:0,y:1.5};    leg3.add(sidebar2);
    temp_geom = new THREE.CylinderGeometry(0.2, 0.2, 2.0, 20, 20, false);    crossbar = new THREE.Mesh(temp_geom, temp_material);    crossbar.rotateOnAxis(new THREE.Vector3(1,0,0),Math.PI/2);    crossbar.position = {x:0,z:-1,y:0};    sidebar1.add(crossbar);
    temp_geom = new THREE.CylinderGeometry(0.3, 0.3, 0.3, 20, 20, false);
    temp_material = new THREE.MeshLambertMaterial( { } );    temp_material.color.r = 1;    temp_material.color.g = 0;    temp_material.color.b = 0;    temp_material.transparent = false;
    pendulum.geom = new THREE.Mesh(temp_geom, temp_material);    pendulum.geom.rotateOnAxis(new THREE.Vector3(1,0,0),Math.PI/2);    //crossbar.add(pendulum.geom);    scene.add(pendulum.geom);    pendulum.geom.position = {x:0,y:1.5,z:0};
    temp_geom = new THREE.CylinderGeometry(0.2, 0.2, pendulum.length, 20, 20, false);    pendulum_link = new THREE.Mesh(temp_geom, temp_material);    pendulum_link.rotateOnAxis(new THREE.Vector3(1,0,0),-Math.PI/2);    pendulum_link.position = {x:0,z:pendulum.length/2,y:0};    pendulum.geom.add(pendulum_link);
    temp_geom = new THREE.SphereGeometry(Math.sqrt(pendulum.mass*0.1));    pendulum_mass = new THREE.Mesh(temp_geom, temp_material);    pendulum_mass.position = {x:0,y:-pendulum.length/2,z:0};    pendulum_link.add(pendulum_mass);}
</script></body></html>

  • Hi Zhihong,

    Let me see if I can find the original designer of the PMP8955 to help with this request.

    Regards

    Peter
  • yes D? should be D1  and is a 43CTQ100     

    RB155-BP is avaialable at digikey and Mouser

    the transformer is a custom part provided by the original customer

    here is the requirements document for that transformer

     

    Topology:                   transition mode fly back

    Shielding:                   No

    Frequency:                  130 KHz max

    Primary Voltage:        120 to 200 dc

    Reflected voltage       120 volts

    Input power (max)      52 watts continuous

    Input current               1.6 amps peak   .66 mamps rms

                                       

    Secondary Voltage:    Sec :    10v to 22.5v at 3 amps rms , 2 amps ave (variable )

     

    Volt-us Product:         480 volts - usec on Primary

    Turns Ratio:                Pri  to Sec       5 to 1

    Pri  to pri bias    3.33 to 1

     

    Primary Inductance:   300uh +/- 20%.

     

    Leakage Inductance:   minimum

    Isolation:                     Pri. To Sec .  UL (Customer needs to comment here)

    Temperature:              -40C to +85C

     

    Temperature Rise:      40C max hot spot

    Size:                            though hole, smallest footprint

     

    (Note, the reflected primary voltage is 115 volts )

     

    lfiV\RoHS
    't:9' Compliant

    f'
    CUSTOMER TTi


    SPECIFICATION FOR APPROVAL

    1tf.ll::R:tlla%
    CLICK P/N: PQ20-149


    m tfelA&*
    DOCUMENT NO./Rev.: 13078200/00

    f'ru%
    CUSTOMER P/N:

    DESCRIPTION: PQ20/20 TRANSFORMER

    BM
    DATE 2013/05/08

    * it
    SAFETY STANDARD:


    lifHA.FP, :Jt:jg @J-1fto
    PLEASE RETURN TO US COPY OF "SPECIFICATION FOR APPROVALwWITH YOUR APPROVED SIGNATURES.


    "./"' CUSTOMER'S NOTE SIGNATURE


    FULL APPROVED CONDITIONAL APPROVED REJECTED


    CLiCK -ey.ll:J'cl wmn Ji il0aJ 4JCL!CK ¥*;1JIIW.ll:12:#titli2:-ffi' ll0PJ CLICK
    INTERNATIONAL(HONG KONG)TRADING CO.• LTD SHENZHEN CLICK TECHNOLOGY CO.,LTD wmJL -l(:l:P -l(: f!H
    1%J;E$· '171707 #IIIP 1<1R:fiikTAtJi=!kt-fiEqtIftlm7
    Flat 1707,17/F Sterling Centre ll,Cheung Yue Buiding7,ZhengZhong Industrial Zone,QiaoTou Tow
    Street,Cheung Sha Wan,Kowloon,Hong Kong FuYong Country,BaoAn District,ShenZhen,P.R.C
    TEL:00852-27854822 TEL:86-755-29918117 29918067
    FAX:00852-27447808 FAX:86-755-29918005
    E-mail:sales@clickele.com E-mail:sales@clickele.com
    Http://www.clickele.com Http://www.clickele.com

    C2-027B-F15

    PP/N:


    I'6"Y\ RoHS Compli
    rz:. m!%: PQ20-149

    1e£BM £l*Jt{J. Mi*% t
    2013/05/08 1. NEW SPEC.
    00 M B:f


    C2-027B-F15


    RoHS
    Compliant

    CUSTOMER j TTi

    CLICK P/N
    I I

    PQ20-149

    @RoHS

    WINDING STEP: Compliant
    WDG Terminal Wire Gauge Turns Tape Tube Remarks
    N1 8-9 cl> 0.20*10 2UEW-B 20 3 1f Jfe1 UTS}ft

    N2 2,3-4,5

    cl>


    0.50*2 TEX-E 7 2


    N3 11-12 cl> 0.35*1 2UEW-B 12 2
    N4 9-10 cl> 0.20*10 2UEW-B 20 2


    ELECTRICAL CHARACTER:
    NO. Item Measured Ponit Technical Data Test Condition & Instru
    1 Inductance L 8-10 300uH+20% CH 3302(100KHz,lV) PRI - SEC
    3600VAC
    2 HI-POT PRI TO CORE 500VAC 60Hz,lmA,3S CS2672C SEC TO CORE
    3600VAC
    3 LK LK 8-10 Short TBD CH 3302(100KHz,lV)

    Temperature Rise: 40"C max
    Temperature: -40"C to +85"C

    ttcL!cK.


    DRAWN BY CHECKED BY APPROVED BY CUSTOMER PIN
    DOCUMENT NO./Rev 13078200/0

    :IJIIPT:fLR-: H:tllltffi-1fllll *iij
    DATE 2013/05/08
    SHENZHEN CLiCK ELECTRONICS CO.,LTD SHEET_OF_
    2 I 3
    C2-027B-F15

    CUSTOMER I TTi I CLICK P/N I PQ20-149

    @RoHS Compliant


    Material List:
    NO Items Materials Suppliers/Manufacturer

    PHENOLIC PM9820
    1 BOBBIN UL Rating:94V-O SUMTIOMO CHEMICAL CO., LTD
    File NO.:E41429

    PQ20/20 DMR40 DMEGC


    2 Ferrite Core

    PQ20/20 ZP40 ZHONGDE
    Polyurethane enameled
    Copper Wire: MW75C(UEW/U) PACIFIC ELECTRIC WIRE &CABLE Thermal Rating 130\;
    (SHEN ZHEN)CO.,LTD
    File NO.:E201757
    Polyurethane enameled


    3 Copper Wire Copper Wire: MW75C/TYPU-130(UEW-B) HENG YA ELECTRIC (DONGGUAN)LT File NO.:E197768
    Polyurethane enameled Copper Wire: MW75C(2UEW) Thermal Rating 130\; File NO.:E172395
    TEX-E 130"C E206440 FURUKAWA ELECTRIC CO LTD
    4 TRIPLE WIRE TIW-M 130"C E213764 COSMOLINK CO LTD
    TKE-B 130"C E308908 SHANGHAI XIANGXIANG ELECTRON CO L

    Polyester tape 0.025mm TYPE:CT JINGJIANG YAHUA PRESSURE SENSI Rating Thermal 130"C E165111
    GLUE CO LTD
    5 Tape Polyester tape 0.025mm
    TYPE:1350F-1 3M COMPANY ELECTRICAL MARKETS DI Rating Thermal 130t;
    El7385

    6 Varnish TYPE NO.:8562(C) FILE NO.:E200154 HANG CHEUNG PETROCHEMICLL LTD

    7 SOLDER BAR Sn-0.7Cu YIK SHING TAT INDUSTRIAL CO.,LT
    8 Flux Rosin TF-328B TONG FANG
    9 INK 9155E SHENZHEN I.D.V TECHNOLOGY CO,.L

    fcl!CK


    DRAWN BY CHECKED BY APPROVED BY CUSTOMER P/N
    DOCUMENT NO./Rev 13078200/


    :ijl[%J'z::R;;f4tt.IHl:ffrff01¥.1
    DATE 2013/05/0
    SHENZHEN CLiCK ELECTRONICS CO.,LTD SHEET OF
    3 I 3
    C2-027B-Fl5

     

     

  • Hi Dave,

    Thank you so much for the information. I suppose you are the designer of PM8955? Do you have the drill file of be in (*drl/*.txt) format?

    Thanks a lot,
    Zhihong Luo
  • Hi Peter,

    Thank you so much for the help:)

    Zhihong Luo