Volba mcučka, realizovatelnost aplikace

zdravím
dělám aplikaci, která zřejmě povede na použítí 32b mcučka. Jelikož v tom nemám žádný přehled, tak bych poprosil o radu, jestli je můj předběžný návrh realizovatelný, případně jestli bych si měl dát na něco konkrétního pozor. :smiley:

Mám desku s 8 proudovými senzory (hall effect-galvanicky oddělené), které budu strkat do teplotní komory a testovat jak se chovají při určitých teplotách. Ty senzory mají napětový výstup (typicky 0-5V) nebo digitální (I2C, SPI). Ty s digitálním výstupem jsou určeny jenom pro měření stejnosměrného proudu. Senzory s napětovým výstupem pokud jsou určeny i pro střídavý proud, tak jsou schopni měrit cca až do 200-500kHz. Typicky celý rozsah hodnot převedou na 0-Vcc, například -10A - 10A na 0 - 5V.
Z této desky v teplotní komoře povede pak chuchvalec drátů (dlouhý 30-100cm) k modulu s mcučkem mimo komoru, který je dále propojen přes sériák s PCčkem.
To mcučko by mělo číst hodnoty ze senzorů a vypisovat je na displej nebo je posílat do PC. Čtení ze senzorů s digitálním výstupem je přes příslušnou sběrnici I2C/SPI nebo z externího 8-kanálového 15bitového AD převodníku v případě senzorů s napětovým výstupem.
Jednoduché blokové schéma, by mohlo vypadat takto:

/ PC / <----- USB/FTDI ------->/ modul s MCU + AD převodník / <------- max 1 metr dlouhá kabeláž -------- >/ deska se senzory /

Řeším tyto problémy:

1.) Délka vodičů sběrnic I2C/SPI mezi deskou se senzory a mcu. Předpokládám délku 30cm až 1m. Co jsem tak vyčetl, tak tohle může být docela problematické, i když snižuju frekvenci hodin co nejníže. Na I2C existujou extendery (např P82B715) a na SPI expandery (např MAX7317), ale jsou limitované teplotou do 85°C, takže bych je mohl dát jenom na modul s mcučkem. Máte s tím někdo zkušenosti?

2.) Týká se čtení vzorků z AD převodníku a jak to dnešní 32b mcučka stíhají. Nechci sledovat průběhy signálu ze všech senzorů najednou, ale dejme tomu každou 0,5-1 sekundy vypisovat na displej hodnoty nebo je posílat do PC. Jde mi o stejnosměrnou oblast a v případě střídavého proudu (stejnosměrná + střídavá složka) chci mít střední (average) hodnotu.
Nepotřebuju tedy ukládat jednotlivé vzorky do paměti, ale sčítat je do jedné proměnné a pak je podělit počtem vzorků. Je realizovatelné na nějakým ARMu F0 čtení hodnot z AD převodníku, co má vzorkovačku 1-10Mhz, abych byl schopný vypočítat střední hodnotu ze signálu o maximální frekvenci 500kHz?
Trošku jsem to asi přestřelil, protože znovu opakuju, že mě zajímá hlavně stejnosměrná oblast a mělo by to spíše simulovat chování multimetru na DC rozsahu, který právě vypisuje průměrnou hodnotu za dobu integrace.
Konkrétní příklad: 15-bitový AD převodník o fvz 200kHz (5us) - tato hodnota odpovídá vzorkovačce u integračních převodníků v multimetrech. Sečtu dejme tomu 10000 vzorků, tedy doba integrace je 10000*5us=50ms (20Hz). 10000 vzorků volím proto, aby nepřeteklo 32b proměnná a potřebuju takhle postupně počítat dokola z 8 kanálů. Opakuju, že se jedná o výpočet střední hodnoty a ne efektivní, kde bych potřeboval ještě mocnit atd.
Zajímalo by mě, jestli tohle může typický 32b ARM stíhat případně na jaké frekvenci už má limit. Co jsem vyčetl, tak do určité fvz mají AD převodníky opět nějaké SPI/I2C rozhraní a pak mají paralelní výstup.

Snad jsem někoho neodradil dlouhým textem…

To co chceš zvládne prakticky jakýkoliv mcu od AVR, x51, ARM. Proč chceš integrovat digitálně (200KHz) ?, integruj analogově s operačním zesilovačem a vzorkuj si pohodově na několika stovkách herz. Pokud potáhneš dlouhé dráty, raději použij SPI a převeď úrovně na RS485. Pokud potáhneš analogový signál, dopručuju rovněž převést na symetrický.

Použití integrátoru by bylo pěkné, i když nemám žádné zkušenosti s jeho návrhem. Počítal jsem právě do budoucna s tím, že bude možnost přepínat mezi vypisováním střední a efektivní hodnoty apod. Použití AD převodníku a vzorkování na co nejvyšší frekvenci neztratím informaci o opravdových hodnotách ze senzoru…právě proto kdybych v blízké budoucnosti chtěl něco softwarovýho do mcu měnit nebo doplnit.

Co se týče sběrnic SPI/I2C, tak mě taky napadlo použití RS485, akorát se firma bude muset prásknout přes kapsu, protože vysílače/přijímače na 150°C nejsou zrovna levné záležitosti :smiley: Navíc v případě I2C se mi to mírně zesložituje použitím mcuček do 150°C jako lokální převodníky I2C/UART…
Budu si to muset v labině vyzkoušet s metrovým kabelem, jestli to pojede bez problému nebo na hraně nebo vůbec…a podle toho se rozhodnout, co aplikovat.
S převodem analogu na symetrický signál existujou nějaké ověřené integrované řešení nebo si budu muset něco navrhnout?

Jinak díky za poznámky.

EDIT:

S těmi 8051/AVRkama si narážel na 200kHz vzorkování nebo i na 1Mhz? Příklad: 16b AD převodník 2,5Msps, co má SPI rozhrání. Tedy 2,5M*16=40MHz clock pro SPI. To chce ARM na nějakých 160MHz, aby se takové hodiny dali pro SPI odvodit. Zajímalo by mě, jak to ARM stíhá a zároveň řeší jiné věci. Vím, že v praxi se tam odlehčuje pomocí DMA, ale zajímal by mě přibližný limit těchto mcuček.

Ne, narážel jsem na to, že si máš signál rozumě předpřipravit filtrem abys nemusel vzorkovat nesmyslně vysoko a pak to tyto běžné procesory zvládnou. Neznám povahu té Tvojí úlohy, takže nemohu posoudit jestli je ten požadavek oprávněný. Ano, takový ARM s DMA Ti to nachrlí do paměti bez účasti procesoru. Zpracovat to můžeš v závěsu nebo dodatečně. 25Mb/s není pro arm taktovaný na 50MHz zas tak závažný problém (zkoušel jsem touto rychlostí kontinuálně vysílat).