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

AD7693 z ATmega16 – nieliniowość i rozbieżności odczytów powyżej 02FFh

kurka_wodna 11 Wrz 2008 19:35 969 2
REKLAMA
  • #1 5526339
    kurka_wodna
    Poziom 11  
    Posty: 6
    Witam.

    Ostatnio próbowałem zbudować układ składający się z ATmegi16 i 10 sztuk ADC (AD7693). Układ miał służyć do pomiaru 10 kanałów napięć o zakresie 0-3V z dokładnością 0,02%. Wszystko niby oczywiste, ale problemów co nie miara :(

    Po pierwsze:
    Przetworniki zachowują się dziwacznie: póki napięcie jest małe (tak do wartości 02FF hex) ostatnie 4 bity ładnie zmieniają się co 1LSB, ale po przekroczeniu tej wartości ostatnie 4 bity przyjmują wyłączeni dwie wartości, albo 0 hex albo 8 hex.

    Po drugie:
    Zmontowałem dwa tory pomiarowe na oba podałem to samo napięcie, to samo źródło odniesienia (ADR443), to samo zasilanie, a tu okazało się, że wartość odczytana z przetworników rozbiega się nawet o 0,3%, im większe napięcie tym większy błąd, ale nie rośnie on liniowo.

    Proszę o pomoc jeśli po przeczytaniu tego posta, ktoś wpadnie na jakiś pomysł.

    Z góry dzięki i Pozdrawiam.
    Załączniki:
    • Schemat.pdf (10.29 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 5527477
    Konto nie istnieje
    Konto nie istnieje  
  • #3 5528767
    kurka_wodna
    Poziom 11  
    Posty: 6
    Źródłem jest póki co spadek napięcia na rezystorze 1kOhm, ale docelowo będzie to wzmacniacz operacyjny o małej impedancji na wyjściu, dostosowany do mojej aplikacji. Płytka też wydaje mi się dobrze zaprojektowana , jak mierzę różnice napięcia pomiędzy punktami zasilania, napięciem referencyjnym i punktami masy dla obu przetworników to nie przekraczają 10uV. Mi się osobiście wydaje że to problem programu ale nie wiem jak go rozwiązać bo probram też pisałem zgodnie z kartą katalogową przetwornika.

    SPCR=0x59;
    
    PORTA|=_BV(1); //ustawienie CNV na "1"
    
    for (x=0;x<10;x++){} //czekanie na konwersję sygnału analog -> digital
    
    PORTA&=~_BV(1); //ustawienie CNV spowrotem na "0"
    
    SPDR=0x00;
    while (bit_is_clear(SPSR, SPIF)){}
    
    dane1=SPDR;
    
    SPDR=0x00;
    while (bit_is_clear(SPSR, SPIF)){}
    
    dane11=SPDR;
    
    for (x=0;x<10;x++){}


    Tak wygląda fragment programu odpowiedzialny za odbieranie danych z układu składającego sie z jednego przetwornika.

    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
REKLAMA