Digitalstyrd spänningsregulator?

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Digitalstyrd spänningsregulator?

Inlägg av $tiff »

Jag försöker febrilt konstruera en digitalstyrd spänningsregulator bestående av en LM317 och en PIC16F84A som kontroller.
Målet är simpelt att styra en motor. Eller rättare sagt två.

Jag såg ett fint schema i databladet till LM:en på hur man kan koppla transistor-resistor-segment parallellt till att sänka strömmen på adjust-sidan:
Bild

Problemet med denna är att; hur man än väljer motstånden så får man ingen fin resistanskurva. Antingen blir den logaritmisk eller så går man miste om väldigt många bitar ("dubletter")

Så jag vände på steken och möblerade om lite i schemat:
Bild
Detta blev ju jättebra, trodde jag när jag byggde ihop det.
Men så kan man tydligen inte göra.
Jag antar att transistorerna inte kan dumpa sin ström som de vill och allt blir instabilt eller funkar inte alls.

Några tips på hur man kan förbättra min version av schemat? Eller är det bara att lägga ner?
Det finns ju ett smidigt alternativ med en digital potentiometer, men någon sådan har jag inte och Elfa ligger långt bort :(

Jag vet vad ni tänker: Varför i hela friden använder jag inte PWM istället?
Svaret är att 84A stödjer inte hårdvaru-PWM och då kan det va' så med det. Finns det några andra sätt att styra motorhastigheten? En extern PWM-krets, ja. Men den ska helst vara simpel och lätt kunna styras av en PIC.
hebbe
Inlägg: 162
Blev medlem: 29 maj 2003, 00:45:20

Inlägg av hebbe »

Den kopplingen med LM317 kommer nog alldrig ned på 0 volt, ideen med den måste vara typ att kunna välja/trimma utspänningen på en strömforsörjning.

Vad skall din PIC krets göra förutom att varvtalsreglera motorn? Det är inte jättesvårt att skriva ett program som generererar PWM. Det är ju bara två loopar som slår av och på en port-pinne. Fast du måste ha kopior av loop-registren så den kommer ihåg..

PIC kretsar är så snabba, dom hinner med en massa andra saker också samtidigt om man lägger in det i loopen. T.ex en table lookup om man vill skapa sinusvåg.
hebbe
Inlägg: 162
Blev medlem: 29 maj 2003, 00:45:20

Inlägg av hebbe »

Så här kan en SW PWM se ut:

period movf voltage,w ;hämta programmerad spänning
movwf onreg ;kopia
movwf offreg ;kopia
BCF PORTA,0 ;slå av pinne
loop1 incfsz offreg,f ;räkna upp OFF tiden
goto loop1
BSF PORTA,0 ;slå på pinne
loop2 decfsz onreg,f ;räkna ned ON tiden
goto loop2
goto period

Voltage registret kan ha värden mellan 1 och 255. Det är en liten offset på ca 1/255, dödtid, för dom första instruktionerna. Inte särskilt problem på en motor.

Init, när processorn startar måste sätta PORTA till utgång och omedelbart resetta pinnen (i fall resten av initen är så lång motorn börjar gå för fullt).

Med 4MHz kristall: 1Meg/ ungefär 3*256 instruktioner= 1300KHz period.
Användarvisningsbild
evert
Inlägg: 98
Blev medlem: 15 juli 2003, 23:11:50
Ort: Jönköping

Inlägg av evert »

Det finns ju för all del möjlighet att skapa pwm med hjälp av digitala räknare.

I skolan funkade roboten enligt följande:

En pinne skickade ut en byte till ett skiftregister (seriell/parallell).
Skiftregistret matades ut till en (binär?)komparator. En räknare matade ut ett fyrabitstal......och detta jämfördes med en halv byte......Den andra "byte-halvan" användes till den andra motorn.........hängdu du med.
pwm utan H-PWM.....men med en upplösning på bara 4 bitar----och en hel del hårvara.......ju.
danei
EF Sponsor
Inlägg: 26556
Blev medlem: 2 juni 2003, 14:21:34
Ort: Östergötland
Kontakt:

Inlägg av danei »

Koppling #2 funkar nog om du använder FET-transistorer, dom drar ingen ström. Behöver du så bra upplösning att den första varianten inte funkar? Man borde väl kunna få 5-6 vettiga hastigets lägen iafa.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

danei skrev:Koppling #2 funkar nog om du använder FET-transistorer, dom drar ingen ström. Behöver du så bra upplösning att den första varianten inte funkar? Man borde väl kunna få 5-6 vettiga hastigets lägen iafa.
Så det tror du? Med FET... låter intressant, använder nämligen bara vanliga BC337/40 nu :D


Den första ritningen ger, som sagt, en närmare logaritmisk skala, se följande exempel:
(R3=A, R4=B, R5=C, R1≈2k @ 7,2V, R2 och kortslutande transistor utelämnas)
Bild

Det är ju i slutet man behöver tätt mellan de olika resistanserna då de högre spänningarna.

Vi skulle gärna vilja ha 8 olika hastigheter att välja mellan, vilket passar alldeles förträffligt med 3 bitar upplösning om allt fungerar som det ska.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

hebbe skrev:Den kopplingen med LM317 kommer nog alldrig ned på 0 volt, ideen med den måste vara typ att kunna välja/trimma utspänningen på en strömforsörjning.

Vad skall din PIC krets göra förutom att varvtalsreglera motorn? Det är inte jättesvårt att skriva ett program som generererar PWM. Det är ju bara två loopar som slår av och på en port-pinne. Fast du måste ha kopior av loop-registren så den kommer ihåg..

PIC kretsar är så snabba, dom hinner med en massa andra saker också samtidigt om man lägger in det i loopen. T.ex en table lookup om man vill skapa sinusvåg.
Nej, visst når den inte 0V, men vem vill kunna mata en motor med spänning nära 0V? Lägsta spänningen ut ligger runt 1,3V och högsta ut ligger ca 1,0-1,5 under inspänningen (inga mirakelsiffror precis :( ).

Vi ska ha en PIC till att styra en robot. Antingen en framdrivningsmotor med svängning på framhjulen eller simpelt två framdrivningmotorer som driver varsin sida (höger/vänster, "pansarvagnsstyle"). Kraftkällan är batteri på 7,2V (som visst gärna kräker ut 8,5V :D ).
Kort sagt så har den PICen massor att hålla reda på, sensorer, styrning och radiokommunikation. Därför kommer den inte att hinna göra PWM-vågor på mjukvaruväg.
Vi håller på att försöka få igång en PIC16F877A, men har problem med programmeringen. När (om?) den kommer igång kan vi ju prova på hårdvarustyrd PWM.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

hebbe skrev:Så här kan en SW PWM se ut:

period movf voltage,w ;hämta programmerad spänning
movwf onreg ;kopia
movwf offreg ;kopia
BCF PORTA,0 ;slå av pinne
loop1 incfsz offreg,f ;räkna upp OFF tiden
goto loop1
BSF PORTA,0 ;slå på pinne
loop2 decfsz onreg,f ;räkna ned ON tiden
goto loop2
goto period

Voltage registret kan ha värden mellan 1 och 255. Det är en liten offset på ca 1/255, dödtid, för dom första instruktionerna. Inte särskilt problem på en motor.

Init, när processorn startar måste sätta PORTA till utgång och omedelbart resetta pinnen (i fall resten av initen är så lång motorn börjar gå för fullt).

Med 4MHz kristall: 1Meg/ ungefär 3*256 instruktioner= 1300KHz period.
Okej, men tyvärr kör vi med PicBasic, så vi fattar inte så mycket assembler.
Som jag sa ovan, den är upptagen med mycket annat. Men i värsta fall kan man ju dedikera en PIC att göra PWM och skicka duty-datan seriellt tilld en från den andra PICen?
Eller så lägger man helt enkelt ner energin på att få igång en större PIC med hårdvaru-PWM-utgångar.
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

var fick ni tag på PicBasic?
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

EagleSpirit skrev:var fick ni tag på PicBasic?
På internet... :D :vissla: :helgon:
Användarvisningsbild
janne66
Inlägg: 473
Blev medlem: 10 juni 2003, 09:25:40
Ort: Blekinge
Kontakt:

Inlägg av janne66 »

Gäller det varvtalsreglering så är det nog PWM som gäller.

Att bara styra genom att ändra spänningen är svårt eftersom motorn drar olika mycker ström och resistansen varierar.


Digitalstyrd spänningsreglering i andra sammanhang skulle kunna lösas med 723 regulatorn, där man manipulerar referensspänningen i regulatorn
genom att ge den en konstgjord referens från en D/A omvandlare.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

janne66 skrev:Gäller det varvtalsreglering så är det nog PWM som gäller.

Att bara styra genom att ändra spänningen är svårt eftersom motorn drar olika mycker ström och resistansen varierar.


Digitalstyrd spänningsreglering i andra sammanhang skulle kunna lösas med 723 regulatorn, där man manipulerar referensspänningen i regulatorn
genom att ge den en konstgjord referens från en D/A omvandlare.
Ja, vi tänkte reglera hastigheten på motorn med en spänningregulator eftersom vi inte har tillgång till PWM. Någon exakt varvtalsreglering kan jag ju inte säga att vi behöver, det ska bara vara en simpel krets som gör att man kan ändra hastigheten på framdrivningen, helst med 8 steg.
Användarvisningsbild
evert
Inlägg: 98
Blev medlem: 15 juli 2003, 23:11:50
Ort: Jönköping

Inlägg av evert »

Ett sätt att få PWM: :roll:

http://se.msnusers.com/SvenskaRobotbygg ... PhotoID=24

Mata in 8 bitar i skiftregister (seriellt in/parallellt ut) så går det bara åt ett par pinnar för att styra robotens motorer ju.
hebbe
Inlägg: 162
Blev medlem: 29 maj 2003, 00:45:20

Inlägg av hebbe »

ja, det skulle kunna vara en bra lösning att ha en PIC som styr och en annan som skapar pulserna. Den som styr kan ju programmeras i basic, den med PWM i ASM.

Ser ni använder 16bitars upplösning, då blir det plats med flera kanaler och instruktioner.

T.ex skulle man med 20-30 ASM linjer i en PIC16C54 (eller någon annan 20pin PIC) LÄTT skapa en krets som det här:

Fyra PWM kanaler (4 motorer) med 16bits upplösning på PORTA,1-3

PORTB: bit0-3: Spänning till vald motor. bit4-7: val av kanal 1-4.

T.ex du vill ändra motor 1 till värdet 8: Sätt värdet 8 på PORTB,1-3. Pulsa sedan PORTB,4 en gång(clocka in). PWM-loopen vill snappa upp värde på 0-3 och lägga in det på rätt kanal.

Säg till om du vill ha en testad kod du kan lägga in i MPLAB.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

evert skrev:Ett sätt att få PWM: :roll:

http://se.msnusers.com/SvenskaRobotbygg ... PhotoID=24

Mata in 8 bitar i skiftregister (seriellt in/parallellt ut) så går det bara åt ett par pinnar för att styra robotens motorer ju.
Jag har funderat på den här kretsen. Eftersom jag fortfarande är nybörjare så kan jag ju passa på att fråga lite:

Med de digitala ingångarna på 7485:an ställer man duty-cycle med 4 bits upplösning (16 lägen), mellan 0% och 100% antar jag. Då lär det ju bara vara de övre 16 lägena som är intressanta för att få snurr på en motor?
Är dessa buffrade eller måste man hålla dem i samma läge hela tiden? (antar att de inte är buffrade).
CLK-ingången på 74191:an är bara att pulsa med godtycklig frekvens, lämpligtvis genererad av en 555:a? är 100Hz en lämplig frekvens för en batteridriven 8V 0,4A motor? Eller ska man sträva efter så hög switchfrekvens så möjligt?
Och sist: Utgången på 7485:an (PWM out) koppas bara till gaten på en MOSFET eller?

Edit: Blandade ihop bits och lägen, ajjabajja.
Senast redigerad av $tiff 22 augusti 2003, 22:50:45, redigerad totalt 1 gång.
Skriv svar