PID-reglering med uc
PID-reglering med uc
Är det någon som har gjort PID-reglering med uc? Kollade runt lite på nätet och hittade http://www.embedded.com/2000/0010/0010feat3.htm.
- EagleSpirit
- Inlägg: 1288
- Blev medlem: 27 maj 2003, 23:15:48
- Ort: Västerås
- Kontakt:
Vad ska du använda den till? Vad har du för ingångsvärden och vad ska du få ut?
Lite att läsa: http://www.microchip.com/stellent/idcpl ... lterID=521
Har för mig att jag hittade en massa information om det när jag lärde mig förut. Kommer dock inte ihåg vad jag sökte på.
Lite att läsa: http://www.microchip.com/stellent/idcpl ... lterID=521
Har för mig att jag hittade en massa information om det när jag lärde mig förut. Kommer dock inte ihåg vad jag sökte på.
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt:
Låter intressant, har inte implementerat PID i uC mest för att jag inte behövt det, eller inte lyckats komma på ett projekt som jag kan klämma in lite PID-reglering.
Om du vill ha mer inspiration/information så ta en titt på :http://www.avrfreaks.com oc sök i forumen efter PID så får du en mängd träffar.
Glöm inte att berätta vad det är på gång
Lycka till!
Om du vill ha mer inspiration/information så ta en titt på :http://www.avrfreaks.com oc sök i forumen efter PID så får du en mängd träffar.
Glöm inte att berätta vad det är på gång

Lycka till!
I det enklaste fallet med PID kan man t.ex använda denna formeln:
ut(t) = Pk*e(t) + Ik*sum(e(t)) + Dk(e(t)-e(t-1))
där e(t) är reglerfelet i nuvarande tidpunkt t d.v.s utsignalen(t) - insignalen(t)
Pk = Proportionella konstanten
Ik = Integreringskonstanten
Dk = Deriveringskonstanten
sum(et(t)) ger summan av alla tidigare insignaler d.v.s integralen
Hur man ska ställa in dessa konstanter och hur hur snabbt man ska sampla insignalen beror helt på vilket system man vill reglera
Ett sätt att få ett humm om konstantvärdena är att använda ziegler nichols metod:
http://www.chem.mtu.edu/~tbco/cm416/zn.html
ut(t) = Pk*e(t) + Ik*sum(e(t)) + Dk(e(t)-e(t-1))
där e(t) är reglerfelet i nuvarande tidpunkt t d.v.s utsignalen(t) - insignalen(t)
Pk = Proportionella konstanten
Ik = Integreringskonstanten
Dk = Deriveringskonstanten
sum(et(t)) ger summan av alla tidigare insignaler d.v.s integralen
Hur man ska ställa in dessa konstanter och hur hur snabbt man ska sampla insignalen beror helt på vilket system man vill reglera
Ett sätt att få ett humm om konstantvärdena är att använda ziegler nichols metod:
http://www.chem.mtu.edu/~tbco/cm416/zn.html
I de PID-trådar som jag har följt i andra forum, verkar en vanlig missuppfattning vara att man *måste* köra floating point. Med lite analys av det faktiska fallet, så duger offta fixed point (vilket är mycket snabbare samt enklare att implementera i assembler) eller ibland t.o.m enkla "table lookups" för vissa värden...
Om det går att matematiskt beskriva det som ska regleras, kan du göra massa roliga grejer. Till exempel simulera hela systemet med olika sorters regulatorer och dödtider. Matlab och simulink använde vi i skolan för just sånt, för att sedan implementera PID i en pic och jämföra mot verkligheten. Vi styrde pumpen till en vattentank, vilket kanske inte var det mest sexuella men ganska intressant var det ändå.
Ja, vi använde också matlab för simuleringar. Dock gjorde jag aldrig pumpstyrningen som var en av alternativen av våra labbar.
Orsaken i till tråden var mest att kolla hur svårt det var att implementera det på en uc.
Vill tacka alla för alla länkar och ideer, Tack.
I mitt nästa projekt kommer nog PI(D) regleringa att testas.
EDIT: skönt att höra att det kan implementeras utan floating point.
Orsaken i till tråden var mest att kolla hur svårt det var att implementera det på en uc.
Vill tacka alla för alla länkar och ideer, Tack.
I mitt nästa projekt kommer nog PI(D) regleringa att testas.
EDIT: skönt att höra att det kan implementeras utan floating point.
- MicaelKarlsson
- Inlägg: 4669
- Blev medlem: 18 juni 2004, 09:16:07
- Ort: Aneby
- Kontakt: