ADC 0Volt offset meten ter vergroting van meetbereik

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Seesar
  • Registratie: September 2002
  • Laatst online: 06-06 13:42

Seesar

Icon thnx to l0c4lh0st

Topicstarter
Ik ben bezig met een project waarbij ik een Hall sensor uitlees met een Arduino Mega

In mijn setup meet de hallsensor, bij een voeding van 5V, een minimale spanning van 1.7V en een maximale spanning van 3.2V.

Als ik dit uitmeet met de ADC op de arduino (10bits) dan heb ik dus ongeveer een meetbereik van 370bits t/m 680 bits.

Helaas is hiermee de resolutie niet precies genoeg voor mij en zijn er 2 oplossingen:

1 andere ADC (12+ bits) regelen, waar mijn voorkeur niet naar uit zou gaan omdat ik met Arduino wil blijven werken en ik geen geld en tijd wil uitgeven aan nieuwe printjes en ADC's.

2. de 0V offset creeeren; m.a.w. dat de 1.7V de 0 bit wordt en de 3.2V de 1024bit.

Ik kan natuurlijk Vref op 3.2V zetten (met een externe Vref op de Arduino) zodat de 3.2V ook mijn 1024e bitje is, maar hoe kan ik de 1.7V naar de 0bit zetten?

Een spanningsdeler heeft geen zin lijkt mij? Op een of andere manier Vref GND op 1.7V zetten? Kan ik dit op een andere manier offsetten? Softwarematig/hardware matig?

M.a.w. hoe zorg ik ervoor dat mijn meetbereik van 3.2-1.7V = 1.5V over de gehele 1024bit word uitgelezen, met als grootste vraag; hoe zet ik de 1.7V als het 'nulpunt'.

T60P Widescreen


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 28-09 14:11
Re-mappen misschien ?
http://arduino.cc/en/reference/map

Acties:
  • 0 Henk 'm!

  • WVL_KsZeN
  • Registratie: Oktober 2002
  • Laatst online: 17:38
Daar win je geen resolutie mee, dat is alleen een wiskundige operatie om de meetdata anders uit te smeren. Je moet het in hardware oplossen als je alle resolutie wil.

/me heeft eindelijk ook een icoontje.. woef.. boeien..


Acties:
  • 0 Henk 'm!

  • mux
  • Registratie: Januari 2007
  • Laatst online: 07-10 08:43

mux

99% efficient!

Dit kan niet met ATMega's. De aangewezen methode is namelijk om differentieel te meten en dan x2 gain erachteraan te gooien. Helaas is bij de ATMega2560 alleen een x10 en x200 gain beschikbaar, niet x2.

Hoeveel samples per seconde heb je nodig? Je kunt ook veel vaker samplen en op die manier effectief je resolutie vergroten. Als je bijvoorbeeld 2^6 keer (=64 keer) meet met een 10-bit ADC heb je effectief een 16-bit ADC gemaakt.

Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 22:40

memphis

48k was toen meer dan genoeg.

De hall sensor voeden via een andere voeding waarmee je een nieuwe virtuele massa op 1.7v kan zetten?
Of via een een negatieve spanning op zijn massa op -1.7v zetten.

Dan kan je via een opamp via een factor 3 versterking het volledige bereik richting de 5 volt brengen.

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • Seesar
  • Registratie: September 2002
  • Laatst online: 06-06 13:42

Seesar

Icon thnx to l0c4lh0st

Topicstarter
Dit kan niet met ATMega's. De aangewezen methode is namelijk om differentieel te meten en dan x2 gain erachteraan te gooien. Helaas is bij de ATMega2560 alleen een x10 en x200 gain beschikbaar, niet x2.

Hoeveel samples per seconde heb je nodig? Je kunt ook veel vaker samplen en op die manier effectief je resolutie vergroten. Als je bijvoorbeeld 2^6 keer (=64 keer) meet met een 10-bit ADC heb je effectief een 16-bit ADC gemaakt.
het aantal samples per seconde hoeft niet meer dan 10 te zijn, hoewel 100hz fijn zou zijn), maar ik zie dan nog niet helemaal hoe ik hiermee de resolutie vergroot.

Ik heb al geprobeerd om bijv een gemiddelde uit te rekenen; dus 10maal meten en dan delen door tien, dan krijg ik uiteraard een bit-getal met een decimale afronding.

Het klinkt interessant, maar hoe zie je dat voor je?
memphis schreef op woensdag 28 mei 2014 @ 16:41:
De hall sensor voeden via een andere voeding waarmee je een nieuwe virtuele massa op 1.7v kan zetten?
Of via een een negatieve spanning op zijn massa op -1.7v zetten.

Dan kan je via een opamp via een factor 3 versterking het volledige bereik richting de 5 volt brengen.
welke virtuele massa wil je op 1.7V zetten? Die van de Arduino's ADC of die van de Hall Sensor?

Een negatieve spanning heb ik nog niet over nagedacht, dat is opzich wel een idee. geen idee echter of de Hallsensor dan wel werkt eigenlijk, want wat zet ik dan op de Vcc, 3.3V?

T60P Widescreen


Acties:
  • 0 Henk 'm!

  • Infant
  • Registratie: Januari 2008
  • Laatst online: 07-10 21:10

Infant

It's a floating Dino!

mux schreef op woensdag 28 mei 2014 @ 16:19:
Hoeveel samples per seconde heb je nodig? Je kunt ook veel vaker samplen en op die manier effectief je resolutie vergroten. Als je bijvoorbeeld 2^6 keer (=64 keer) meet met een 10-bit ADC heb je effectief een 16-bit ADC gemaakt.
64x 10-bit samples leveren effectief 13-bits op.

Afhankelijk van de bandbreedte die je nodig hebt, is over samplen vaak het goedkoopst en ook het eenvoudigst.

Extern zou je het met een differentiële-opamp op kunnen lossen. Je kunt dan een externe voltage reference van 1.7V maken, en als min input gebruiken, en de output van je hall sensor als positieve input.

Acties:
  • 0 Henk 'm!

  • Infant
  • Registratie: Januari 2008
  • Laatst online: 07-10 21:10

Infant

It's a floating Dino!

10 keer meten is natuurlijk onhandig:
C:
1
2
3
4
5
6
7
uint32_t oversamples = 0;
uint16_t sample;
uint8_t i=0;
while(--i){
    oversamples += adc_get10bitsample();
}
sample  = (uint16_t)((uint32_t)oversample >> 8UL);


Met 256 samples zou je 14-bits hebben. (Deze telt maar tot 255 maar goed...)

[ Voor 7% gewijzigd door Infant op 28-05-2014 21:36 ]


Acties:
  • 0 Henk 'm!

  • memphis
  • Registratie: Oktober 2000
  • Laatst online: 22:40

memphis

48k was toen meer dan genoeg.

Seesar schreef op woensdag 28 mei 2014 @ 17:11:

Een negatieve spanning heb ik nog niet over nagedacht, dat is opzich wel een idee. geen idee echter of de Hallsensor dan wel werkt eigenlijk, want wat zet ik dan op de Vcc, 3.3V?
Als het om een 5v apparaat gaat inderdaad dan de + op 3.3v

Er zijn mensen die mij een GOD vinden


Acties:
  • 0 Henk 'm!

  • kitao
  • Registratie: Juli 2012
  • Laatst online: 28-09 14:11
WVL_KsZeN schreef op woensdag 28 mei 2014 @ 16:13:
Daar win je geen resolutie mee, dat is alleen een wiskundige operatie om de meetdata anders uit te smeren. Je moet het in hardware oplossen als je alle resolutie wil.
Ik vermoedde al zoiets.
Ik kwam dit tegen toen ik zocht op oversampling adc na Infants' post. Heb het doorgelezen maar ik ga niet beweren dat ik het begrijp. Zitten wel paar voorbeelden bij van Atmel zelf, kan misschien van pas zijn voor iemand die daar meer achtergrond in heeft.
http://www.atmel.com/images/doc8003.pdf

Acties:
  • 0 Henk 'm!

  • Ploink
  • Registratie: April 2002
  • Laatst online: 21-08 13:05
Infant schreef op woensdag 28 mei 2014 @ 17:12:
[...]


64x 10-bit samples leveren effectief 13-bits op.

Afhankelijk van de bandbreedte die je nodig hebt, is over samplen vaak het goedkoopst en ook het eenvoudigst.
Het idee van samples uitmiddelen trekt de hele vraagstelling in twijfel.

Om de methode te laten werken moet er voldoende ruis in het signaal zitten, anders meet je geen variatie die je kan uitmiddelen. Maar als er ruis in het signaal zit, dan heeft verhogen van de hardware ADC resolutie geen zin, dat voegt alleen maar random bits toe!

Dus:
Als er al ruis in de ADC conversies zit, ga dan uitmiddelen.
Als er geen ruis in zit, verbeter de ADC resolutie in hardware of voeg ruis toe en ga uitmiddelen.
Als er teveel ruis in zit, filter het signaal met een R/C filter aan de ingang van de ADC, zo dicht mogelijk bij de MCU. Zorg ook voor een stabiele referentie. Sowieso is het altijd goed om hoogfrequente storing voor een ADC te ontkoppelen.

AVR121: Enhancing ADC resolution by oversampling (pdf)
@Kitao: Oh die had je al gevonden ;)

Acties:
  • 0 Henk 'm!

  • pjr557
  • Registratie: Maart 2003
  • Laatst online: 25-08-2021
Je kan ook de interne voltage reference van 1.1V of 2.56 volt gebruiken van de atmega met een spanningsdeler.
Zie: http://arduino.cc/en/Reference/AnalogReference

Acties:
  • 0 Henk 'm!

  • Infant
  • Registratie: Januari 2008
  • Laatst online: 07-10 21:10

Infant

It's a floating Dino!

Dat lost zijn vraag niet op, wat zo creëer je geen offset wat hij om vraagt.
Een spanningsdeler introduceert verder extra onnauwkeurigheid, om het maar niet te hebben over de 1V1 referentie die op een goede dag 10% nauwkeurig is.

Acties:
  • 0 Henk 'm!

  • SA007
  • Registratie: Oktober 2002
  • Laatst online: 06-10 16:32

SA007

Moderator Tweaking
Ik kan een paar opties bedenken:
- De HALL GND op een negatieve spanning gooien.
- De GND van de atmel op +1.7V gooien (waarschijnlijk niet mogelijk door de rest van het schema)
- 1.7V drop op de adc spanning gooien (met een precisie zener bijvoorbeeld)
- Een opamp gebruiken om een -1.7V offset op je signaal te gooien.

Ik zou zelf voor optie 1 of 3 gaan, maar beide hangt de nauwkeurigheid sterk af van de gebruikte componenten.
3 is lekker simpel, gewoon een paar componenten erbij (een zenerdiode en een weerstand zodat er altijd stroom door de zener loopt).
Ik zou dan geen 1.7V zener pakken, maar bijv 1.5V zodat je een stroom kan genereren door de zener heen, anders is die niet stabiel.
Pagina: 1