Witam. Próbuje okiełznać regulator PID ze strony atmela AVR221:
http://www.atmel.com/Images/doc2558.pdfTesty przeprowadzam obecne na żarówce żeby łatwiej było określić czy działa ten regulator.
Niestety mam problem z wartościami inputValue. Wyświetlam sobie wartość temperatury z czujnika, zwartość zadaną oraz właśnie wartość inputValue.
Na początku po włączeniu zasilania układu gdy wartość nastawy równa się 0 to inputValue (żarówka jest wyłączona) pokazuje się -30 ( i co ciekawe gdy podgrzewam czujnik wartość inputValue taka sama jak wartość temperatury w Celsjuszach tylko że ze znakiem "-").
I teraz jest dziwna zależność, gdy ustawie wartość zadaną powyżej 30 stopni to wartość inputValue skacze do 255 i nic się nie zmienia wraz ze wzrostem temperatury. A co ciekawe powyżej nastawy 110 stopni wartość InputValue zaczyna maleć (żarówka świeci słabiej) i przy nastawie 175 stopni InputValue przeskakuje na -255 :/ . Przy nastawie 185 stopni żarówka miga na przemian pełną mocą, a przy 190 wartość InputValue powoli spada a następnie rośnie.
W czym jest problem źle podaje wartości zwracane przez funkcje
Get_Reference i
Get_Measurement ???
Nie mam już pomysłu w czym może być problem poza tym InputValue jest typu int16_t więc powinna się zmieniać w zakresie -32768 do +32767 a zmienia się od -255 do 255
Czujnik temperatury w moim przypadku mierzy od 30 stopni w górę więc ograniczyłem wartość zwracaną przez funkcję
Get_Reference w taki sposób:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Natomiast funkcja
Get_Measurement zwraca temperaturę w stopniach Celsjusza.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Funkcja
Set_Input sterująca triakiem przeskalowuje wartości z
inputValue na zakres od
0 do 200 wygląda następująco:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Cały kod main.c:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.