AD7124-4 nastavení vzorkovací frekvence

Raspberry, Arduino, Mini-PC a další

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
ghost07
Příspěvky: 47
Registrován: 19 úno 2020, 01:00

AD7124-4 nastavení vzorkovací frekvence

#1 Příspěvek od ghost07 »

Ahoj, neporadí někdo jak se nastavuje vzorkovací frekvence u A/D převodníku AD7124-4?
Datasheet: https://www.analog.com/media/en/technic ... 7124-4.pdf

Na straně 78 začíná popis registrů, a jestli to chápu správně, tak vzorkovací frekvence se nastavuje v registru pro filtr. Ale ať nastavím do FS [10:0] cokoliv, tak stejně dostanu maximálně 1 - 2 konverze za sekundu v Low power módu. Ve Full power módu to bylo 4 - 5 SPS. Čtu data v continuous módu tak, že mám pro DOUT/^RDY pin nastavené v mikroprocesoru přerušení. Data dostávám správné, akorát z toho A/D převodníka lezou nějak pomalu.

Příklady vyzkoušených nastavení registru 0x21 (Filtr 0)
(vyčítaný kanál je namapovaný na setup 0)
0x0003FF -> 0.25 SPS (1 převod za 4 vteřiny)
0x000000 -> 1 - 2 SPS
0x060180 -> 0.5 SPS (výchozí hodnota podle datasheetu)
0x0603FF -> 0.25 SPS
0x060000 -> 1 - 2 SPS

Na začátku je v datasheetu uvedeno až 19200 SPS ve full power módu nebo 2400 SPS v low power módu, tak kde je těch zbylých 2399 SPS? :D Jestli to všechno sežere filtr, tak jde nějak vypnout, abych z toho dostal aspoň 100 SPS?
Naposledy upravil(a) ghost07 dne 12 lis 2022, 14:26, celkem upraveno 1 x.

petrfilipi
Příspěvky: 2551
Registrován: 13 zář 2005, 02:00

#2 Příspěvek od petrfilipi »

Zkus položit dotaz do Engineer zone u výrobce. Třeba budeš mít víc štěstí než já u firmy Bosch Sensortec, tam můj dotaz na BMX160 ani nezveřejnili.

PF

Uživatelský avatar
samec
Příspěvky: 3692
Registrován: 19 pro 2017, 01:00

#3 Příspěvek od samec »

SF=0x3FF je oproti FS=0x000 tisíc-krát pomalší. Chyba bude niekde inde. Odkiaľ berieš CLK? (CLK_SEL v ADC_CONTROL registri)

A oprav si link na ten datašit, lebo s tou zatvorkou na konci to otvára srandovnú stránku s hláškou o prebiehajúcej odstávke/údržbe.

Uživatelský avatar
ghost07
Příspěvky: 47
Registrován: 19 úno 2020, 01:00

#4 Příspěvek od ghost07 »

CLK_SEL mám nastavený na 0x00 (interní CLK bez výstupu na SPI CLK pin).

Pak mi došlo že mám v kódu inicializovaný další 2 kanály, který jsou namapovaný na setup 1. Když jsem jejich inicializaci zakomentoval, tak jsem z kanálu 0 pak četl s rychlostí kolem 200 vzorků/vteřinu.

Ano, pak jsem se taky dočetl že to pole FS je vlastně dělič :D
Ale pořád se to nechová předvídatelně, nebo mi něco uniká.
Až se k tomu v pondělí zase dostanu, tak můžu poslat úplnou konfiguraci všech registrů.

Zkrátka, když jsem nastavil FS na 10 (teď myslím v desítkový soustavě, takže 0x00A), tak to četlo cca 200 SPS, ale když jsem nastavil na 1, tak se to naopak zase zpomalilo na cca 150 SPS.

Uživatelský avatar
Mahoney
Příspěvky: 347
Registrován: 26 říj 2019, 02:00

#5 Příspěvek od Mahoney »

On se tě ani tak neptal jak máš nastavený CLK_SEL, ale jaký máš skutečný clock (signál), jestli je v pořádku… Pusť si ho na pin jestli je ok, a nebo si ho zkus dát úplně zvenku.

Uživatelský avatar
ghost07
Příspěvky: 47
Registrován: 19 úno 2020, 01:00

#6 Příspěvek od ghost07 »

Já bych řekl, že otázka byla opravdu jak mám nastavený CLK_SEL (podle toho co je v závorce). Nicméně, programuju to na už hotové desce kde je SCLK pin je spojený s SPI CLK pinem u ESP32, a nevím jak nastavit aby bylo ESP32 jako slave v SPI komunikaci (tedy reagovalo na CLK z A/D převodníka). Když naopak nastavím v A/D převodníku CLK_SEL na externí, tak zase ESP32 negeneruje clk pulzy když nic neposílá nebo nepřijímá, takže ten ADC zase nic nepřevede, protože nemá clk, a nemá clk, protože od něj MCU nic nečte, a MCU od něj nic nečte, protože nemá na DOUT/^RDY 0, protože A/D převodník nemá k dispozici žádný převedený data, protože nemá clk. :D

Ale stejně si nemyslím že by byl problém s CLK, spíš to vypadá problém u přepínání kanálů. Momentálně s jedním kanálem z toho dostanu na nejvyšší rychlosti ve full power módu 4500 SPS (pětina z toho co uvádí datasheet).
Dobře, s tím by už šlo něco dělat. Ale problém nastává, když přidám další kanály - protože potřebuju data z více kanálů současně.
Pak to ve full power modu klesne z 4500 SPS na 910. Což není polovina jak by člověk čekal. No a po přidání třetího kanálu to klesne na 600. Asi to má něco společného se "settling time" a "dead time" při přepínání kanálu, ale nemůžu pochopit, jak s tím počítat. Uvádí tam že dead time je 95. Ale čeho? ms? us? nějaká konsanta? :D
Jde o to, že bych rád měl nějaký vzorec, kterým spočítám hodnotu do FS, když budu chtít vzorkovat např. 10 Hz, 20 Hz, 100 Hz...

Edit: ještě dodám že aktuálně použitý filtr je ten defaultní (sinc4)
Edit 2: nenapsal jsem, proč si myslím že je clk v pořádku, že? No myslím si to proto, že když aktivuju jen jeden kanál a nastavím FS hodnoty uvedené v tabulce v datasheetu u popisu sinc4 filtru, tak reálný data rate odpovídá hodnotě v tabulce. Ale funguje to jen pro jeden kanál.

Odpovědět

Zpět na „Miniaturní počítače (Arduino, Raspberry a další)“