Sida 1 av 3

Oversampling av ADC på Arduino/AVR

Postat: 16 juni 2015, 19:31:33
av JanErik
Har behov av lite högre upplösning än 10 bit, har tidigare använt en DS2450 men hittade nu detta:
http://www.electricrcaircraftguy.com/20 ... YBc6JTyPmE
http://www.atmel.com/images/doc8003.pdf

Är detta helt kosher enligt signalbehandlingen, är resultatet matematiskt acceptabelt korrekt jämfört med en ADC med högre upplösning?
Borde man använda dithering av nåt slag?

Re: Oversampling av ADC på Arduino/AVR

Postat: 17 juni 2015, 08:14:38
av limpan4all
Ja, det är en utmärkt metod och jag använder den flitigt, 3 bitar ytterligare kan väl få ut som mest i praktiken.
Men det gäller att få till sin brusiga störning på rätt sätt och det är inte helt enkelt.
Det optimala är ett vitt brus med en amplitud på 0,5 till 1 LSB. Egentligen så gör det inte så mycket om bruset är högre men då blir behovet att det är vitt brus större.
Det brukar bli massor av timmar för att säkerställa att man inte överlagrar en känd störning som fuckar upp hela skiten...
Det svåra är att se till att man kan säkerställa att det man mäter är korrekt efter signalbehandlingen, och det är vanligen här de grövsta felen görs att man blandar ihop upplösning med noggrannhet...

Re: Oversampling av ADC på Arduino/AVR

Postat: 17 juni 2015, 23:48:45
av lillahuset
Härligt att läsa att fler än jag intresserar sig för DSP!

Re: Oversampling av ADC på Arduino/AVR

Postat: 18 juni 2015, 22:53:18
av limpan4all
Nope ingen DSP just nu. Cortex M4 i 180MHz för <10USD 2M Flash, 256k RAM Ethernet och en massa periferi. Det kan man inte få i en DSP tyvärr.
Men jag sysslar bara med HW rör inte firmware alls.

Re: Oversampling av ADC på Arduino/AVR

Postat: 19 juni 2015, 17:06:09
av Korken
Cortex-M4 är nästan en DSP ;)

Re: Oversampling av ADC på Arduino/AVR

Postat: 19 juni 2015, 17:39:45
av superx
Verkligen! Jag blev glatt överraskad av prestandan man kan få från t.ex. NXPs LPC43xx

Re: Oversampling av ADC på Arduino/AVR

Postat: 19 juni 2015, 20:10:51
av Korken
Nu inväntas bara Cortex-M7! Då blir det riktig fart!
Samt med stöd för double precision i HW så kan man köra riktiga optimeringsalgoritmer :D

Re: Oversampling av ADC på Arduino/AVR

Postat: 20 juni 2015, 00:03:28
av LHelge
Har hunnit leka lite med en STM32F7Discovery och den är ruskigt snabb. I vissa lägen gör den samma sak som en F4 på halva antalet klockcykler. Den tickar dessutom på i 200MHz.

Re: Oversampling av ADC på Arduino/AVR

Postat: 20 juni 2015, 12:38:09
av lillahuset
Hehe, låter utmärkt. :D

Edit: limpan4all: Klart du håller på med DSP men inte med en DSP. Du decimerar ju. Som jag ser det är största fördelen med decimering att man kommer undan med ett betydligt enklare vikningsfilter.
Den mesta DSP jag gör är på en vanlig PC. Blir något bra/som vi hoppades implementerar jag det i en STM32F4 som ju har ganska mycket DSP-funktionalitet. Ofta räcker det med vanlig C-kod.

Re: Oversampling av ADC på Arduino/AVR

Postat: 20 juni 2015, 15:42:04
av Korken
Bara synd att F7an går så sakta... :(
Kolla Atmels SAM V serie som också är en M7a, den tuffar i 300 MHz.

Trodde ST skulle kontra fort, men de har hittills inte gjort det.
Samt att ST inte fixat en i 64-pins kapsel än gör mig lite ledsen.

Re: Oversampling av ADC på Arduino/AVR

Postat: 20 juni 2015, 16:31:51
av lillahuset
Vi har ett projekt med STM32F4. Jag tyckte jag tog i när jag valde den men har börjat inse att "vissa" har högre förväntningar på prestanda idag än de berättade vid projektets start. Då kanske en STM32F7 kan vara en bra uppgradering.

Re: Oversampling av ADC på Arduino/AVR

Postat: 21 juni 2015, 00:02:11
av superx
LHelge skrev:Har hunnit leka lite med en STM32F7Discovery och den är ruskigt snabb. I vissa lägen gör den samma sak som en F4 på halva antalet klockcykler. Den tickar dessutom på i 200MHz.
Intressant! Vilken typ av kod går dubbelt då snabbt? Blandade funktionsanrop och variabeljox eller tyngre beräkningar som FIR-filter etc?

Strömförbrukningen verkar vara betydligt bättre dessutom.

Re: Oversampling av ADC på Arduino/AVR

Postat: 21 juni 2015, 00:19:10
av LHelge
Lite förenklat skulle man kunna säga att M7:an har en 64-bitars ALU som kan köra två 32-bitars instruktioner parallellt. Blandade funktionsanrop t ex vet jag inte riktigt hur stor vinst det är för. Är osäker på hur pipeline och jump prediction kan hantera det tillsammans med featuren att köra två instruktioner samtidigt.

Stora vinsten skulle jag tro är för DSP-algoritmer. Tanken är väl att man ska kunna göra saker en riktigt DSP har hårdvaruinstruktioner för, direkt i C-kod.

Ett exempel var:

Kod: Markera allt

#define NUM_SAMPLES 500
uint32_t samples[NUM_SAMPLES];
uint32_t sum;
uint32_t i;

sum = 0;
for(i = 0; i < NUM_SAMPLES; i++) {
    sum += samples[i];
}
som exekverade på straxt över 500 cykler. Rätt tydligt att det borde ge en prestandaboost för FIR/IIR-filter, FFT, korskorrelation osv.

Bifogar två bilder om någon är nyfiken på discovery-kortet.
* Kapacitiv touch
* två st MEMS-mikrofoner
* Ethernet
* USB FS & HS
* STLink/V2
* Arduino shield
* microSD
* Kamera interface
* SPDIF

Re: Oversampling av ADC på Arduino/AVR

Postat: 21 juni 2015, 00:40:52
av qx5
LHelge, Vad kostar discovery-kortet och var köper man det?

Re: Oversampling av ADC på Arduino/AVR

Postat: 21 juni 2015, 08:10:52
av superx
Tack för exemplet! Ser väldigt lovande ut.