[elektro] Nagy keverőmotor szabályzasa egyszerűen..
Móczik Gábor
pm_levlista at progzmaster.hu
Wed Sep 10 12:58:15 CEST 2014
2014.09.10. 12:08 keltezéssel, elight at gmail.hu írta:
> Maga a folyamat elég lassú, nincsenek rángatások egységugrásjelek.
> Csak a lágyindítást és a leállást kell még majd megoldanom.
> Ha lehet , szívesen megúsznám a PID-et.
> ( ugye ,ugye, kellett kimaradni azokról az órákról ! : )
Szerintem ne úszd meg, azzal ugyanis simán megoldható, és kb. 3 sor.
hibajel = mért_fordulatszám - kívánt_fordulatszám
hiba_integral = hiba_integral + hibajel
vezerlo_jel = P * hibajel + I * hiba_integral
D tag nem kell, mert azt mondtad lassú a folyamat.
Ezt lefuttatod mondjuk minden A/D ciklusban, esetleg ritkábban, de
lehetőleg egyforma időközönként.
A P tagot úgy állítsd be, hogy I=0 mellett is nagyjából eltalálja a
célértéket. Az I tagot úgy, hogy ne kompenzáljon túl gyorsan, ne szökjön
túl magasra a szorzat, amit a rendszer mechanikailag nem tud.
Ha lassú a folyamat, célszerű lassan futtatni a számítást is, hogy ne 32
biten kelljen számolni...
Az integrál (hiba vagy beállítás hiba) miatti elszabadulását (integral
windup) célszerű megakadályozni, úgy, hogy a második sor után beiktatsz
egy alsó/felső korlátot.
if (hiba_integral > i_max) hiba_integral = i_max
if (hiba_integral < -i_max) hiba_integral = -i_max
Célszerű valami timeout-ot betenni, hogy ha az integrál tartósan a
határértéken áll X ideje (ami azt jelenti, hogy a rendszer nem érte el a
célértéket), akkor jelezzen hibát.
More information about the Elektro
mailing list