[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