Driva borstlösa DC-motorer
Driva borstlösa DC-motorer
Jag ska driva en borstlös dc-motor helst utan halleffekt-sensorer. Har förstått att man kan använda hallsensorer för att bestämma rotorns position och styra motorn lite likt en stegmotor. Och motorer utan hallsensorer styr man med hjälp av att mäta "back-EMF" alltså den emk som induceras i lindningarna, och på så sätt bestämma rotorpositionen.
Mitt problem är: Det finns en hel del färdiga kretsar som utnyttjar hallsensorer, men för motorer utan halsensorer verkar det bara finnas ett par philips som fixar biffen. FINNS DET FLER??
EX:
http://www.semiconductors.philips.com/a ... 5145_2.pdf
Kom gärna med allmänna tips eller idéer om du har erfarenhet av sådana motorer.
Vet att många föreslår PIC eller DSP, men det är inte ett alternativ här.
Mitt problem är: Det finns en hel del färdiga kretsar som utnyttjar hallsensorer, men för motorer utan halsensorer verkar det bara finnas ett par philips som fixar biffen. FINNS DET FLER??
EX:
http://www.semiconductors.philips.com/a ... 5145_2.pdf
Kom gärna med allmänna tips eller idéer om du har erfarenhet av sådana motorer.
Vet att många föreslår PIC eller DSP, men det är inte ett alternativ här.
Du kan annars köpa färdiga kompletta kretsar för drivning av den typ av motorer som finns i modellflyg och modellhelikoptrar, som i dag är just av 3-fas typ. Vet dock inte om dessa är tillräckliga för dina behov men dom går för det mesta att modifiera för tex högre ström om man har köpt en som inte klarar av så mycket.
Bla så har mft.nu en hel del att välja mellan.
Köpte själv en där ifrån i somras.
Bla så har mft.nu en hel del att välja mellan.
Köpte själv en där ifrån i somras.
Håller på och bygger en styrning för borstlösa motorer med, min byger på en Atmel. Programmerar den för ATmega 162, men som det ser ut nu kommer den rymmas på en ATiny.
kort beskrivning av koden:
*Vid uppstart beräknas så många sinusvärden man har valt att bygga upp sin sinusvåg av, och skrivs in i en array(måste vara delbart med 3).
detta för att microkontrollen snabbt skall kunna hämta sina sinusvärden.
*sidor reckommenderar att man inte pwm:ar snabbare än 10K, klockan är prescalad till 1024.
*använder en klocka.
*Alla tre kanaler slås på samtidigt.
*beräkning för vilken kanal som skall stängas av först, näst och sist.
*kortaste kanalen stängs av.
*näst kortast kanalen stängs av.
*längsta kanalen stängs av.
Förhopningen är att projektet kommer vara färdigt på ca 1månad+, kommer lägga upp det här då.
kort beskrivning av koden:
*Vid uppstart beräknas så många sinusvärden man har valt att bygga upp sin sinusvåg av, och skrivs in i en array(måste vara delbart med 3).
detta för att microkontrollen snabbt skall kunna hämta sina sinusvärden.
*sidor reckommenderar att man inte pwm:ar snabbare än 10K, klockan är prescalad till 1024.
*använder en klocka.
*Alla tre kanaler slås på samtidigt.
*beräkning för vilken kanal som skall stängas av först, näst och sist.
*kortaste kanalen stängs av.
*näst kortast kanalen stängs av.
*längsta kanalen stängs av.
Förhopningen är att projektet kommer vara färdigt på ca 1månad+, kommer lägga upp det här då.
Min PWM:ning är mjukvarukodad, använder mig inte av den inbygda. Den arbetar på följande sätt:

Där varje steg i 8-bitars klockan är 16MHz/1024(Prescalning av klockan) = 15 625 Hz =ca 15KHz
Teoretiskt kan den kortaste kanalen bara vara en klockcykel av 8-bitars timern.
Så kanalerna kan i extremfallena bli 15KHz kort, eller 61Hz lång
Detta är lite intressant med, genom att minska på spannet här, minskar man på amplituden på sinusvågen, och där med energin till vridmomentet, så t.ex en el-moped kan få längre räckvidd på bekostnad av vridmomentet.....men det viktigaste man kommer hem

Där varje steg i 8-bitars klockan är 16MHz/1024(Prescalning av klockan) = 15 625 Hz =ca 15KHz
Teoretiskt kan den kortaste kanalen bara vara en klockcykel av 8-bitars timern.
Så kanalerna kan i extremfallena bli 15KHz kort, eller 61Hz lång
Detta är lite intressant med, genom att minska på spannet här, minskar man på amplituden på sinusvågen, och där med energin till vridmomentet, så t.ex en el-moped kan få längre räckvidd på bekostnad av vridmomentet.....men det viktigaste man kommer hem

Det du beskriver här är väl just 61 Hz PWM med pulskvot som kan varieras på en 1/256-del när... alltså 8-bitars 61 Hz PWM.PeotryD skrev:*snip*
Där varje steg i 8-bitars klockan är 16MHz/1024(Prescalning av klockan) = 15 625 Hz =ca 15KHz
Teoretiskt kan den kortaste kanalen bara vara en klockcykel av 8-bitars timern.
Så kanalerna kan i extremfallena bli 15KHz kort, eller 61Hz lång
*snip*
Om du vill köra 10 kHz PWM så ska det hinnas med 10 000 cykler per sekund, oavsett vad varje cykel har för pulskvot. Med 8-bitars PWM behövs det alltså en räknare som räknar 10000*2^8 steg per sekund. Prescaler = 6 ger ca 10.4 kHz PWM i ditt fall.
Arvid
Jag hade alldeles för brottom när jag skrev mitt första inlägg.
Jag använder drivkrets IR2136(finns på elfa), för att styra mina (IGBT eller MOSFET).
Antingen var det i detta datablad eller på IR's hemsida jag läste att man inte bör switcha snabbare än 10KHz, så det är här ifrån 10KHz, en reckommendation att man bör ligga under detta.
Det kan även ha stått i databladet för mina IGBT.
bengt-re:Du har helt rätt, man behöver inte ligga på perfekta sinus-våger, var mera att jag ville testa hur bra jag kunde göra dom, och att jag ville försöka få det gjort med en klocka
macgyver:Här har du min kod, den är som sagt var inte färdig, jag är i läget där jag skall börja testa den i kretsen (ATmega8515), jag hoppas att du kan följa koden någorlunda och se hur jag använder interruptet på 8-bitarsklockan för att skapa min PWM-kod som bygger upp 3 sinusvåger, fasförskjutna 120grader.
Kodexempel
Jag har tänkt hastighets reglera genom att lägga in en delay som gör att PWM_head_channel räknas upp olika fort, i detta kodexcempel går motorn på sin max-hastighet.
Jag har extremt mycket kod i interruptet för klockan, men jag hoppas
att på grund av min prescaling på 1024 att jag inte får problem.
*hoppas och håller tummarna:-)*
om det inte stämmer kommer jag skriva om interrupt delen i asembler som första försök.
Jag använder drivkrets IR2136(finns på elfa), för att styra mina (IGBT eller MOSFET).
Antingen var det i detta datablad eller på IR's hemsida jag läste att man inte bör switcha snabbare än 10KHz, så det är här ifrån 10KHz, en reckommendation att man bör ligga under detta.
Det kan även ha stått i databladet för mina IGBT.
bengt-re:Du har helt rätt, man behöver inte ligga på perfekta sinus-våger, var mera att jag ville testa hur bra jag kunde göra dom, och att jag ville försöka få det gjort med en klocka

macgyver:Här har du min kod, den är som sagt var inte färdig, jag är i läget där jag skall börja testa den i kretsen (ATmega8515), jag hoppas att du kan följa koden någorlunda och se hur jag använder interruptet på 8-bitarsklockan för att skapa min PWM-kod som bygger upp 3 sinusvåger, fasförskjutna 120grader.
Kodexempel
Jag har tänkt hastighets reglera genom att lägga in en delay som gör att PWM_head_channel räknas upp olika fort, i detta kodexcempel går motorn på sin max-hastighet.
Jag har extremt mycket kod i interruptet för klockan, men jag hoppas

*hoppas och håller tummarna:-)*
om det inte stämmer kommer jag skriva om interrupt delen i asembler som första försök.