Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sterownik pralki na Atmega8, maly problem...

darrrrek 24 Aug 2007 22:40 2846 6
  • #1
    darrrrek
    Level 22  
    Witam !

    Wykonalem niedawno sterownik pralki Amica, na atmega8. Wszystko super dziala z jednym szczegołem. Aktualnie regulacja predkosci silnika zrobiona jest na zasadzie włączania triaka z odpowiednim opóźnieniem względem zera sieci. To sie niestety nie sprawdza bo zaleznie od obciązenia bębna silnik ma różne obroty, i teraz pozostaje sprawdzanie napięcia na małej prądniczce znajdującej sie w silniku (tzn. prądniczka tachometryczna)i wzgledem tego podawanie napiecia na silnik. Zmierzylem napięcie przy obrotach odpowiednich dla prania, wynosi ono 1.3V prądu zmiennego. Po zastosowaniu odpowiedniego ukladu, podaje to napiecie na wejscie ADC Atmegi. Mam problem z wymysleniem programu na jakiej zasadzie odbywala by sie regulacja predkosci, aby silnikiem nie szarpalo i bylo to niezawodne. Silnik podczas startu potrzebuje wieksze napiecie, a gdy juz sie rozkreci mozna je zmniejszyc, tylko jak programowo to wykonac ?? Przedstawiam kod jaki wymyslilem:




    Code:
    $regfile = "m48def.dat"
    
    $crystal = 1000000
    $baud = 4800

    Dim Predkosc As Word
    Dim Predkoscaktualna As Word


    Config Pinb.5 = Output : Portb.5 = 1                        'OK
    Silnik Alias Portb.2


    Config Adc = Single , Prescaler = Auto , Reference = Internal
    Config Timer1 = Timer , Prescale = 1                        'Timer odpowiadajacy za opóźnienie triaka, 16bitowy
    Config Timer0 = Timer , Prescale = 8                        'Timer odpowiadajacy za sprawdzanie predkosci, 8 bitowy

    On Timer1 Czas
    On Timer0 Sprv
    Enable Timer1
    Enable Timer0

    Config Int0 = Falling                                       'reakcja na zbocze opadajace
    On Int0 Zero                                                'Procedura uruchamiajaca sie gdy siec przechodzi przez 0
    Enable Int0
    Enable Interrupts



    Predkosc = 59700                                            'Ustawianie opuźnienia triaka

    Timer1 = Predkosc
    Timer0 = 125                                                'Procedura sprawdzania predkosci co okolo 1 ms

    Start Adc
    Start Timer0
    Stop Timer1


    Do


    Loop
    End

    Sprv:
    Predkoscaktualna = Getadc(1)

    If Predkoscaktualna < 260 Then                              '260 dla 1.3V
    Incr Predkosc
    Else
    Decr Predkosc
    End If
    Return

    Czas:
    Stop Timer1
    Silnik = 0                                                  'wlaczenie triaka
    Waitus 100
    Silnik = 1                                                  'wylaczenie triaka
    Return

    Zero:
    Timer1 = Predkosc
    Start Timer1
    Return


    Bede wdzieczny za wszelkie sugestie, nigdy czegos takiego nie robilem, nie mam pojecia jak to rozwiazac.

    Pozdrawiam !
  • #2
    aster11
    Level 19  
    Dotykasz tu dość rozległej i nie banalnej dziedziny teorii sterowania (dokładniej regulacji). Nie wiem, czy miałeś z tym do czynienia, klasyka to regulatory PID - możesz sobie zerknąć coś na google. Wybielona teoria może nie mieć jednak tu za bardzo zastosowania, bo obiekt sterowania jest dość złożony. Teoretycznie powinna zdać egzamin prymitywna regulacja prędkości typu proporcjonalnego (regulator P), ale zapewne dostaniesz wtedy niepożądane "uderzenia" przy załączaniu.
    Można próbować filtrować, lub tablicowo profilować w czasie wartość zadanej prędkości, ale może to być przewaga formy nad treścią i trudno powiedzieć, czy się w ogóle powiedzie.

    Może dobrym i prostym rozwiązaniem (w oderwaniu od teoretycznych analiz) byłoby eksperymentalne opracowanie tablicowej zależności poziomu wysterowania triaka w funkcji prędkości silnika (różne profile dla różnych prędkości finalnych) - wtedy mógłbyś sobie ustawić to w miarę do woli, bez szarpnięć, itp.

    To tylko takie rozważania, nie mam w tym doświadczenia praktycznego. Może inni zaproponują coś konkretniejszego:)
  • #3
    Ch.M.
    Level 27  
    Witaj
    Nie potrzebny Ci pomiar napięcia prądnicy (tzn tak tez mozna, ale musiałbys zrobic tabele funkcji napięcia od obrotów) wystarczy, ze na prądnicy mierzysz częstotliwość okresów i będzie ona liniowo proporcjonalna do obrotów. A swoją droga ciekawi mnie sposób sterownaia pralki, czy silnik obraca sie w jedna, czy w dwie strony, z jaka predkoscia i jak wygladaja poszczególne programy prania (wirowanie, napełnianie, opróznianie, grzanie)
    Pozdrawiam


    EDIT:
    Widze ze program pewnie przepisany na żywca (Deklaracja procka nie zgadza sie z opisem) postaraj sie napisac samemu od początku, albo przynajmniej dogłebnie przeanalizować kod który zamieściłes
  • #4
    darrrrek
    Level 22  
    Program napisalem sam bo w programatorze uzywam Atmege48, ktora jest praktycznie identyczna wzgledem atmegi8 :) nie mam zwyczaju podpisywac sie pod czyims kodem :)

    Dodano po 5 [godziny] 22 [minuty]:

    Ch.M. wrote:
    A swoją droga ciekawi mnie sposób sterownaia pralki, czy silnik obraca sie w jedna, czy w dwie strony, z jaka predkoscia i jak wygladaja poszczególne programy prania (wirowanie, napełnianie, opróznianie, grzanie)


    W pralce są programy:

    30 stopni
    40 stopni
    60 stopni
    95 stopni (gotowanie)
    Przycisk funkcyjny odpompowywania oraz wirowania

    Do pralki nalewana jest woda, do momentu zwarcia styków na czujniku cisnienia, jezeli ubrania nasiąkną wodą automatycznie woda jest dolewana az poziom bedzie odpowiedni (wedlug czujnika cisnienia).
    Nastepne woda jest grzana do temp wskazanej przez program, w tym czasie pralka robi 2 broty co okolo 20 sekund w celu mieszania wody. Po nagrzaniu przechodzi juz do prania wlasciwego. Obroty dobrane eksperymentalnie, 10 sekund lewa strona, przerwa 4 sekundy, 10 sekund prawa strona, przerwa 4 sekundy. Po zakonczeniu prania przechodzi w plukanie (2x) , nastepnie wirowanie, tutaj obroty juz podaje maxymalne ze stopniowym rozpędzaniem bębna, pozwala to na rownomierne rozlozenie ubran i nie ma zadnego skakania pralki. Koszt sterownika praktycznie wyniusl 5 zl (atmega48) + czas jaki zajelo mi stworzenie programu i elektroniki, reszte elementow juz posiadalem. Ustawianie programu i inne przyciski funkcyjne są oryginalne na obudowie.
  • #5
    Fajfer2
    Level 20  
    Jak zrobi regulator P to może wystarczyć - bo odpowiednio małe k
    spowoduje że nie będzie trwałych oscylacji.
    czyli :
    e = obroty_zadane - obroty_odczytane;
    wyjscie = kp * e;
    ewentualnie dodać człon I :
    calkax = calkax + e;
    calka = calkax / ilosc_probek_na_sek;
    wyjscie = kp * ( e + ((1/Tc) * calka));
    może trzeba by dodać "antiwindup" :
    if(wyjscie > max){calka = ....}
    może dodać człon D :
    delta = e - delta;
    rozniczka = delta * ilosc_probek_na_sek;
    wyjscie = kp * ( e + ((1/Tc) * calka) + (Td * rozniczka) );
    To tylko teoretyczne rozważania - nie robiłem reg. PID
    (ale się przymierzam)
    tak myślę
    Swoją drogą : chętnie bym podyskutował na temat implementacji
    algorytmu PID,bo sam nad tym myślę.
  • #6
    robiw
    Level 26  
    darrrrek wrote:
    Witam !
    ... (tzn. prądniczka tachometryczna)...


    Ta prądniczka tachometryczna, jak ją nazywasz, służy oryginalnemu sterownikowi do odpowiedniego "rozłożenia" ubrań w bębnie aby bęben zbyt nie "skakał" - poprostu bada impulsy w niej generowane i przy zbyt dużych różnicach częstotliwości zwalnia obroty, trochę buja bębnem, znowu przyspiesza, bada itd aż do uzyskania dobrego rozłożenia prania w bębnie... tak przynajmniej jest w Aristonach, Indesitach i paru innych... poza tym temat dobrania poszczególnych faz prania, parametrów itd jest bardzo skomplikowaną i chronioną przez firmy sprawą - w warunkach domowych, z amatorską wiedzą, możesz zrobić namiastkę sterownika (tzn. jeśli chodzi o jakość prania itd). Pozdrawiam... robiw
  • #7
    Ch.M.
    Level 27  
    Podziele sie swoimi spostrzeżeniami w dziedzinie prania... ostatnio miałem problem ze stykami programatora więc musiałem sie przyjrzeć pralce bliżej... W mojej pralce jest troszkę więcej przycisków: redukcja obrotów, blokada odwirowania, blokada spuszczania wody po praniu, przełącznik poziomu wody, przełącznik funkcji oszczędzania (redukuje temperature do 60stC i wydłuża czas prania)
    Na bębnie ustawia sie pozatym cykle, nie jest ich znowu tak wiele, jakies 10 kombinacji może 12. Cykle sie powtarzają dodając nowe opcje np ustawienie na 9 powoduje odwirowanie, ustawienie na 8 powoduje cośtam a następ[nie przejscie do cyklu 9 itp. Z reguły pralka wykonuje 4 cykle prania odwirowywania itp... nie powiem dokładnie bo nie mam aż tyle cierpliwości do obserwacji w czasie 1,5h przy standardowym cyklu.

    Może nie napełniaj do końca bębna, bo to jest marnotrawstwo energii (pralka napełnia mniejwiecej równo z poziomem znajdującego się w niej prania) i wody, spróbuj napełniać do określonej objętości, np 1/3bębna czy ewentualnie otwieraj zawór na x sekund
    Pozdrawiam