logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Regulator ładowania na ATmega8 - Bascom i sterowanie Timer-em

2_volt 05 Sty 2014 12:53 2304 5
REKLAMA
  • #1 13139535
    2_volt
    Poziom 13  
    Witam wszystkich znawców tematu oraz zainteresowanych.
    Ze jestem w sumie początkujący jeżeli chodzi o mikrokontrolery to prosze o nutę wyrozumiałości.
    Tworzę regulator ładowania akumulatorów z paneli fotowoltaicznych oraz w niedalekiej przyszlości innych źródeł... To w sumie już nie istotne jakiekolwiek bedzie to źródło ale tak czy siak spotykamy się z problemem że napięcie rośnie i po naładowaniu baterii musi zostać odłączone a nadwyżka przekierowana na inny odbiornik np. typu grzałka. Zrobiłem już część programu w Bascomie a całość oparta jest na układzie Atmega8 i wyświetlaczu 16*4. Narazie mam jedynie pomiar napięcia, prądu i mocy. Teraz przyszła kolej na regulację prądu ładowania albo raczej zapobiegnięciu przeładowania baterii... Chciałbym to zrobić w następujący sposób: Mój akumulator jest 12V, napięcie ładowania nie powinno wieć przekroczyć ok. 14,4V. Prąd jest tak dobrany że nie uszkodzi aku i tym na razie się nie przejmujemy.. W początkowej fazie ładowania napięcie jest znacznie niższe od 14,4 ale wraz z postępem ładowania napięcie bedzie się zwiększać i kiedy osiągnie ustalony próg chciałem załączyć grzałkę wody ale stopniowo i proporcjonalnie do nadwyżki mocy. W tym celu uruchomiłem TIMER1 w trybie Pwm który steruje Mosfet-em włączającym grzałkę.(testowo żarówke) Wszystko by fajnie działalo gdyby nie jeden problem... uruchomiony Timer cały czas zwiększa swoją wartość a po zliczeniu do max- wartości zaczyna znowu od początku, efektem tego mam migającą żarówkę i chwilowy brak obciążenia. Próbowłalem różnych kombinacji większych i mniejszych. Zatrzymywanie timera przy maksymalnej wartosci lub minimalnej oraz coraz bardziej zagmatwanych warunków ale ciągle nie działa to właściwie.
    Napiecie pobieram z przetwornika ADC i ma ono postac liczbową zawierającą sie w przedziale 0-1024 (jeżeli źle pamiętam to przepraszam, początkowy jestem :)
    Wiem że dla 14,4 wartość ta wynosi 470 i wtym momencie startuje timer który zwiększa swoją wartość o 51 jeżeli napięcie ciągle jest większe lub zmniejsza o 51 jeżeli wartosc ADC maleje, a po przekroczeniu 470 timer zostaje wyłączony.
    Ten program działa prawie dobrze ale wiem że jest zrobiony fatalnie i na około a dotego niestała wartosci Timera powodują że program się zawiesza...


    If Pwm1a = 255 And Pomiar_ac >= 470 Then
    Stop Timer1
    End If

    If Pwm1a < 238 And Pomiar_ac >= 470 Then

    Start Timer1

    End If

    If Pwm1a < 238 And Pomiar_ac >= 470 Then
    Pwm1a = Pwm1a + 17
    End If

    If Pwm1a > 6 And Pomiar_ac < 469 Then
    Pwm1a = Pwm1a - 17
    End If
    If Pwm1a <= 5 And Pomiar_ac < 469 Then
    Stop Timer1
    End If

    Wcześniej wyglądało to tak..

    If Pomiar_ac > 470 then
    Pwm1a = Pwm1a +51
    end if

    if Pomiar_ac =< 470 then
    Pwm1a = Pwm1a - 51
    end if


    Teraz moje pytanie.. Jak to właściwie napisać w Bascomie aby program byl poprawnie wykonywany, może ma ktoś inny pomysł na zrealizowanie płynnej regulacji napięcia?
  • REKLAMA
  • #2 13140423
    Mateusz@
    Poziom 18  
    Kolego chyba za bardzo kombinujesz. Wystarczy coś takiego:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 13144425
    2_volt
    Poziom 13  
    Kolego działa prawie że idealnie :) Wiedziałem że da się to w prosty sposób zrealizować, musiłałem tylko zmienić w 2 miejscach znak wielkosci bo działało na odwrót.

    If Pomiar_ac < 470 And Pwm1a > 0 Then Decr Pwm1a
    If Pomiar_ac > 470 And Pwm1a < 255 Then Incr Pwm1a

    A mówie że prawie idealnie bo zwiekszanie wartosci pwm o 1 trwa troche wolno i ma słabą reakcje na skok napięcia.. moge zwiekszyc czestotliwosc pomiarow ale wtedy wyniki mi migotają na wyswietlaczu, nie chcial bym odwiezac czesciej jak 300-500ms
  • REKLAMA
  • #4 13147614
    Mateusz@
    Poziom 18  
    Kolego zapodaj cały kod. Rozumiem że używasz symulatora do sprawdzania kodu.
    jak za wolno zwiększa to wstaw zamiast
    Kod: text
    Zaloguj się, aby zobaczyć kod


    np tak

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ale to nie tędy droga. Zrób tak że pomiar napięcia i zmiana wartości PWM przebiegała bardzo często a wyświetlacz odświeżał się np co 500ms.
  • REKLAMA
  • #5 13161396
    SylwekK
    Poziom 32  
    Ja to rozwiązałem w moim balancerze 2x12V (który właśnie testuje przy panelach) w nieco inny sposób. Zrobiłem sobie dwa programowe kanały PWM odpowiadające szerokości 0,5V czyli przypisują wartości od 0 do 13, bo 13x 0,0389=0,5V (0,0389V wynika z dzielnika napięcia) i tylko na tych wartościach operuję - 0 to maksymalna moc, a 13 to pwm wyłączone. W odpowiednim momencie kiedy badam napięcie, zostaje stopniowo aktualizowane pwm przez czas zanim napięcie zmieni się o te 0,5V i płynnie dołącza mi obciążenie. Rozwiązanie proste i skuteczne. Myślę, że w miarę zrozumiale opisałem ideę.
    Pozdrawiam
  • #6 13739544
    2_volt
    Poziom 13  
    Sposób Mateusz@ sprawdził się w 100% i działa do dnia dzisiejszego. Dzięki i temat zamykam
REKLAMA