Stegmotordrivning
Postat: 27 augusti 2014, 19:03:00
Jag har kommit till skott med mekaniken till min stenslipare. Det är ju väldigt avancerat: en vals från en A3-skrivare (Fujitsu DL2400) med en stegmotor som är monterat med 3 st M4 gängstavar.
Drivningen består av en PIC16F73 (för att den fanns i skrotlådan) med en 8MHz kristall (för att det fanns i skrotlådan). Jag har monterat ett par knappar då man ju alltid vill kunde använda dom, i detta fall kan jag ställa hastigheten upp eller ner.
Fick för mig att det kunde vara trevligt att spara sist ställda hastighet och använda om det sker en återstart och då behövde jag ju en EEPROM. Men det har denna uråldriga PIC inte... så jag dök ner i skrotlådan och tog en 25LCC160 (EEPROM, SPI, 16kb) från ett gammalt kretskort och lödde dit. Fungerar bra. Gjort programmet så att 2 sek efter att man släpper en knapp sparas värdet.
Sedan är det drivningen, det sker via 4 utgångar och ett bunt transistorer, vanlig unipolar motor.
Det fungerar - men inte så att jag är nöjd. Jag måste hela tiden prioritera mellan steghastighet och drivspänning och hur varmt allt ska bli - och det ids jag inte! Jag vill alltså göra det hela till en chopper-drivning!
Jag har redan 2 st 0,333 Ohm motstånd, en för varje lindningspar till VDD. Jag kunde så ta ett par op-amp och göra ett par schmitt-trigger som sedan styrde drivningen via ett par gates - men jag hittade bara 324'or och de fungerar rätt dåligt med 5V matning så den idé spolade jag.
Jag har alltså shuntmotstånderna men ingen high-side avkänning - eller har jag? Fick idén att jag kunde montera en PNP över shunten så att när strömmen blir hög nog ska den leda. Men med 0,333 Ohm shunt ville strömmen bli alldeles för hög så vad göra med de befintliga komponenter?
Jag grunnade på det ett tag och plötsligt klarnade det: Om jag tar ett motstånd mellan shunten och basen och drar en konstant ström genom dessa motstånd kommer detta att ge ett konstant spänningsfall över motstånden. Då spänningen varierar över shunten beroende på belastningen kommer den fulla spänningsvariation att slå igenom på basen och *poof* - transistorn leder när det blir överström!
OK, jag vet att det är temperaturkänsligt osv men det får duga, skiten ska inte till månen!
Vid att variera den konstanta strömmen genom motstånden kan jag justera den maximala strömmen och ett par konstantströmsgeneratorer till detta är i all sin enkelhet ett potentiometer mellan GND och +5V samt två NPN-transistorer med lika stora motstånd mellan emitter och GND. Javisst, inte heller perfekt men det får duga.
Men jag vill gärna ha lite digitalt i det hela, lite tröskelvärde och switchning och den lösning kommer ju att ge en analog funktion. Hur fixa?
Letade igenom lagret av uråldrig elektronik och hittade ett par 47HCT74. Det är dubbla flip-flop's med Data, Klocka, Set och Reset. Klurade lite och insåg att om jag använder styrsignalerna till stegningen ihop med det hela kunde jag få det till att fungera.
Jag tar signalerna från PIC'en in på var sin nSet. När de signaler går till '1' ska transistorn drivas så jag tar ut från nQ till transistorn.
Sedan går "överströmssignalen" från sensortransistorn in på Dataingången, nReset är kopplat till +5V (oanvänd alltså) och kvar var det att skaffa en oscillator till att driva klockan.
PIC'en hade Timer 2 till övers, den används med CCP-enheten till att skapa PWM - så jag fixade en sådan på 50KHz., det var bara lite programmering.
Så tanken bakom det hela är:
Om latchen är Set (den transistor ska INTE driva) kommer den att befinna sig i ett låst läge med Q = '1' och nQ = '0'.
När ingen överström finns klockas det en '0' in i latchen.
Om det "rapporteras" överström är det en '1' som klockas in, detta får nQ att gå '0' vilket stoppar drivningen så den kan toggla.
Om drivning ska ske kommer den inklockade nolla att driva Q = '0' och nQ = '1' vilket driver transistorn.
Huruvida detta fungerar kan jag inte svara på än, jag har inte lödd dit strömavkänningen men ska strax göra det. 74HCT74-kretsarna är monterade och inkopplade och om jag manuellt markerar "överström" stängs signalen till transistorn av som planerat så jag hyser hopp om funktionen.
Sedan ska jag testa lite olika hastigheter på PWM-frekvensen och se vad som händer.
När det fungerar ska jag försöka rita ett schema och posta.
EDIT: OK, nu er det bygget och rent omedelbart verkar det fungera, har dock inte hunnit verifiera allt än men initialt verkar det OK.
Drivningen består av en PIC16F73 (för att den fanns i skrotlådan) med en 8MHz kristall (för att det fanns i skrotlådan). Jag har monterat ett par knappar då man ju alltid vill kunde använda dom, i detta fall kan jag ställa hastigheten upp eller ner.
Fick för mig att det kunde vara trevligt att spara sist ställda hastighet och använda om det sker en återstart och då behövde jag ju en EEPROM. Men det har denna uråldriga PIC inte... så jag dök ner i skrotlådan och tog en 25LCC160 (EEPROM, SPI, 16kb) från ett gammalt kretskort och lödde dit. Fungerar bra. Gjort programmet så att 2 sek efter att man släpper en knapp sparas värdet.
Sedan är det drivningen, det sker via 4 utgångar och ett bunt transistorer, vanlig unipolar motor.
Det fungerar - men inte så att jag är nöjd. Jag måste hela tiden prioritera mellan steghastighet och drivspänning och hur varmt allt ska bli - och det ids jag inte! Jag vill alltså göra det hela till en chopper-drivning!
Jag har redan 2 st 0,333 Ohm motstånd, en för varje lindningspar till VDD. Jag kunde så ta ett par op-amp och göra ett par schmitt-trigger som sedan styrde drivningen via ett par gates - men jag hittade bara 324'or och de fungerar rätt dåligt med 5V matning så den idé spolade jag.
Jag har alltså shuntmotstånderna men ingen high-side avkänning - eller har jag? Fick idén att jag kunde montera en PNP över shunten så att när strömmen blir hög nog ska den leda. Men med 0,333 Ohm shunt ville strömmen bli alldeles för hög så vad göra med de befintliga komponenter?
Jag grunnade på det ett tag och plötsligt klarnade det: Om jag tar ett motstånd mellan shunten och basen och drar en konstant ström genom dessa motstånd kommer detta att ge ett konstant spänningsfall över motstånden. Då spänningen varierar över shunten beroende på belastningen kommer den fulla spänningsvariation att slå igenom på basen och *poof* - transistorn leder när det blir överström!
OK, jag vet att det är temperaturkänsligt osv men det får duga, skiten ska inte till månen!
Vid att variera den konstanta strömmen genom motstånden kan jag justera den maximala strömmen och ett par konstantströmsgeneratorer till detta är i all sin enkelhet ett potentiometer mellan GND och +5V samt två NPN-transistorer med lika stora motstånd mellan emitter och GND. Javisst, inte heller perfekt men det får duga.
Men jag vill gärna ha lite digitalt i det hela, lite tröskelvärde och switchning och den lösning kommer ju att ge en analog funktion. Hur fixa?
Letade igenom lagret av uråldrig elektronik och hittade ett par 47HCT74. Det är dubbla flip-flop's med Data, Klocka, Set och Reset. Klurade lite och insåg att om jag använder styrsignalerna till stegningen ihop med det hela kunde jag få det till att fungera.
Jag tar signalerna från PIC'en in på var sin nSet. När de signaler går till '1' ska transistorn drivas så jag tar ut från nQ till transistorn.
Sedan går "överströmssignalen" från sensortransistorn in på Dataingången, nReset är kopplat till +5V (oanvänd alltså) och kvar var det att skaffa en oscillator till att driva klockan.
PIC'en hade Timer 2 till övers, den används med CCP-enheten till att skapa PWM - så jag fixade en sådan på 50KHz., det var bara lite programmering.
Så tanken bakom det hela är:
Om latchen är Set (den transistor ska INTE driva) kommer den att befinna sig i ett låst läge med Q = '1' och nQ = '0'.
När ingen överström finns klockas det en '0' in i latchen.
Om det "rapporteras" överström är det en '1' som klockas in, detta får nQ att gå '0' vilket stoppar drivningen så den kan toggla.
Om drivning ska ske kommer den inklockade nolla att driva Q = '0' och nQ = '1' vilket driver transistorn.
Huruvida detta fungerar kan jag inte svara på än, jag har inte lödd dit strömavkänningen men ska strax göra det. 74HCT74-kretsarna är monterade och inkopplade och om jag manuellt markerar "överström" stängs signalen till transistorn av som planerat så jag hyser hopp om funktionen.
Sedan ska jag testa lite olika hastigheter på PWM-frekvensen och se vad som händer.
När det fungerar ska jag försöka rita ett schema och posta.
EDIT: OK, nu er det bygget och rent omedelbart verkar det fungera, har dock inte hunnit verifiera allt än men initialt verkar det OK.