Servomotor-styrning, PID, diverse tester

Robot, CNC, Pneumatik, Hydraulik, mm
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Servomotor-styrning, PID, diverse tester

Inlägg av Chribbe76 »

Intressant för vissa, tortyr för andra :D

Jag exprimenterar med att styra en servomotor.
Syftet är att få bättre kunskap om motordynamik och PID-reglering.
Servomotorn jag använder kommer från en plotter och har en upplösning på 4000steg/varv, det är en vanlig dc-motor.

Mycket av det jag skriver är min uppfattning och inte nödvändigtvis 100% korrekt.

När man ska servostyra en motor kan man antingen låta regler-algoritmen styra spänningen(dutycycle om man kör PWM) eller styra strömmen.
Skillnaden är väldigt stor.
Om man räknar bort friktion och effektförluster så agerar en elmotor så här:

Styra med spänning: Motorn accelererar väldigt snabbt och drar mycket ström i början och når det varvtal som motsvarar spänningen på i princip samma tid oavsett vilken spänning man lägger över motorn, när motorn har nått rätt varvtal drar den ingen ström alls.

Styra med ström(strömmen = kraften): Motorn accelererar linjärt hela tiden och kommer efter oändligt lång tid att snurra oändligt snabbt, ingen ström betyder att motorn kommer forsätta snurra med nuvarande varvtal.

En fördel med att styra med spänning är att motorn i realtid drar mer ström om man bromsar den så regler-algoritmen får lite hjälp av elektroniken.
En fördel med att styra med ström är att förhållandet mellan strömmen och hur motorn agerar är enklare att definiera och är "linjärare".

I min testrigg har jag en H-brygga för PWM till vänster på plattan och en H-brygga för konstant ström (linjär reglering med en opamp därav kylfläns+fläkt) till höger på plattan.
http://ake.myftp.org/forum/Servomotor_labbplatta.jpg

här följer några varvtals-tester med PWM, varje sträck är 200rpm och tidsaxel-strecken är 0.1sek.

Vi ser att inbromsningen med 0% duty är praktiskt taget linjär ända ner till 0 men om jag polvänder H-bryggan med 0% duty så bromsar motorn mer och inte helt linjärt.
http://ake.myftp.org/forum/ServoHastighetskurva01.gif
http://ake.myftp.org/forum/ServoHastighetskurva01.txt

Med accelerationen som uppstår här smäller det till ordentligt i motorn, 40% ger 2500rpm.
http://ake.myftp.org/forum/ServoHastighetskurva02.gif
http://ake.myftp.org/forum/ServoHastighetskurva02.txt

Här ser vi att retardationen är i princip lika stor oavsett hur mycket man minskar dutycycle, logiskt men ändå intressant.
http://ake.myftp.org/forum/ServoHastighetskurva03.gif
http://ake.myftp.org/forum/ServoHastighetskurva03.txt

Motorn bromsar väldigt kraftigt även med en så låg duty som 8%.
http://ake.myftp.org/forum/ServoHastighetskurva04.gif
http://ake.myftp.org/forum/ServoHastighetskurva04.txt

Hyffsat linjärt och förutsäjbart över 200rpm.
http://ake.myftp.org/forum/ServoHastighetskurva05.gif
http://ake.myftp.org/forum/ServoHastighetskurva05.txt

Ökning med 0.8%-enheter varje 0.1sek.
http://ake.myftp.org/forum/ServoHastighetskurva06.gif
http://ake.myftp.org/forum/ServoHastighetskurva06.txt

Det är lite svajigt med konstant spänning, ett svaj är ett varv på motorn.
http://ake.myftp.org/forum/ServoHastighetskurva07.gif



Med konstant ström från labbagget blir det mycket stabilare.
http://ake.myftp.org/forum/ServoHastighetskurva08.gif

Konstant ström med H-bryggan, ser bra ut.
http://ake.myftp.org/forum/ServoHastighetskurva09.gif

Här styr jag med ström, skillnaden mot att styra med spänning är stor.
http://ake.myftp.org/forum/ServoHastighetskurva10.gif
http://ake.myftp.org/forum/ServoHastighetskurva10.txt

http://ake.myftp.org/forum/ServoHastighetskurva11.gif
http://ake.myftp.org/forum/ServoHastighetskurva11.txt


Jag har implementerat en PID-kontroller i en Pic18F4520 för att styra motorns position.
Ett program i VB skickar Hastighets-info till Picen via RS232 och Picen skickar tillbaka 1 valbar parameter varje PID-loop till datorn som ritas ut på skärmen.
Man kan även ändra PID-parametrarna från programmet.
Testförloppet är 1.5sek, Pid-loopen går på 2000Hz, det ritas ut i 3 rader där varje rad är 1000 pixlar.


Jag använder en enkel PID-algoritm som ser ut så här:

Kod: Markera allt

P=2.625
I=0.0488
D=15.75
Felet = BörPos - ÄrPos
Integrator = Integrator + Felet
Derivata = Felet - FörraFelet
FörraFelet = Felet
Resultat = Felet * P + Integrator * I - Derivata * D ;Resultat (+-255) styr motor-strömmen direkt utan någon anpassning.
Jag tycker motorn går hyffsat men integratorn är för trög, det syns tydligast när man bråkar med motorn.
Om jag ökar integratorn måste jag även öka P och D för att det ska funka men motorn låter mer och blir mycket oroligare.
Det jag tror att jag ska testa är en smartare integrator.


Positionen kommer från motorns encoder men upplösningen är för låg på skärmen för att man ska se positions-avvikelserna.
http://ake.myftp.org/forum/ServoTest1_Pos.gif

En pixel = ett servosteg fel
http://ake.myftp.org/forum/ServoTest1_Err.gif

PID-summan styr motor-strömmen, max ström = 1A.
http://ake.myftp.org/forum/ServoTest1_PIDsum.gif

Filmen är egentligen meningslös för man ser inte hur motorn snurrar.
http://ake.myftp.org/forum/Servomotor1.MOV

En fråga till er som kan det här med servostyrning, I mitt test får jag ett max fel på c:a +-20 servosteg vid acceleration.
Om jag bråkar med motorn får jag lätt ett fel på +-40 servosteg.
Frågan som är väldigt subjektiv lyder: hur många steg fel är rimligt med en vältrimmad lite mer avancerad regleralgoritm?

Fortsättning följer.....
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

Mycket intressant. Gör gärna fler såna här grejjer som du håller på med, typ labba och sen lägga upp resultat här. Man lär sig grymt mycket.

Jag har varit intresserad av PID-reglering sen jag ville fixa automatisk fläktkontroller i datorn och laserprojektor. Nå tips på bra länkar om det?

Önskar att man själv kunde hålla på såhär och lägga upp en massa resultat.
pagge
EF Sponsor
Inlägg: 933
Blev medlem: 15 juni 2004, 00:15:08
Ort: Luleå
Kontakt:

Inlägg av pagge »

Intressant. Har du försökt ställa upp nån matematisk modell för motorn? Då borde det bli lättare att få fram bra PID parametrar. Posta gärna vidare forskning :). Pröva att lägga ett lågpassfilter först också (matematiskt i PICen) för alla högre frekvenser du inte bryr dig så mkt om, annars finns risken att deriveringsdelen ger väldigt mycket brus.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag har tyvärr inga bra länkar.

Jag befinner mig på ganska låg nivå av förståelse ännu och är inte kapabel att göra en matematisk modell av detta, jag gissar istället.

Kul pagge, exakt vad jag kom på för några timmar sen, D kan ge mycket brus så ett filter kan vara nödvändigt.
Användarvisningsbild
strombom
Inlägg: 3305
Blev medlem: 27 maj 2003, 10:50:20
Ort: Västra Götaland
Kontakt:

Inlägg av strombom »

Om du läser runt sidan 20 så finns det lite info om en matematisk modell av en dc-motor.
http://www.me.chalmers.se/~sandholt/PKM ... 060116.pdf

Modellbaserade reglersystem var dock en av de jobbigare kurser jag läst...

Av någon anledning har vi gjort en matematisk modell av hela vår robot vi bygger i en kurs, ända ner till motorerna:
http://bildz.altronix.se/mekpro/robot_top.jpg
Inte för att jag tycker den verkar vara särskilt optimal, men ändå, man fick ju en rejäl dos av algebraräkning vilket aldrig är fel :D

/Johan
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag har läst lite på sidan 20 om modellen av en dc-motor.
Där står det:

A well suited choice is a current controlled DC-motor.

Min tolkning av det är att man styr motorn med ström, precis vad jag gör med min motor.
Längre ner står det:

we can reduce the motor
further by removing the damping and inertia and only keep the relation between
the torque, input voltage, and motor speed.


Om motorn ska styras med ström så borde det väl stå current istället för voltage.

Jag känner mig som ett :?:
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Är inte varvtalet proportionellt mot spänningen och vridmomentet proportionellt mot strömmen?
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag är inte rätt person att svara på det men jag tycker att det är korrekt, iaf över ett visst varvtal.
Jag tror att svaret på den frågan kan utvecklas med många sidor text, det hela är nog inte riktigt så enkelt om man går in på djupet.

Strömmen verkar inte vara inblandad i modellen av motorn så texten "A well suited choice is a current controlled DC-motor" måste betyda något annat eller hjärnsläpp :)
pagge
EF Sponsor
Inlägg: 933
Blev medlem: 15 juni 2004, 00:15:08
Ort: Luleå
Kontakt:

Inlägg av pagge »

Ser man till ström så är vridmomentet direkt proportionellt mot strömmen oavsett varvtal. Dock blir det generatoreffekt så fort motorn snurrar vilket får samma effekt som lägre matningsspänning, dvs strömmen minskar. Då gäller denna formel.

T = T0 - K*W

W = Varvtalet
T = Vridmoment (Torque)
T0 = Vridmoment då motorn är låst (W=0)

Detta som sagt för en given matningsspänning.
Om man ökar matningsspänningen så ökar T0 proportionerligt tror jag, dvs dubbel matningsspänning = dubbelt vrid vid stillastående (W=0)
JBV
Inlägg: 411
Blev medlem: 4 maj 2006, 11:44:28
Ort: Älvsbyn

Inlägg av JBV »

Mycket intressant!! Jag har tänkt byta ut stegmotorerna mot servon på min cnc fräs... Håller på att bygga egna servomotorer, vore kul om man kan bygga kontrollerna och enkodrarna också! :)
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Det låter roligt JBV, du bygger alltså hela motorn, berätta lite mer eller ännu bättre, Starta en tråd om det så vi får veta allt.
JBV
Inlägg: 411
Blev medlem: 4 maj 2006, 11:44:28
Ort: Älvsbyn

Inlägg av JBV »

Jag får göra det senare.. :) Ska hitta något vettigt ställe att lägga bilderna först..

Har hittils bara caddat ihop själva motorhuset.. Det blir 100*100*120 mm stort, med 10 neodym magneter på 40*10*6 mm. Jag har räknat lite konservativt, och med en rotor på 80 mm diameter, så bör den magnetiska kraften räcka till över 12 Nm... Mycket starka magneter.. Tydligen så motsvarar dom nästan 2 liter ferritmagnet ;)

12 Nm @ 1000 rpm = 1,256 kW
Jag har inte räknat något på motorlindningarna ännu... Måste hitta mer information om sånt!

Jag har tänkt direktkoppla dom till mina ledskruvar som har stigningen 2 mm per varv så en maxhastighet på 2000 mm / minut är helt okej... Jag kommer ju förståss aldrig någonsin utnyttja hela vridmomentet, men jag gillar väl tilltagna marginaler. Och det bör ju innebära att dom inte blir så varma heller! ;)

Förresten så hittade jag en diy enkoder!!
http://home.wanadoo.nl/vroemm/cnc/encoder/index.html
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag ser fram emot din tråd.

Encoderskivan i länken påstås ha "500 lines".
Jag har räknat dom och det är 250 linjer, hur kan han ha fel om en sån sak om han har gjort den själv?!

Så här ser encoderskivan ut i min motor, den har 1000 linjer och en diameter på c:a 45mm, den är gjord i metall.
http://ake.myftp.org/forum/EncoderSkiva4000steg.jpg
Användarvisningsbild
EagleSpirit
Inlägg: 1288
Blev medlem: 27 maj 2003, 23:15:48
Ort: Västerås
Kontakt:

Inlägg av EagleSpirit »

Chribbe76: Den där encodern var cool. Önskar att man kunde göra nåt sånt själv.

Han kanske menar 250 "tomma" linjer och 250 svarta linjer.
JBV
Inlägg: 411
Blev medlem: 4 maj 2006, 11:44:28
Ort: Älvsbyn

Inlägg av JBV »

Jag tror han ändrade sidan.. Har det för att det var 2 olika skivor tidigare. Glömde nog bara ändra texten!

Jag skulle vilja ha 1000-2000 pulser per varv så man hamnar på 0,002-0,001 mm upplösning. Såvitt jag förstått så innebär det att jag behöver en skiva med 250 linjer!?

Om den inte skulle fungera så bra så bör det ju inte vara helt omöjligt att kopiera en komersiell enkoder hehe... Förresten, tror ni det går att ta optiken från en gammal mus?
Skriv svar