Witam wszystkich Elektrodowiczów!
Mam 16-bitowy przetwornik analogowo-cyfrowy (ADC) ADS8326 firmy Texas Instruments, który komunikuje się z mikrokontrolerem NXP LPC1769 przez SPI (SPI0). Przetwornik ADC zasilany jest z przetwornicy IRM-05-5 Mean Well z kondensatorem elektrolitycznym 1000 µF/25 V na jej wyjściu. Aplikacja przetwornika ADC z kondensatorami 1 µF/50V + 100 nF/100 V bezpośrednio zarówno na zasilaniu ADC (pin 8 to Vcc) jak i na wejściu Uin przetwornika ADC.
Jako napięcia odniesienia dla ADC używam układu REF193 - daje on na swoim wyjściu referencyjnym 3000 mV.
Jako napięcia testowego (wejściowego do ADC), które chcę zmierzyć używam dzielnika rezystancyjnego z dwóch rezystorów metalizowanych THT, podłączonego do napięcia wyjściowego 3000 mV z układu REF193. Z dzielnika otrzymuję napięcie 1,4764-1,4769 V (zmierzone 3-ema woltomierzami).
Spodziewaną wartością otrzymywaną z przetwornika ADC jest:
ADC rozdzielczość = 2^16 bitów = 65 536 próbek
1,4764 V / 3,000 V = 0,49213, co daje:
65 536 próbek x 0,49213 = 32 252 próbek (0x7DFC) ±1,5 LSB (wg dokumentacji producenta), co daje wartości od 32 250 do 32 254 (załóżmy w najgorszym przypadku).
Wartości odczytane z przetwornika ADC wyrzucam na UART0, konwerter UART-USB FTDI i na terminal portu COM w komputerze.
Otóż odczytywane wartości z przetwornika ADC mają ogromy rozrzut:
Poniżej zamieszczam kod źródłowy (funkcję obsługującą) przetwornik:
oraz wywołanie tej funkcji w pętli głównej:
Konfiguracja SPI w mikrokontrolerze:
Poniżej również zamieszczam link do dokumentacji technicznej przetwornika ADS8326:
ADS8326 Texas Instruments
Próbowałem także z innymi konfiguracjami/trybami SPI (mode0, 1, 2, 3, bity CPOL i CPHA), ale to nie przynosi oczekiwanego rezultatu.
Co może być przyczyną tak niestabilnej pracy przetwornika?
Mam 16-bitowy przetwornik analogowo-cyfrowy (ADC) ADS8326 firmy Texas Instruments, który komunikuje się z mikrokontrolerem NXP LPC1769 przez SPI (SPI0). Przetwornik ADC zasilany jest z przetwornicy IRM-05-5 Mean Well z kondensatorem elektrolitycznym 1000 µF/25 V na jej wyjściu. Aplikacja przetwornika ADC z kondensatorami 1 µF/50V + 100 nF/100 V bezpośrednio zarówno na zasilaniu ADC (pin 8 to Vcc) jak i na wejściu Uin przetwornika ADC.
Jako napięcia odniesienia dla ADC używam układu REF193 - daje on na swoim wyjściu referencyjnym 3000 mV.
Jako napięcia testowego (wejściowego do ADC), które chcę zmierzyć używam dzielnika rezystancyjnego z dwóch rezystorów metalizowanych THT, podłączonego do napięcia wyjściowego 3000 mV z układu REF193. Z dzielnika otrzymuję napięcie 1,4764-1,4769 V (zmierzone 3-ema woltomierzami).
Spodziewaną wartością otrzymywaną z przetwornika ADC jest:
ADC rozdzielczość = 2^16 bitów = 65 536 próbek
1,4764 V / 3,000 V = 0,49213, co daje:
65 536 próbek x 0,49213 = 32 252 próbek (0x7DFC) ±1,5 LSB (wg dokumentacji producenta), co daje wartości od 32 250 do 32 254 (załóżmy w najgorszym przypadku).
Wartości odczytane z przetwornika ADC wyrzucam na UART0, konwerter UART-USB FTDI i na terminal portu COM w komputerze.
Otóż odczytywane wartości z przetwornika ADC mają ogromy rozrzut:
Wyniki odczytane z terminala portu COM; dane wyjściowe z przetwornika ADCADS8326 napisał:
00 00 7d 76 ..}v
00 00 7c cb ..|Ë
00 00 7e 17 ..~.
00 00 7c 00 ..|.
00 00 7e 4b ..~K
00 00 7c 7b ..|{
00 00 7e 3b ..~;
00 00 7c b6 ..|¶
00 00 7d b0 ..}°
00 00 7d 0f ..}.
00 00 7c cd ..|Í
00 00 7d ab ..}«
00 00 7c 07 ..|.
00 00 7e 47 ..~G
00 00 7c 4f ..|O
00 00 7e 40 ..~@
00 00 7c 50 ..|P
00 00 7d e7 ..}ç
00 00 7d 28 ..}(
00 00 7d 1f ..}.
00 00 7d 90 ..}
00 00 7c 40 ..|@
00 00 7e 97 ..~—
00 00 7c 5f ..|_
00 00 7e 20 ..~
00 00 7c 64 ..|d
00 00 7d c0 ..}Ŕ
00 00 7d 00 ..}.
00 00 7d 0f ..}.
00 00 7d a8 ..}¨
00 00 7c 2f ..|/
00 00 7e 2f ..~/
00 00 7c 53 ..|S
00 00 7e 27 ..~'
00 00 7c 6d ..|m
00 00 7d f4 ..}ô
00 00 7c c1 ..|Á
00 00 7d 0b ..}.
00 00 7d 5f ..}_
00 00 7c bf ..|ż
00 00 7e 80 ..~€
00 00 7c 0b ..|.
00 00 7e 23 ..~#
00 00 7c 5f ..|_
00 00 7e 2b ..~+
00 00 7c 9b ..|›
00 00 7d 40 ..}@
00 00 7d 87 ..}‡
00 00 7c c0 ..|Ŕ
00 00 7e 50 ..~P
00 00 7c 07 ..|.
00 00 7e 28 ..~(
00 00 7c 70 ..|p
00 00 7e 4f ..~O
00 00 7c ba ..|ş
00 00 7d 80 ..}€
00 00 7d 80 ..}€
00 00 7d 2f ..}/
00 00 7e 37 ..~7
00 00 7c 6a ..|j
00 00 7e 52 ..~R
00 00 7c 7b ..|{
00 00 7e 2a ..~*
00 00 7c b0 ..|°
00 00 7d c5 ..}Ĺ
00 00 7d 43 ..}C
00 00 7c f7 ..|÷
00 00 7d bd ..}˝
00 00 7c 20 ..|
00 00 7e 3b ..~;
00 00 7c 4f ..|O
00 00 7e 2f ..~/
00 00 7c 5b ..|[
00 00 7d ed ..}í
00 00 7d 35 ..}5
00 00 7d 29 ..})
00 00 7d b3 ..}ł
00 00 7b f0 ..{đ
00 00 7e 40 ..~@
00 00 7c 4d ..|M
00 00 7e 0b ..~.
00 00 7c 4b ..|K
00 00 7d d3 ..}Ó
00 00 7d 03 ..}.
00 00 7d 25 ..}%
00 00 7d bd ..}˝
00 00 7c 0f ..|.
00 00 7e 80 ..~€
00 00 7c 49 ..|I
00 00 7e 35 ..~5
00 00 7c 5c ..|\
00 00 7d d3 ..}Ó
00 00 7c f2 ..|ň
00 00 7d 00 ..}.
Poniżej zamieszczam kod źródłowy (funkcję obsługującą) przetwornik:
Kod: C / C++
oraz wywołanie tej funkcji w pętli głównej:
Kod: C / C++
Konfiguracja SPI w mikrokontrolerze:
Kod: C / C++
Poniżej również zamieszczam link do dokumentacji technicznej przetwornika ADS8326:
ADS8326 Texas Instruments
Próbowałem także z innymi konfiguracjami/trybami SPI (mode0, 1, 2, 3, bity CPOL i CPHA), ale to nie przynosi oczekiwanego rezultatu.
Co może być przyczyną tak niestabilnej pracy przetwornika?