Skocz do zawartości

Biblioteka arm_math.h do obsługi PID


MDDW

Pomocna odpowiedź

Cześć,

mam pytanie o regulator PID z biblioteki dla procesorów ARM: arm_math.h.

W bibliotece tej są 3 funkcje do obsługi regulatora:

- arm_pid_f32(),

- arm_pid_q31(),

- arm_pid_q15().

1. W jakich przypadkach powinno  się używać której wersji?

2. Której wersji najlepiej użyć w przypadku potrzeby regulacji prądu generowanego przez PWM? Prąd jest regulowany poprzez ustawianie odpowiedniego wypełnienia sygnału PWM.

 

Link do komentarza
Share on other sites

arm_pid_f32() używa zmiennych zmiennoprzecinkowych (floating point) typu float, natomiast arm_pid_q31() i arm_pid_q15() używają zmiennych stałoprzecinkowych (fixed point) pod którymi tak faktycznie kryją się typy integer.

obraz.thumb.png.8f162862dc941a30afcd679b2df5aa87.png

W kwestii kiedy czego używać (moja opinia/podejście): jeśli Twój procek ma wbudowane FPU lub nie zależy Tobie na szybkim wykonywaniu obliczeń to śmiało używaj arytmetyki bazującej na typach zmiennoprzecinkowych. Jeśli natomiast zależy Tobie na czasie wykonywania operacji, nie masz FPU w procku (bo jest to na przykład ARM Cortex-M0/M0+) to przyjrzyj się arytmetyce stałoprzecinkowej i skorzystaj z niej. Z doświadczenia w pracy mogę powiedzieć, że fixed point jest równie dobry jak floating point.

Odpowiadając jeszcze na drugi punkt, pod kątem jakości/dokładności nie ma to większego znaczenia, u mnie w pracy poprzez algorytm FOC sterujemy silnikami bezszczotkowymi wykorzystując oba typy przy czym zmiennoprzecinkowe na prockach z jednostką FPU (Cortex-M4/M7), a stałoprzecinkowe na prockach bez FPU (Cortex-M0/M0+/M3).

  • Pomogłeś! 2
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...