Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega bascom - Atmega bascom pomiar prądu przy pwm

21 Lip 2016 18:57 4500 49
  • Poziom 23  
    Witam,
    Buduję ładowarkę do akumulatorów. Max prąd ładowania będzie 3A więc zastowałem acs 712-05 ale pojawił się problem. Wpiąłem w szereg z akumulatorem miernik i wskazania atmegi rożnią się od pomiarów miernikiem. Np jeżeli przy prądzie ładowania 500 mA wskazania się zgadzają to przy prądzie 3A atmega wskazuje mniej o 270mA.

    i jeszcze jedno pytanie.
    Przy ŁADOWANIU prądem 3A mosfet jest ledwo ciepły, ale jak rozładowuję akumulator to mosfet się gotuje - dlaczego ? przypuszczam że odpowiedź jest banalna ... ale nie mogę na nią wpaść.
  • Poziom 37  
    taaaak, a my mamy szklaną kule i wiemy jakim schematem mierzysz ten prąd.
  • Poziom 23  
    Tak to wygląda

    atmega bascom - Atmega bascom pomiar prądu przy pwm
  • Użytkownik usunął konto  
  • Poziom 23  
    wygląda to tak,

    Prąd ( miernik)___ ADC
    500mA__________ 19
    1000mA_________ 36
    1500mA_________ 53
    2000mA_________ 71
    2500mA_________ 88
    3000mA_________ 106
  • Użytkownik usunął konto  
  • Poziom 23  
    Właśnie o to chodzi że przy 3000mA mnożnik musi być 28,30188 a przy 500mA - 26,31578.
    Bez R19 ADC strasznie "lata" i nawet jak robię 250 pomiarów ADC i dopiero wtedy przeliczam to i tak jest "kupa". Jak R19 jest zamontowany to przy 100 pomiarach ADC wynik jest stabilny, ale mnożnik maleje i to nie liniowo.

    Jakiś pomysł ?
  • Poziom 43  
    Dlaczego wyniki ADC zaczynają się od 0 a nie od 512?
    Na moje oko coś tam nie łączy (pin wyjściowy ASC712-05 z rezystorem R18). Płynie jakiś prąd upływności więc jakieś wyniki są, ale mizerne.
    Prąd jest ograniczany więc wzrasta coraz wolniej przy zwiększaniu napięcia. Stąd nieliniowość.
    Zmierz napięcia multimetrem jednocześnie na pinie wyjściowym ASC712-05 (bezpośrednio na pinie, nie na końcówce rezystora R18) oraz za dzielnikiem.
    Zresztą jeżeli problemem jest upływność to odpowiedz da sam pomiar na pinie ASC712-05 i na końcówce rezystora R18.

    Albo problemem jest PWM. Bo w sumie nie napisałeś czy prąd regulujesz tym PWMem czy czymś innym. Jeżeli PWMem to nawet nie wiadomo czy przekładanie powoduje multimetr czy Twój układ.
    Przy pomiarze prądu PWM trzeba przede wszystkim ustalić czy się chce mierzyć prąd średni czy skuteczny. Trzeba też wiedzieć jaki prąd mierzy multimetr żeby móc porównywać pomiary.
  • Poziom 37  
    ziguś napisał:
    Właśnie o to chodzi że przy 3000mA mnożnik musi być 28,30188 a przy 500mA - 26,31578.
    Bez R19 ADC strasznie "lata" i nawet jak robię 250 pomiarów ADC i dopiero wtedy przeliczam to i tak jest "kupa". Jak R19 jest zamontowany to przy 100 pomiarach ADC wynik jest stabilny, ale mnożnik maleje i to nie liniowo.

    Jakiś pomysł ?


    Że to nie jest mnożnik? Że trafienie w pierwszą liczbę jest przypadkowe?
    że myślisz y = a*x, po dopasowaniu a zgadza się dla (x1,y1) ale już nie (x2,y2)
    a nalezy myśleć
    y = a*x+b

    Tu koledzy (@atom - popieram myśl) pośrednio mówią to samo, nie podoba się poziom zero (próg, offset, składowa stała, ma to różne nazwy).

    tabelka którą zamieszczasz z surowego ADC jest bardzo dobrze liniowa.
  • Poziom 23  
    Multimetr to Brymen BM837. Dodam że jak zamiast akumulatora podłączę żarówkę 12V/200W to wtedy prąd jest przekłamywany inaczej - im mniejszy prąd tym większy mnożnik jest potrzebny. Dla 500mA ADC=12 i mnożnik 41,6... ale dla 3A ADC=117 i mnożnik już 25,6...
    Przecież niby ACS712 odczytuje wartość prądu AC i DC...lecz tu przez PWM jest prostokąt z różnym wypełnieniem ... czyżby o to chodziło ?
    Jeżeli przez ACS nie płynie prąd ( multimetr wskazuje 0.000A ) to wtedy ADC ma wartość 512. W programie obliczam to tak :

    Suma = 0
    For Krok = 1 To 100
    I_0 = Getadc(5)
    Suma_i = Suma + I_0
    Reset Watchdog
    Next Krok
    Wynik = Suma_i / 100
    I = Wynik
    I_1 = I - 512
    I_2 = I_1 * Mnożnik_prądu
    I_3 = I_2 / 100000


    Spróbuję włączyć w szereg ze 3 ... 4 różne multimetry i zobaczę co będzie.

    Uprzedzę pytanie. Częstotliwość PWM to 122Hz

    $crystal = 16000000
    Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Up , Prescale = 64
  • Moderator Mikrokontrolery Projektowanie
    Jak rozumiem kluczujesz MOSFETa przebiegiem PWM, a pomiar dokonujesz na ACSie, w sposób niezsynchronizowany z kluczowaniem, mając nadzieję, że filtr RC wygładzi wyjście z ACSa? Problem jednak w tym, że wyjście z ACSa ma małą wydajność i w nocie gdzieśtam jest napisane, że maksymalne obciążenie wyjścia to 1 nF. Ja bym zrezygnował z tego filtra, który niczemu nie służy i zsynchronizował pomiar ADC z kluczowaniem tranzystora - np. robił pomiar tuż przed wyłączeniem tranzystora.
    Co do grzania podczas rozłatowywania aku - P=I^2*R, tak się składa, że w tym układzie RDS jest najwyższe, a więc na nim się wydzieli największa moc. Zauważ, że prąd rozładowania zapewne wynosi znacznie więcej niż 3A.
  • Poziom 23  
    tmf napisał:
    ... i zsynchronizował pomiar ADC z kluczowaniem tranzystora - np. robił pomiar tuż przed wyłączeniem tranzystora ...


    tmf a podpowiesz jak taki pomiar rozwiązać programowo ?
  • Poziom 43  
    Włączając przerwanie od Timera który robi PWM (czyli Timer1) i pomiar ADC robiąc w tym przerwaniu (w każdym razie wyzwalając go w tym przerwaniu). PWM trzeba ustawić w tryb Phase Correct. Wtedy pomiar będzie dokładnie w środku przebiegu (w niczym to nie przeszkadza, nie musi być na końcu).
  • Poziom 23  
    nie jestem za biegły w bascomie ... czy mogę prosić o jakiś konkretny przykład ?
  • Poziom 43  
    Nie musowo być biegłym w BASCOMie.
    Wystarczy znajomość jednaj komendy z BASCOMa:
    On Timer.
    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    A do skonfigurowania Timera w tryb PWM Phase Correct wystarczy wpisać odpowiednie wartości do rejestrów Timera (i nawet nie można tu w zastępstwie użyć polecenia BASCOMa, bo z tego co widzę nie pozwala on tak skonfigurować Timera za pomocą polecenia config, więc i tak musowo zrobić to ręcznie na rejestrach). Więc brak biegłości w BASCOMie nie będzie problemem.
    Tutaj masz przykład w C:
    http://www.robotyka.net.pl/mikrokontrolery-avr-czesc-7-tmier1/
    Chodzi o przykład 2, gdzie żeby przejść na tryb Phase Correct wystarczy wywalić ustawianie bitu WGM12.
    Wystarczy przepiać do BASCOMa.
    To do dzieła :D
  • Poziom 23  
    On Timer1 - tak myślałem ... ale ...
    W swoim programie już wykorzystuję On timer ale 0 - jako licznik czasu.

    Czy przed załączeniem PWM mam używać enable time1 i po wyłączeniu disable timer1

    Z tego co wyczytałem w necie to przy takiej konfiguracji pwm jak u mnie to standardowo jest ustawiany Phase Correct
  • Poziom 43  
    No jeżeli jest Phase Correct to ok.
    To wystarczy zadeklarować przerwanie za pomocą On Timer. A potem je obsługiwać odpowiednio.
  • Poziom 23  
    Czy przed załączeniem PWM mam używać enable time1 i po wyłączeniu disable timer1
  • Poziom 43  
    Enable Timer1 oczywiście też musi być.
    I globalne Enable Interrupts.
    Ale Disable Timer1 nie jest potrzebne.
  • Poziom 35  
    Żeby oszacować prąd jaki płynie w takim układzie potrzebny jest bocznik i oscyloskop dla miernika to zbyt trudne zadanie on nigdy nie pokaże takiego prądu prawidłowo z takiego bocznika i spadku na nim przy włączonym PWM policzysz prąd włączonego z proporcji pwm policzysz prąd średni jaki płynie w układzie . Jak to rozwiązać praktycznie załączyć pwm100% zmierzyć prąd jaki popłynie wyłączyć pwm przekalkulować jaki prąd jest potrzebny i ustawić pwm . Większość ładowarek posiada źródło stałoprądowe czyli układ ,który wymusza przepływ zadanego prądu a nastawa sterowana jest właśnie proporcją załączenia pwm =żądany prąd : prąd źródła . Miernik nie pokaże takiego prądu prawidłowo tu potrzebny jest oscyloskop i bocznik . Musisz jeszcze sprawdzić w jaki sposób ładuje się i rozładowuje akumulatory jakie chcesz na tym urządzeniu obsługiwać nie wszystkie ładuje i rozładowuje się tak samo poza tym ładowarki mają jeszcze układy zabezpieczeń i automatycznego wyłączenia po naładowaniu . Wiele firm proponuje gotowe kontrolery do ładowania a i samych ładowarek też jest bardzo dużo na rynku w cenach ,które sprowadzają amatorską budowę ładowarki do sensu zabawy edukacyjnej ;)
  • Moderator Mikrokontrolery Projektowanie
    @kamyczek A po co ci 100% wypełnienie do pomiaru? Mierzysz w momencie włączenia tranzystora, nie ma znaczenia czy masz wypełnienie 1%, czy 100%. Pomijając zmiany prądu w chwili włączenia tranzystora, potem prąd powinien być stabilny. Jedyne więc co jest potrzebne to synchroniczne z PWM samplowanie ADC.
  • Poziom 23  
    Kamyczek w tym kraju się już nikomu nic nie opłaca :D Wiem że można kupić gotowe, ale ...
    Po pierwsze, primo - wypełniam sobie wolne chwile
    Po drugie, primo - mogę poćwiczyć programowanie i ile się przy tym nauczę to moje
    Po trzecie, primo - satysfakcja że zrobiło się to praktycznie samemu ( z drobną pomocą kolegów z elektrody ) jest bezcenna
    ... i jak jestem w warsztacie to nie muszę słuchać mruczenia żony za uszami ... :D

    Zrobiłem tak jak radziliście i pomiar prądu zrobiłem w przerwaniu Timer 1, ale zaczęły mi wyskakiwać krzaki na wyświetlaczu i musiałem zmienić sposób wyświetlania na lcd - przedtem przed wejściem w podprogram wyświetliłem stałe elementy a tylko niektóre piksele były nadpisywane, a teraz całość muszę nadpisywać a i tak co chwilę mrugnie krzaczek. A pomiar jaki był taki jest, nic się nie zmieniło. A poza tym wyświetlam jeszcze napięcie na baterii i tu dopiero są cyrki, napięcie z ADC tak skacze że masakra od 2 do 12V. Też wstawiłem pod przerwanie za pomiarem prądu, pomiar się ustabilizował ale głupieje wyświetlacz ( wyświetlają się przypadkowe znaki gdzie popadnie ). Musiało by się wyświetlać tylko i wyłącznie napięcie i prąd wtedy by było, ale mnożnik jaki był taki jest, nic się nie zmieniło.

    ... no cóż, będę walczył dalej.
  • Poziom 35  
    Tmf właśnie po to 100% żeby mierzyć prąd który się ustabilizuje nie pik po włączeniu tranzystora , z tym powinien to ciężko to jednoznacznie określić patrząc na charakterystykę ładowania akumulatora i wpinając oscyloskop w bocznik szeregowy ładowarki impulsowej . Zasadniczo taki układ np. do ładowania lipo , life , liio można zbudować na 2 stabilizatorach typu lm317 jeden będący źródłem prądowym drugi będący źródłem napięciowym . I ewentualnie bocznik i komparator który zasygnalizuje że prąd osiągnął wartość minimalną np. 0,1 zadanego prądu ładowania . Ja bym jednak skierował cię w inną stronę - pilot do żony odkrycie na miarę Nobla 2017 ;) . Co do Bascoma którym się chwilę pobawiłem to inwestowanie wolnego czasu w ten język to moim zdaniem strata cennego czasu zamień go lepiej już teraz na C lub jak jesteś uparty na asembler i środowisko na studio-7 ;)
  • Użytkownik usunął konto  
  • Poziom 43  
    niveasoft napisał:
    Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd..

    To klasyczny przykład jak nie należy obsługiwać przerwań.
    Ustawianie flagi nie ma żadnego sensu, bo wtedy nie trzeba przerwania.
    W przerwaniu jak najbardziej można obsługiwać pomiary ADC. Ale niekoniecznie całe. Tylko np. tylko je wyzwalać. A w przerwaniu od ADC odczytywać wyniki.
  • Użytkownik usunął konto  
  • Moderator Mikrokontrolery Projektowanie
    kamyczek napisał:
    Tmf właśnie po to 100% żeby mierzyć prąd który się ustabilizuje nie pik po włączeniu tranzystora

    Przecież to co napisałeś kompletnie nie ma sensu. Prąd się ustabilizuje w zależności od sposobu sterowania tranzystora i indukcyjności doprowadzeń najpewniej w ciągu mikrosekund, jeśli nie krócej. Zaproponowałem pomiar tuż przed wyłączeniem tranzystora, a więc w chwili kiedy prąd od dawna już jest const. Ty piszesz o przełączaniu PWM na 100%. Na jak długo wg ciebie? 1 us, 1ms, dłużej? Aż się układ zjara?
  • Poziom 35  
    Prąd można zmierzyć tak samo przed wyłączeniem tranzystora jak w osobnym cyklu pomiarowym ważne żeby nie robić tego zaraz po załączeniu tranzystora . Poza tym większość ładowarek używa przetwornika w ostatniej części cyklu gdy do akumulatora lipo czy life jest przyłączone stałe napięcie równe maksymalnemu napięciu ogniwa np. 4,2V i mierzony jest prąd ładowania, który sukcesywnie spada . Wyłączenie następuje po osiągnięciu prądu który nie wiele już daje bo jeśli wynosi on np. 10mA to na godzinę mamy 10mAh
  • Poziom 23  
    niveasoft napisał:
    @ziguś
    Dostosuj ten przykład do Twojego programu czyli nie mierz w przerwaniu tylko ustaw flagę by dokonano pomiaru. Możliwa wtedy będzie obsługa innych przerwań itd..


    wypróbuję rano bo całą noc muszę siedzieć w pracy
  • Poziom 23  
    Próbowałem ale nic to nie dało. Tym razem wyświetlacz nie głupiał ale pomiar tak samo różnił się od multimetru i mnożnik tym większy im mniejszy prąd. Wpiąłem w szereg 3 różne multimetry - one pokazywały to samo - a na ACS było inaczej. Zrobiłem jeszcze tak że na wejście ładowarki wpiąłem regulowany zasilacz i prąd wymuszałem zmianą napięcia ( pwm ustawiony na 1023 ) to wtedy wszystko się pokrywało.
    Zastanawiam się jak to zrobić żeby mnożnik malał wraz ze wzrostem prądu. Gdyby była to wartość liniowa nie było by problemu ale liniowo nie jest. Dla 500mA jest inny a dla 3A inny.