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



Teraz jest 29 mar 2026, o 12:27


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 14 gru 2013, o 17:35 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

Witam,
Piszę do was bo mam całkiem poważny problem, a mianowicie- jestem świeżo po wykonaniu swojej pierwszej płytki PCB, teraz przyszła pora na napisanie pod nią oprogramowania. I tak jak z poprzednim zadaniem jakoś sobie poradziłam, tak teraz zaczynają się "schody", ponieważ dopiero zapoznaje się z językiem C :(
Mój projekt zakłada sterowanie grzałką polimeryzatora, a mianowicie coś podobnego do tego [1]. Ponieważ jest to projekt, w którego założeniu było korzystanie z prądu stałego do 12V, więc sterowanie grzałką (12W) ma odbywać się za pomocą tranzystora (schemat zamieszczam poniżej).
Temperatura sczytywana jest przez przetwornik MCP9700 podłączony pod pin z ADC (korzysta on z wzoru VOUT= TC* TA +V0°C, gdzie V0C = 0,51V). Pojawiła mi się pewna wątpliwość czy warto stosować PWM do sterowania tranzystorem, czy może obejdzie się bez tego (temperatura grzałki zależy od napięcia, czy napięcie wpływa tylko na czas nagrzewania się grzałki do ustalonej temperatury)?

Algorytmicznie program przedstawia się tak:
jeśli odczyt z ADC <= 1,13 V bramka jest otwarta (przez grzałke płynie prąd). Gdy ADC (1130;1150> grzałka utrzymuje stałą temperature (zamykanie i otwieranie tranzystora- kwestia jak uzależnić częstotliwość cyklu w zależności od ADC) przez 1min (delay?)-> po upływie tranzystor zamknięty (prąd płynie przez grzałke) aż do ADC = 1430-> jeśli ADC=(1430;1450) tranzystor otwiera się i zamyka przez 1min utrzymując stałą temperature.

Z ustawieniem rejestrów sobie poradze, czytałam, że na grzałce nie może zmieniać się stan ze zbyt dużą częstotliwością, (dlatego preskaler winien być jak największy w przypadku PWM?). Największym problemem jest uzależnienie działania tranzystora od odczytu ADC, nie wiem czy to jest zadanie dla przerwań, czy wystarczą pętle warunkowe?)

Tutaj wklejam o co mi mniej więcej chodzi, i to co wydaje mi sie ze wiem to wpisałam
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Pozdrawiam i licze na porady :)
(1) https://lh5.googleusercontent.com/-u236TEbp3rs/UfeBTBn1p7I/AAAAAAAAHf4/MxHRtPMQEbc/s483/Przebieg%2520temp..jpg?gl=PL
(2)Obrazek


Kody umieszczamy przy pomocy syntax=c - Różowy J.
Dziwny sposób pisania postu
;-)



Ostatnio edytowano 14 gru 2013, o 17:59 przez karina12V, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 17:58 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

Ah, zapomniałam napisać że początkowo tranzystor był podłączony pod porty z ADC, jednak w odpowiednim czasie zreflektowałam się i ścieżkę poprowadziłam pod pin PD5 w razie gdybym jednak miała korzystać z PWM.
Tak, oczywiście, porównanie logiczne to ==, właśnie dlatego tak ciężko mi się połapać w tym języku.

Ed: aa, w kodzie napisałam PC5, oczywiście chodzi o PD5
Ed2: czyli sterowanie tranzystorem aby zamykał się i otwierał w okresie 1minuty lepiej rozwiązać z wykorzystaniem wewnętrznego timera? Można ten timer tak zaprogramować aby był niejako "aktywny" przez minutę (tylko przy temperaturze w okolicach 62 (wartość napięcia na ADC ~1130mV), a potem wyłączał się aż do osiągnięcia temperatury szczytowej i przez kolejną minutę był utrzymywał te temperature (wartość napięcia na ADC ~1430)?
Książki pana Kardasia jeszcze niestety nie posiadam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 gru 2013, o 19:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

karina12V napisał(a):
czytałam, że na grzałce nie może zmieniać się stan ze zbyt dużą częstotliwością,


...a niby co by jej się stało :) ? Chodzi po prostu o to, że grzałka ma dużą bezwładność cieplną i szybkie zmiany nie będą zauważalne. W Twoim przypadku wypadało by moc grzałki uzależnić w ten sposób od ADC, że w miarę zbliżania się do temperatury nastawionej podawana by była coraz mniejsza moc czyli w tym wypadku zmniejszające się wypełnienie PWM. Częstotliwość PWM może być tu nawet rzędu pojedynczych herców (oczywiście w granicach rozsądku). Takie sterowanie pozwoliło by stabilizować temperaturę praktycznie bez jej przekraczania. Podobne sterowanie stosuje się przy kotłach CO i dmuchawach - czym bliżej zadanej temperatury tym dmuchawa słabiej dmucha w efekcie czego płomień słabnie i przyrost temperatury spowalnia.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 00:15 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Grzałką najlepiej sterować przez PWM Driver i Mosfeta. Zrobiłem taki projekt do solarów, że PWM jest tak dobrane, że próbuje utrzymać zadane napięcie. Zmiana na temperaturę nie będzie kłopotliwwa - a dodatkowo dodać warunki wyhamowywujące PWM po zbliżeniu się do zadanej temperatury też nie będzie problemem a i ciekawy efekt przyniesie. Częstotliwością się nie przejmuj. Dobry szybki driver TC4220 lub TC429 oraz Mosfet mogą pracować przy kilkudziesięciu kHz - a może i nawet szybciej. U mnie układ pracuje na 2,5kHz i Mosfet mimo 30A nie grzeje się bardzo.
Na grzałce będzie się przy większych mocach indukowało wyższe napięcie niż 12V. Dlatego pomyśl o diodzie Schottkiego zabezpieczającej lub o Mosfecie na wyższe napięcie lub jedno i drugie.

Wysłane z mojego KM1060G przy użyciu Tapatalka



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 01:11 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

Dziękuje za wszelką pomoc, jednak chodzi o to, że program piszę już konkretnie pod daną płytkę i nie mam możliwości zmiany sprzętowej, lub byłaby ona zbyt praco i czasochłonna.
A więc z chęcią podejme się próby okiełznania tej nieznanej mi jeszcze bestii jaką jest PWM, z tym że moglibyście mi napisać tak przykładowo w języku programowym co macie konkretnie na myśli, aby tak posterować PWM aby "zwalniał" zbliżając się do zadanej temperatury? :)
Czy chodzi o to aby wartość na OCR1A zmniejszała się wraz ze zbliżaniem się do tych 62 stopni?
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

//stosować opóźnienia? Chodzi o to, że nie mogę przewidzieć nawet w przybliżeniu jak szybko grzałka nagrzeje się do tej temperatury, więc stosowanie opóźnień z ustaloną wartością wydaje mi się nielogiczne, z drugiej strony jak sprawić, żeby OCR1A się nie wyzerował zbyt szybko?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 09:51 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Najprościej to można zrobić w ten sposób, że określamy np 3 prędkości zbliżania się i dajemy 3 ify
czyli
1. jeżeli temperatura odczytana jest mniejsza od temperatury zadanej o 20 to zwieksz rejestr wypełnienia o 3
2. Jeśli jest mniejsza o 10oC to zwieksz wypelnienie o 2
3. Jesli jest mniejsza o 5oC to zwieksz wypelnienie o 1

no i czwarty warunek zabezpieczajacy
else
zmniejsz wypełnienie

Nie pisze tego kodem, ale jest to tak proste że nie powinieneś mieć z tym żadnego problemu. Jeśli jednak nie będziesz tego mógł zapisać to pomogę - tylko napisz.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 12:31 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

1)Czy chodziło Ci o coś takiego (przedstawiam cały program, głównie pytam o pętle while)?
2)Czy dobrze mi się wydaje, że zmniejszając wypełnienie początkowe w rejestrze porównań OCR1A zmniejszam wypełnienie impulsem -> spada szybkość, czy właśnie przy zwiększaniu wartości na OCR1A (miałam jakiś program z diodą i najmocniej świeciła przy 255)?
3) Czy rozwiązanie z ustawieniem niskiego sygnału na pinie z tranzystorem przy temperaturze pożądanej+ zapewni utrzymanie tej temperatury (->temperatura spada-> z warunku napięcie na przetworniku ADC też spada -> warunek gdy napięcie jest niższe -> prąd na grzałkę->...)?
4) Jak uzyskać aby pętla warunkowa1 była aktywna przez zadany czas, a następnie po wygrzaniu w T1. ponownie grzałka zaczęła grzać do zadanej T2? (T2>T1)

Mikroprocesor ma działać i sterować temperaturą programowo od razu po naciśnięciu przycisku uruchamiającego (oczywiście przy podanym napięciu przez zasilacz), nie mam żadnego potencjometru.

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



Ostatnio edytowano 15 gru 2013, o 13:51 przez karina12V, łącznie edytowano 3 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 13:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 kwi 2013
Posty: 38
Lokalizacja: Warszawa
Pomógł: 0

To co potrzebujesz to regulator PID. Z tym że nie mając pojęcia o programowaniu nie zrobisz go.

Najprościej to można zrobić tak :

T -zadana tamperatura
t - temperatura aktualna
e- róznica między T i t ; e=T-t inaczej błąd

Na podstawie wielkości e regulujesz współczynnik wypełnienia w PWM.
Najprosciej zależność między e i PWM możesz zrobić liniowo ale to na pewno nie będzie optymalne rozwiązanie.

PWM [%] = (T-t/T)

Dodatkowo trzeba pamiętać żeby zrobić histerezę temperatury bo inaczej bardzo blisko temperatury zadanej układ moze się włączać i wyłączać naprzemiennie.

_________________
auto gaz, serwis instalacji LPG, Instalacje LPG



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 13:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

Witam
Spróbuj formatować kod (te takie wcięcia i spacje) :)

bo chyba o ile dobrze rozszyfrowałem to program Ci się zapętli w
liniach 20 do 25 i nie pójdzie dalej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 13:48 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

afrikanerhart napisał(a):
PWM [%] = (T-t/T)

Dodatkowo trzeba pamiętać żeby zrobić histerezę temperatury bo inaczej bardzo blisko temperatury zadanej układ moze się włączać i wyłączać naprzemiennie.


Myślałam właśnie, że przy zadanej temperaturze układ będzie się włączać i wyłączać naprzemiennie aby temperatura była utrzymana, w tym celu też ustawiłam zakres w okolicach 62 +/- 2 stopnie (grzałka nie musi działać superprecyzyjnie), źle myślę?

A pomijając kwestię szybkości PWM, to możecie mi podpowiedzieć jak utrzymać temperaturę przez zadany czas (i nie są to czasy w milisekundach) a następnie, żeby znowu ruszyło? Timery, przerwania, opóźnienia?

Zaba napisał(a):
Witam
Spróbuj formatować kod (te takie wcięcia i spacje) :)

bo chyba o ile dobrze rozszyfrowałem to program Ci się zapętli w
liniach 20 do 25 i nie pójdzie dalej.


Teraz będzie dobrze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 14:20 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 10 mar 2013
Posty: 739
Lokalizacja: Poznań
Pomógł: 84

A więc tak to co ja jako początkujący mogę doradzić to
program zatrzyma Ci się w liniach 20-24
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

nigdy się nie skończy (chyba że wyłączysz zasilanie :) )

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


Deklaracje funkcji umieść gdzieś przed main
a wywołuj ją cyklicznie w głównej pętli np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


i jeszcze jedno nie możesz mieć dwóch funkcji main ()
w jednym programie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 14:33 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

Dwie funkcje main, to przez to że przekopiowałam do atmel studio, a tam była już gotowa funkcja główna której nie zauważyłam. Wielkie dzięki, wykorzystam to co mi pomogłeś i czekam na więcej odpowiedzi na pytania z poprzednich postów :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 17:16 
Offline
Użytkownik

Dołączył(a): 24 sty 2012
Posty: 1469
Pomógł: 56

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

brakuje Ci typu zmiennej

_________________
Jestem początkujący i moje porady mogą być błędne



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 gru 2013, o 17:39 
Offline
Użytkownik

Dołączył(a): 05 lis 2013
Posty: 353
Lokalizacja: Kraków
Pomógł: 6

Jeszcze jedno. Tak mi się wydaje, że jeżeli będziesz wykorzystywać sprzętowy przetwornik ADC 10bit to res_ADC będzie się zmieniać w zakresie od 0 do 1023. Wtedy odpowiednio pozmniejszaj te zakresy, bo przy 1023 będzie maksimum zakresu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2014, o 13:01 
Offline
Nowy

Dołączył(a): 14 gru 2013
Posty: 11
Pomógł: 0

Edycja, zmodyfikowałam i teraz wydaje mi się że będzie dobrze, co myślicie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Chodzi mi głównie o pętle while. Dodatkowo zaczęłam się zastanawiać, czy grzałka będzie grzała jak na bramkę tranzystora dam 5V czy włąsnie jak będzie 0V (schemat był w 1 poscie)?



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: 15 ] 

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