Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 18 lut 2026, o 13:20


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 
Autor Wiadomość
PostNapisane: 12 kwi 2015, o 12:59 
Offline
Użytkownik

Dołączył(a): 20 lut 2013
Posty: 166
Pomógł: 0

Witam. Próbuje okiełznać regulator PID ze strony atmela AVR221:
http://www.atmel.com/Images/doc2558.pdf


Testy 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 ??? :cry:


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:

Składnia: [ Pobierz ] [ Ukryj ]
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.

Składnia: [ Pobierz ] [ Ukryj ]
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:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.




Cały kod main.c:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 kwi 2015, o 16:01 
Offline
Użytkownik

Dołączył(a): 20 lut 2013
Posty: 166
Pomógł: 0

Jeden błąd znalazłem. Mianowicie Get_Measurement powinna zwracać wartość ADC_czujnik. Ale to dużo nie zmienia. Nadal wygląda na to że problem jest w tej konwersji Set_Input :/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 2 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO