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

ATMEGA128 - (BASCOM) Zakłócenia na wejściu ADC

sundayman 31 Sty 2013 04:11 2556 8
  • #1 31 Sty 2013 04:11
    sundayman
    Poziom 24  

    Może najpierw parę słów wprowadzenia :

    Atmega128 - jej główne zadanie to sterowanie silnikiem DC, za pomocą tranzystora mosfet. Zasadniczo chodzi tylko o ON/OFF, dodany jest jedynie softstart PWM.
    Tranzystor ten sterowany jest z PB4 (OC0).
    Atmega zaś taktowana kwarcem 14.745.600 Hz.

    Dodatkowo , wykorzystane są 3 kanały ADC, w tym :
    ADC1 - do pomiaru prądu pobieranego przez silnik
    ADC2 - do pomiaru napięcia zasilania

    Cały urządź zasilany jest z zewn. zasilacza 24V, no i potem jest przetwornica na 5V oczywiście.

    Mierzone napięcia dostarczane są do ADC za pomocą takich prościutkich wtórników napięciowych :

    ATMEGA128 - (BASCOM) Zakłócenia na wejściu ADC

    Sygnał PSU-V-ADC biegnie sobie do ADC2, przy wejściu tym jest jeszcze kondensator 100nF do masy.

    Podczas normalnej pracy (silnik nie jest włączany), na ADC2 jest następujący sygnał :
    ATMEGA128 - (BASCOM) Zakłócenia na wejściu ADC

    Czyli jest w miarę stały poziom napięcia, raz na sekundę pojawiają się zakłócenia, w chwili kiedy wykonywany jest pomiar (1 na sekundę).

    Aha, ADC są skonfigurowane następująco :

    Code:
    ' konfiguracja ADC
    
    Config Adc = Single , Prescaler = 128 , Reference = Aref    ' aref


    Czyli napięcie odniesienia zewnętrzne, zrobione na LM285 2.5V, oczywiście z kondensatorami, dławikiem itp.

    I teraz - wszystko działa cacy, do momentu, kiedy nie korzystam z TIMER0, w trybie
    FAST PWM, do uruchomienia silnika.

    PWM jest uruchamiane poprzez wpisanie do TCCR0 wartości B01101010
    (fast PWM, prescale 8).

    Samo PWM działa poprawnie, silnik sobie startuje i gitara.
    Ale - czasem - nie zawsze - raz na kilka uruchomień silnika, na wejściu ADC2 pojawia się jakby jakiś sygnał zegarowy :

    ATMEGA128 - (BASCOM) Zakłócenia na wejściu ADC

    Jak widać okres to 22.4 - 22.6 uS, czyli ok. 44kHz.

    Kiedy tylko pojawią się te "oscylacje", to oczywiście dalsze pomiary z tego ADC są już błędne - czyli "pływają".

    Co bardzo dziwne - oscylacje nie znikają nawet po resecie !
    Dopiero wyłączenie zasilania powoduje ich zniknięcie. Oczywiście sprawdziłem , że zarówno napięcie zasilające wtórnik napięciowy, napięcie wejściowe na ten wtórnik - i nic podejrzanego.

    Wygląda to tak, jakby sporadycznie - po włączeniu TIMER0, i użyciu go jako PWM, to po jego wyłączeniu - na ADC2 pozostaje jakiś "zegar".

    I tylko na tym ADC! Wszystkie pozostałe działają poprawnie.

    Napięcie 24V, które jest mierzone przez ten ADC2, oczywiście podczas uruchamiania silnika, czyli działania PWM, podlega pewnym zakłóceniom. Tyle, że jest to sinusoida (mniej więcej), o okresie zgodnym z PWM, czyli około 10Khz, no i co najważniejsze - po pełnym włączeniu PWM, TIMER0 jest wyłączany, pin włączający silnik jest już "1" na stałe - a te oscylacje na ADC2 są nadal.

    Próbowałem zmian w konfiguracji ADC na "FREE", oraz wszystkiego co mi przyszło do głowy, szybkości PWM, itp. Bez efektu.

    Co jakiś czas - ok. 1 na 10 uruchomień - mam ten problem.

    Podrzucicie jakiś pomysł ??

    ***

    Doczytałem, że stosowanie jako układu kondycjonującego wzmacniacza pracującego przy niskim wzmocnieniu (tutaj 1), i bez odseparowania od wejścia ADC, może powodować takie "dzwonienie", a nawet oscylacje właśnie.

    Wydaje się to o tyle prawdopodobne, że podniesienie napięcia zasilającego z 24 do 25 V (czyli także poziomu "normalnego" sygnału na wejście wzmacniacza), powoduje ustanie oscylacji.

    Czy ktoś z Was miał podobne przygody z wejściami ADC ?
    Po południu sprawdzę, czy zmiana wzmocnienia spowoduje poprawę sytuacji...

    0 8
  • #2 31 Sty 2013 08:55
    Steryd3
    Poziom 31  

    Przygód miałem wiele:) Tego typu problemy to zazwyczaj problem z kondycjonowaniem sygnału, rozdzielaniem mas i zasilań części cyfrowej i analogowej, blokowania zasilania kondensatorami, złe rozmieszczenie elementów na płycie i złe prowadzenie ścieżek. Wzmacniacze operacyjne mogą dać mocno popalić-zwłaszcza gdy układ jest niedaleko granicy stabilności. Pomijając mizerność przetwornika ADC w AVR'ach to istotnie może to być problem nie po ich stronie. Trudno coś powiedzieć jak nie widzi się zlutowanego na płytce układu oraz całego schematu z wartościami elementów. Szukał bym we wspomnianych "punktach" które wymieniłem.

    0
  • #3 31 Sty 2013 10:09
    BlueDraco
    Specjalista - Mikrokontrolery

    Jeden ze wzmacniaczy niepotrzebny, a oba dziwne i potencjalnie niebezpieczne "zakłóceniowo"- zwarcie diodą Zenera na wyjściu bez ograniczenia prądu powoduje zwarcie wyjścia wzmacniaczy i zakłócenia prądowe. Dziwne i niebezpieczne te wtórniki - brak kondensatorów przycinających pasmo też nie wróży dobrze.

    Myślę jednak, że do problemu dokłada się sam procesor - może to być kwestia zablokowania zasilań.

    0
  • #5 31 Sty 2013 18:00
    sundayman
    Poziom 24  

    Tak na szybko - zenerki na wyjściach wzmacniaczy są tylko zabezpieczeniem. Ponieważ LM258 są zasilane z 12V, na wypadek jakiegoś "wypadku", zenerki mają chronić wejścia ADC. Normalnie, nigdy się tam nie powinno pojawić napięcie pow. ok 2.5V-3V

    Ale w przyszłości to zmienię (zapewne obniżę zasilanie LM).

    W pewnym sensie - LM pracujący jako wtórnik napięciowy jest " niepotrzebny", ale wolałem nie podłączać bezpośrednio napięcia mierzonego do ADC - co prawda jest ono mierzone z dzielnika rezystorowego, ale mogą tam się pojawić jakieś dziwne rzeczy w przypadku awarii.

    Na pewno nie jest to problem zasilania MCU, czy odsprzęgania zasilania AVCC (każdy pin zasilania ma swój dławik i pojemność), bardzo dbam o te detale - ale przede wszystkim problem powstaje tylko na jednym wejściu ADC - pozostałe 2 , w tym ten , który ma wzmacniacz op. o większym wzmocnieniu - działa poprawnie.

    Co więcej - problem nie powstaje wtedy, kiedy ADC mierzy w odstępach 500 ms (czyli przez większość czasu pracy).

    Dopiero uruchomienie PWM (Co się wiąże także z próbkowaniem ADC ok 1000/sek ) powoduje powstanie - czasem - tego zjawiska.

    Co potwierdzałoby tezę powstania oscylacji na wyściu wzmacniacza, z uwagi na przełączaną pojemność na wejściu ADC - taki zbieg kilku czynników.

    Właśnie jadę to sprawdzić - zmienię wzmocnienie, oraz ew. dodam rez. separujący wyjście (co jest zalecane ponoć) , i zobaczymy.

    0
  • #6 31 Sty 2013 18:16
    Steryd3
    Poziom 31  

    sundayman napisał:

    Dopiero uruchomienie PWM (Co się wiąże także z próbkowaniem ADC ok 1000/sek ) powoduje powstanie - czasem - tego zjawiska.
    To mnie akurat nie dziwi, że częste pojawianie się szybko narastających zboczy jak ma to miejsce przy sterowaniu PWM generuje zakłócenia. Dodatkowo jeżeli ścieżki którymi płynie prąd do wspomnianego wentylatora (masa i zasilanie) są wspólne z zasilaniem wzmacniaczy lub AVR'a mogą pojawiać się takie zjawiska. Prąd płynący przez te ścieżki powoduje spadek napięcia(w takt sygnału PWM). Ale powtarzam-bez znajomości dokładnego schematu wraz z wartościami elementów oraz bez widoku PCB wszystkie rady są tylko podejrzeniami i ogólnymi wytycznymi jak budować tego typu układy.

    0
  • #7 31 Sty 2013 18:21
    sundayman
    Poziom 24  

    Jeśli próby nie pomogą, to oczywiście zapodam fragmenty schematu (bo cały jest zdecydowanie za duży), ale - nie jest to typowy problem , z zakłóceniami :)

    Oczywiście, PWM generuje zakłócenia , z tym, że są to tutaj zakłócenia mierzonego przez ADC napiecią (te 24V) - inne zakłócenia się nie przedostają. Nietypowość problemu polega na tym, że oscylacja powstałe na wejściu ADC, kiedy już powstaną, to nie znikają po wyłączeniu PWM, ani nawet po resecie MCU. Są tam do momentu np. podniesienia napięcia wejściowego na wzmacniacz op.

    Ok - napiszę później co mi wyszło z prób.

    0
  • #8 31 Sty 2013 18:28
    BlueDraco
    Specjalista - Mikrokontrolery

    Te Zenerki mogą być powodem zwarcia na wyjściu wzmacniacza i siania zakłóceniami po zasilaniu, bo nie ma przed nimi żadnego rezystora, a silnik jako element indukcyjny generuje szpile, które z dużym prawdopodobieństwem przekroczą po wzmocnieniu napięcie Zenera.

    0
  • #9 01 Lut 2013 00:44
    sundayman
    Poziom 24  

    A więc tak - po pierwsze, polecam tą publikację :
    http://www.unirioja.es/cu/lzorzano/ABCs_of_ADCs.pdf

    Sprawa okazała się zgodna z przewidywaniem - podstawowym problemem była zdecydowanie zbyt duża pojemność na wejściu ADC, czyli jednocześnie na wyjściu wzmacniacza OP.

    Jak wspomniałem (nie widać tego przy wzmacniaczach), wejścia ADC były zablokowane kondesatorkami 100nF + rezystor 100k do masy.

    Usunięcie tego kondensatora spowodowało, że przebieg na wejściu ADC wygląda tak jak powinien - są oczywiście zakłócenia, ale minimalne, no i nie ma śladów wzbudzania. Czyli de facto wystarcza wylutowanie kondensatorów na wejściach ADC, znajdujących się przy MCU.

    Ale jeszcze dodam, dla przyszłych pokoleń - oczywiście, silnik jako obciążenie generuje szpilki, ale są one na napięciu mierzonym przez MCU bardzo małe - 50mV (w trakcie PWM, 7kHz) - MCU mierzy napięcie przez dzielnik 1/20.
    Co oznacza, że rzeczywiste zakłócenia są w okolicy 1V, na samym silniku. Nie jest to więc wiele.

    Co do tych nieszczęśliwych zenerek - pisałem już, że napięcie na wyjściu OP , w żadnym momencie nie ma prawa przekroczyć 2V (to przy wzroście zasilania do 40V, wtedy zresztą silnik nie jest uruchamiany).
    I zenerki pełnią wyłącznie rolę zabezpieczenia "na wszelki wypadek".

    0