Hallo,

Ik ben op dit moment bezig een BLDC sensorless motorcontroller te maken op basis van een dsPic. De hardware heb ik al klaar en ik ben nu bezig met de software. De software is zo ver klaar dat de motor kan draaien in open-loop modus.

Nu heb ik echter een probleem bij het inschakelen van de module. Wanneer ik de 12 volt aansluit, zit er sluiting in de module.
Na lang meten ben ik er achter gekomen dat dit komt doordat wanneer de pic ingeschakeld wordt de PWM uitgangen heel even hoog worden(enkele ns). Deze PWM uitgangen zitten aangesloten op een MCP1405 (een half geinverteerde FET driver). Deze driver zit aangesloten op de N-en P-FET's. Met andere woorden beide FET's komen heel even in geleiding waardoor er voor enkele nano seconden kortsluiting is. Hierdoor klapt de spanning in en reset de dsPic zich waardoor het hele proces zich weer herhaalt. Althans dat is wat ik vermoed.

Wanneer ik de module eerst op 4 volt aansluit en vervolgens de spanning opdraai naar 12 volt, werkt alles prima. De dsPic start nu eerst op en de FET's gaan bij deze spanning nog niet open. De voeding kan 5A leveren, wat genoeg moet zijn. Ook heeft het loskoppelen van de motor tijdens het opstarten geen effect.

Ik vroeg me af of iemand dit probleem herkent en/of weet hoe ik dit op kan lossen. Ik maak de PWM poorten direct in het begin van het programma al laag. Dus eigenlijk snap ik niet dat de uitgangen toch nog even hoog zijn en dat de spanning hierdoor ook gelijk helemaal in zakt.

Alvast bedankt voor de hulp.

Ik zal mijn schema nog even posten.

Edit:
Oja, op de module zit dus een 3.3v spanningsregelaar die de voeding verzorgd voor de dsPic. Hier zit nog een 47uf condensator achter. Ook zit er aan de primaire kant een 2200uf condensator.

tijdens reset zet die dspic waarschijnlijk zijn i/o poten hoog of tristate. zwevende gates doen dan de rest.

zet op de stuurpinnen die naar je gatedrivers van je N fets gaan een 10k pull down weerstand... zo zorg je dat tenminste die 2 onderste gegarandeerd AF staan.

Als die I/O poten werkelijk hard hoog gestuurd worden vooraleer de cpu reset dan heb je een extra circuitje nodig..
2 AND poorten samen met een brownout detectortje kunnen wonderen doen.

ik zou het zo aanpakken: comparator die op zeer lage voeding kan werken met open collector uitgang. die trekt via 2 diodes de gates van de onderste mossen laag. je mag sturen wat je wilt : die mossen doen geen fluit.
eenmaal de juiste voedingspanning ontgrendel ik de gate sturing ook nog eens via twee and gates op de gates van de onderste mossen en een exor driver op twee i/o poten.

pas als de software geboot is , en de spanning correct wordend e onderste mossen ontgrendeld



                     ---|<|---.
                    |  -|<|---+---------|Gate NMOS2
                    | |       |
Vlogic  ------|+\   | |       |
              |  >--|-+-|<|-+-|--+------|Gate NMOS1
          T1--|-/   |       | |  |
                    |       | | 100R
Vdrive  ------|+\   |       | |  |
              |  >--+--|<|--  |  |         |----- gate drive NMOS1
          T2- |-/   |         |   -----(AND|
                    |         |            |---
 vdrive fault <-----          |                |
 melding cpu                 100r              |
        VCC                   |             |--|-- gate drive NMOS2
         |                     ---------<AND|  |
        1k                                  |--+
         |                                     |
     en0-+--|>0--|                             |
                 |AND)-------------------------
     en1-+-------|       
         |
        1k
         |
        GND
   

hoe werkt dat ding ?

de gate drive signaen voor de onderste mossen worden geblokkeerd door de AND poorten zoland EN0 niet nul is en EN1 niet hoog is. de CPU moet de juiste combinatie zetten om die te ontgrendelen. als die CPU onnozel doet bij powerup en voor reset dan zijn die dingen zo afgeclampt

Maar .. omdat bij powerup ook die logische poorten in de war kunnen zijn zet ik twee comparatoren die op lage voedingsspanning kunnen lopen ( LM393 werkt al vanaf 2 volt ... lager dan de VGSth van de nmossen) ) als Vlogic en of Vdrive nog niet hoog genoeg zijn ( ingesteld door T1 en T2 ) dan trekken de uitgangen van de comparators de gates laag via de diodes.

als diode pak je een shottky ( kwestie van lage Vf te hebben )

de comparator uitgang van Vdrive voer je ook terug naar de cpu. zo kan je daar ook lezen of je drive spanning wel correct is.

trust me... it works...

een brownout detector op de CPU doet dan de rest ook nog...

Bedankt voor je reactie, dat zal inderdaad een goede verklaring zijn.
Heb net de datasheet nog is gelezen en hierin staat dat de I/O poorten bij een reset ingangen worden. Ik ga morgen dus is even proberen er een paar pull-down weerstand aan te gooien.
Anders moet ik dat andere circuitje maar is proberen, helaas heb ik de PCB's al gemaakt dus gaat dan een beetje lelijk worden.

Tja, een paar pull-down weerstanden vergeten op je print is ook niet echt handig; afgezien van je huidige probleem, zouden de ingangen van de gate drivers ook zweven als de uC niet op wil starten om waat voor reden dan ook (bijvoorbeeld omdat je aan het programmeren of debuggen bent).

Een halve brug driver met dode tijd injectie had dit hele probleem natuurlijk voorkomen.

Ja dat is inderdaad wel een terechte opmerking. Ik had ze eerst zelfs nog in mijn schema zitten, maar omdat ik ze moeilijk op de print kwijt kon heb ik ze maar weg gelaten. In theorie waren ze toch niet nodig dacht ik.

Daarnaast zag ik net dat ik per ongeluk de config bits uit het menu in de pic programmeerde i.p.v. die uit mijn code. Hier stond de POR op 128ms i.p.v. op 2ms. Dit zou ook wel is een probleem kunnen zijn.

Het probleem is opgelost met 3 pull-down weerstanden aan de ingangen van de drivers.

Het volgende doel is het starten van de motor wat soepeler te laten verlopen. Weet iemand misschien een paper waar dit goed beschreven staat? Over BEMF is genoeg te vinden, maar over het starten veel minder.

Tja, starten is en blijft moeilijk zonder sensors. Heb je wel een stroommeet circuit?

De standaard techniek is voor korte tijd een klein pwm signaal op 1 fase, zodat de rotor daar voor gaat staan. Vervolgens met een steeds groter pwm signaal en steeds hogere frequentie gaan commuteren, tot de motor op snelheid is. Hoe snel je dat kunt doen, en welke pulsbreedte je daar voor nodig hebt, is afhankelijk van het massatraagheidsmoment, inductie, koppel- en tegen-EMK constanten van de motor en de voedingsspanning. Uiteraard gaat dit alles alleen werken voor motoren die propellers e.d. aandrijven, anders kun je motor niet zomaar optoeren.

Ja ik heb er een stroommeet circuit op zitten.

De methode die je daar beschrijft gebruik ik nu ook. De dc van het pwm signaal en de commutatie snelheid gok ik gewoon. Het duurt alleen enkele seconden voordat ik de motor op 2000rpm heb. En de FET´s dissiperen volgens mij nog al wat vermogen tijdens het starten.

Maar zoals ik dat nu begrijp kan je het opstarten alleen verbeteren als je een wiskundig model maakt, of beter gokt.

Ik laat het opstarten eerst wel even zo en ga nu eerst verder met de zero crossing detectie.

Bedankt voor alle hulp.