Sida 1 av 1
PID-reglering av DC-motor i C
Postat: 31 januari 2009, 20:49:08
av sagittarius83
Hej!
Jag behöver hjälp med att realisera en
PID-reglering för en
DC motor i
C.
Sedan kommer koden att implimenteras i en större kod för att styra motorn med en AVR Atmega32.
Vet någon om hur man skriver
PID-funktionen (formeln) i C (Se länken här för formel)?
Någon här ute på nätet har säkert gjort det! :rolleyes:
Tack på förhand
Re: PID-reglering av DC-motor i C
Postat: 31 januari 2009, 20:55:31
av thepirateboy
Re: PID-reglering av DC-motor i C
Postat: 31 januari 2009, 23:17:55
av $tiff
Hej!
Hej!
Jag behöver hjälp med att realisera en PID-reglering för en DC motor i C.
Kul, ett av mina favoritämnen!
Sedan kommer koden att implimenteras i en större kod för att styra motorn med en AVR Atmega32.
Tjänar du pengar på det?
Vet någon om hur man skriver PID-funktionen (formeln) i C (Se länken här för formel)?
Jepp, finns många sätt ska du veta!
Någon här ute på nätet har säkert gjort det!
Javisst. Har du letat?
Tack på förhand
Varsågod!
Re: PID-reglering av DC-motor i C
Postat: 1 februari 2009, 01:08:02
av LHelge
En av de enklare varianterna av en PID-snurra är väl:
Kod: Markera allt
sum = 0;
lastE = y-r;
while(1)
{
e = y-r;
sum += e;
u = Kp*e;
u += Ki * sum:
u += Kd * (e-lastE)/h;
lastE = e;
delay(h);
}
Med:
e = felet
r = börvärdet
y = mätning
u = styrsignal
Vill du ha lite anti-windup på din I-verkan så kan du väl multiplicera summan av felet med 0.99 eller nåt liknande i varje iteration lite beroende på hur stort h är. Välj datatyper utefter vad atmegan klarar av.
Re: PID-reglering av DC-motor i C
Postat: 1 februari 2009, 11:59:44
av SvenW
Jag har laborerat i höst med just servostyrning av små borstlösa motorer med ATMega48. Just PID regulatorn är ganska trivial att koda, det svåra är att beräkna parametrarna. Det är nog lättare att prova ut dem!
Om man inte behöver stor servobandbredd, så är det enkelt att få det att fungera, men vill man komma upp i över 100Hz så dyker det upp svårigheter.
1. Det behövs bra givare. Lågt brus och korrekt överföringsfunktion.
Jag har använd kodskivor med hål. Det gäller då att balansera bort så många övertoner som möjligt i överföringsfunktionen som skall vara sinusformad. Det går med rätt val av lysdioder och fotodioder, men kräver tankearbete.
2. 10 bitars AD-omvandlare räcker inte till.
Här har jag med framgång provat att sätta derivatorn utanför processorn och på det sättet få en tystare och jämnare gång. Detta kräver ytterligare två AD-kanaler.
3. Antalet bitar i PWM-genereringen räcker inte riktigt till ens vid 20MHz klockfrekvens. Det går att förbättra med 'tidsinterfoliering', dvs olika PWM-styrvärden i olika tidsintervall.
Problemen yttrar sig så att motorn surrar och får en vibrerande gång.
Men, om det räcker med 10 Hz i servobandbredd så är som sagt inga fundamentala problem. Då gäller det bara att få koden och hårdvaran att fungera.
Re: PID-reglering av DC-motor i C
Postat: 9 februari 2009, 23:48:42
av LHelge
När hårdvaran börjar sätta stopp så kan det hända att man kan få betydligt bättre resultat om man kastar ut PID-regleringen och testar med LQG istället. Kräver lite bättre kunskap om vad det är man ska reglera, men å andra sidan kan man få riktigt schyssta resultat med crappy sensorer/ad/pwm.
Re: PID-reglering av DC-motor i C
Postat: 10 februari 2009, 02:25:11
av blueint
Antar att den magiska förkortningen i detta fallet betyder
"Linear-quadratic-Gaussian control" ..?
Mer sällan förekommande förkortningar har betydligt större risk att bli förväxlade.
Re: PID-reglering av DC-motor i C
Postat: 11 februari 2009, 22:27:07
av LHelge
Japp, det var det jag menade. Jag ber så hemskt mycket om ursäkt.
Det lät som SvenW hade koll på sin reglerteknik men det är ju kul om andra har glädje av tråden också.
Re: PID-reglering av DC-motor i C
Postat: 11 februari 2009, 22:48:36
av $tiff
LQG kan lätt bli för tungt för en liten AVR. Vanlig tillståndsåterkopplign däremot! Fast då är vi tillbaks till att analytiskt ta fram parametrar, precis som man bör göra för PID, eftersom PID kan ses som en tillståndsåterkoppling med avseende på reglerfelet, dess derivata och integral.
Re: PID-reglering av DC-motor i C
Postat: 11 februari 2009, 23:04:51
av LHelge
Det tyngsta jobbet är förmodligen att modellera upp processen som skall regleras. Är det bara DC-motorn som skall varvtalsregleras finns allt du behöver i databladet, men sitter det fast någonting på axeln kan det bli jobbigare.
Vill du ha hjälp med modellen så får du berätta lite mer om den. Alternativt om du har en bra modell så kanske vi kan leda dig på rätt väg hur du bestämmer parametrarna.
Annars kan jag rekommendera boken Reglerteknikens Grunder av Bengt Lennartson Den går igenom det mesta vad gäller PID-reglering och lite grundläggande modellering av processer också. Har till och med för mig att det finns något stycke om implementering av PID-regulatorer.