Hallo,
Ik heb een stappenmotor driver gemaakt mbv een PIC en een H-brug(driver), echter zit ik met een probleem mbt overcurrent detection.
Het systeem zit vrij eenvouding in elkaar.
15V voeding in -> elco -> zekering -> hbrug -> motor.
Vervolgens heb ik een current sense weerstand van 0.1 ohm tussen de hbrug en gnd zitten (GND van de motor is met star point grounding geroute en heeft dus een eigen current return path).
Hierachter zit een RC filter (van 47nF en 100 ohm) om snelle flanken weg te filteren.
Nu zit hier het probleem, de stroom door de weerstand lijkt veel te snel te stijgen. In 20µs stijgt de spanning tot 0,2V waarna mijn controller ingrijpt en de highside mosfet uitschakelt.
Hieruit concludeer ik dat de software in ieder geval goed is, omdat deze bij een te hoge spanning (ingesteld op 0,1V) de stroom onderbreekt. (De motor mag 2,1A hebben en deze waarde wordt niet overschreden)
Echter omdat de stroom zo snel stijgt valt er helemaal niks te regelen.
Mijn motor heeft een inductie van 8.8mH waaruit ik heb berekend dat de stroom maximaal 1.7 A/ms kan stijgen (weerstand verwaarloosd dus het moet nog minder zijn).
Als ik de stijgsnelheid van mijn motorstroom bekijk is dat 10A/ms.
Weet iemand wat die hoge stijgsnelheid kan verklaren?
stappenmotoren zijn eigenlijk stroomgestuurd. Je ziet veelal de stroomwaarde opgegeven. In sommige gevallen wordt de spanning van de motor gegeven, deze is echter niet van belang, omdat je de spoel in een stappenmotor met stroom wil sturen. De opgegeven spanningen zijn meestal heel laag (in de orde van 2 tot 5 volt)
Jouw voeding staat op 15 volt, met als gevolg dat de stroom zeer snel zal toenemen. Kijk eens op de specs van de motor, daar staat vast geen 2Ampere en 15Volt.
De hoge spanning zorgt er dus wel voor dat de stroom lekker snel toeneemt. Als je daarna een stroomregeleing toepast ben je een heel eind in de goede richting.
De hoge spanning (50 volt, die je ook vaak ziet op commerciële drives) zorgt er voor dat de stroom lekker snel toeneemt, zodat je veel stappen per seconde kunt maken, oftewel veel snelheid kan opbouwen.
Stroom heb je nodig voor koppel van de motor,
Spanning heb je nodig voor maximale toerental van je motor.
Ja dat weet ik, de motor is gespecificeerd op 3.8V bij 2.1A (serie bipolair).
Ik heb inderdaad een hogere spanning gekozen om een hogere draaisnelheid te halen, ik heb al eens eerder een stappenmotor sturing gemaakt (op 30V, andere motor) en daar had ik een chopperfreq van 20kHz (nu instelbaar maar heb van 20-80kHz getest).
Echter zag je bij deze motor de stroom netjes oplopen (ook snel 3 tot 5 cycli) waarna je rond het trippoint van de overcurrent detection een soort haaienvinnen patroon kreeg (spanning werd in en uit geschakeld om de stroom rond een bepaalde waarde proberen te regelen).
Nu heb ik echter datzelfde patroon in 1 cyclus van 20kHz en ik vraag me af hoe het kan dat de stroom zo ontzettend snel stijgt.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Ik snap eigenlijk niet wat je bedoelt met "GND van de motor is met star point grounding geroute en heeft dus een eigen current return path". De motorwikkelingen zitten toch aan de H-brug, dus waar heb je dan nog een ground aan de motor zitten?
De enige verklaring die ik zo kan bedenken, is dat de inductie van de motor veel lager is, of de weerstand van de meetweerstand hoger dan je denkt.
Volgens mij zou je, als je begint met een stroomloze spoel, 1.2ms lang 15V moeten aanbieden om een stroom van 2A te krijgen.
U = L * dI/dt
L = 8.8mH, U = 15V, dI = 2A
dt = 1.17ms
Volgens mij moet die 1.7A/ms dus wel kloppen.
Je RC_FILTER aanpassen, condensator en weerstand vergroten.
Je kan denk beter een elco toepassen ipv een condensator.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
47nF en 100ohm geeft een tijdconstante van 4.7us, met een PWM cycle van 50us vind ik dat niet echt heel erg laag. Als je die veel trager gaat maken, kun je in ieder geval niet meer cycle-by-cycle de stroom begrenzen.
Kun je de werkelijke stroom en de uitgang van dat filter bekijken? Daar zou je toch wel iets zinnigs uit moeten kunnen halen.
Het zou natuurlijk kunnen dat je een forse transiënt krijgt, die de condensator een stuk oplaadt, waardoor het fout gaat of zo.
Het kan zinvol zijn om de weerstand te splitsen in 2 weerstanden, en het signaal daar tussenin te clampen, zodat de amplitude van de transiënt sterk beperkt wordt.
@SparkyGSX
Met GND van de motor bedoel ik eigenlijk de onderkant van de Hbrug (waar mn current sense resistor zit). Dit heb ik vermeld omdat het niet star-point aarden van dit punt je meting kan beinvloeden, omdat dan je motorstromen langs je µC kunnen lopen. Mijn excuses als dit onduidelijk was.
De weerstand waarover ik meet is 100m ohm dit heb ik al nagemeten.
Omdat ik geen inductie meter heb heb ik met een RL filter mijn functie generator en mijn scope proberen te achterhalen wat de inductie was en toen kwam ik uit op 5.5mH, aangezien er toleratie in de componenten zit en aflees/instel fouten op de analoge scope/functiegenerator mag ik aannemen dat de 8.8mH van de datasheet wel correct is.
Verder had ik precies dezelfde formule als die jij nu gebruikt gebruikt om het theoretisch maximum te berekenen gebruikt, met inderdaad 1,7A/ms als resultaat. In de schakeling zie ik echter flanken van 10A/ms en ik snap niet waarom.
@Lambiek
Waarom zou het aanpassen van het filter nut hebben, ik vertraag daarmee wel het te meten signaal, maar niet de motorstroom waar het nou net om gaat. Verder heb ik met deze waardes al eerder een perfect werkende stappenmotor driver aan de praat gekregen.
En waarom zou een elco beter zijn dan een keramische condensator?
Hier een link met het globale schema (op de groene lijnen wordt gemeten). Het rechter aardpunt is het punt dat via star point verbonden is.
En hier een afbeelding van het scope beeld gemeten na het filter (20µs/div bij 0,1V/div).
Edit: Hier de foto over de sense weerstand direct (10µs/div bij 0,2V/div).
Edit2: Op aanraden van een vriend een 2de motor (hetzelfde type) geprobeerd, geeft echter exact hetzelfde resultaat.
Edit3: Mij is opgevallen zoals op de laatste foto te zien is, dat de stroom over de sense weerstand (direct gemeten) vrij snel stabiliseerd nog ruim voordat de overcurrent detection een sample heeft gedaan en de mosfets uitschakelen.
Edit4: Volgens mij heb ik het probleem gevonden, de spanning over de spoel van de motor lijkt terug te komen over de sense weerstand.
Op deze foto is te zien dat de waveforms exact gelijk zijn, de bovenste trace is de motorspanning (5V/div) en de onderste is de spanning over de sense weerstand (0,5V/div) beide op 20µs/div.
Heeft iemand enige idee hoe de motorspanning over de sense weerstand kan komen te staan of nog beter, hoe is dit op te lossen?
@Lambiek hieronder ja idd de bedoeling is de spanning over de sense weerstand te meten(100mohm dus 1A = 0,1V).
[Bericht gewijzigd door lethalshot op (10%)]
Even een vraag: je wil toch de spanningsval over de sensweerstand meten, of begrijp ik dat verkeerd.
Ik ben er ondertussen achter gekomen dat de sense weerstand goed werkt. Heb de current limit hoog gezet en een 10 ohm weerstand in serie met de motor geplaatst, hierdoor komt er een nette 120 mV over de sense weerstand te staan wat ik ook zou verwachten (15V / (10 + 2 (weerstand motor)).
Echter dynamisch blijven die hoge spikes terug komen die ik uitgaande van de theorie niet zou verwachten.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
En zie daar het verschil tussen de theorie en de praktijk, en gelijk het grootste argument tegen onderwijs dat volledig op de theorie gericht is.
Die spikes zouden, in gesimplificeerde theorie, niet voorkomen. In de praktijk heb je last van parasitaire inducties, capaciteiten, etc. Een meetweerstand is niet zuiver ohms, die is ook inductief. Zelfs een rechte draad is nog licht inductief. Je hebt toch geen draadgewonden weerstanden gebruikt he?
Daarbij heb je mogelijk last van MOSFETs die niet lekker op en dicht gaan, maar door Miller charges en andere parasitaire effecten een aantal keer heen en weer door het lineaire gebied gaan voordat ze echt open of dicht zijn. Het kan zelfs nog gebeuren dat de MOSFET door een transient in avalanche breakdown gaat.
Ok ik voel me nu heel stom.
Probleem is opgelost en het 'probleem' was dat er geen probleem is.
Mijn current sense weerstand (trouwens een special low inductance current sense weerstand, maar was een goede tip) zit aan de onderkant van mijn H-brug.
Aangezien mijn H-brug ingesteld was op slow-decay (hier een document met info daarover) loopt er tijdens het uitzetten van mijn high-side mosfet geen stroom door de weerstand, hierdoor wordt de spanning natuurlijk ook direct 0V (verklaring stijle flank naar beneden).
Vervolgens schakel ik mijn mosfets weer in, de stroom loopt weer door de weerstand, maar door de korte off-time (ADC meet immers 0V) is de stroom in de spoel nauwelijks afgenomen en de spanning hersteld zich weer tot bijna het oude niveau (verklaring stijle flank naar boven).
Als laatste is het ringen op de golf ook verklaard, door een typ fout in de code zette ik af en toe ipv RB6, RD6 op nul (RD6 is driver uitgang) waarna de software die in een loop zit dit direct corrigeerde en hem weer aan zette.
SparkyGSX
Een manager is iemand die denkt dat negen vrouwen in één maand een kind kunnen maken
Het lijkt me wel zinvol om het signaal op de gate nog even goed te bekijken; als daar alsnog veel ringing in zit, kun je daar wel wat aan doen met een gate weerstand. Daarmee worden de flanken wel wat minder steil, maar daardoor krijg je ook wat minder overschoot, en de weerstand dempt de ringing tussen de MOSFET en de gate driver.
De gates zijn heel schoon nu, er zit een overshoot van minder dan 5% op. Iedereen nog bedankt voor alle input.