Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Henry »

Ännu en vakuumsensor men denna gång enbart analog utgång.

Mätvärdet är 1000 Torr till ev 0.000 eller bara 0 Torr representerat från sensorn med 10 till (tror jag) 0.000V linjärt, så det får förstås först delas ned till 0 - 5V och sedan i Arduinon multipliceras med 2 för att få ut rätt.

Problemet med Arduinon som jag nu förstått är att den bara bara använder 10-bit A/D men 1023 steg vilket ju då inte fungerar eftersom det inte är jämt delbart. Är det således kört eller finns det genvägar?

Jag hade gärna velat ha de tre decimalerna men är det omöjligt så skiter jag i det och använder bara mellan 1000 och 0 men problem kvarstår ju pga 10-bit.


Är förstås ute efter att varje steg i 10-bit upplösningen motsvarar mätvärdet med 1 Torr/steg på displayen, jag skall använda detta värde direkt för reglergrejer så det är viktigt att tex 500 Torr är 500 Torr och 1 Torr är 1 Torr osv.

Det blir ju dock lite fel pga att det delas upp i 1023 delar.

Nedan kod ger ändock märkligt nog 10.00 med 5V in (skulle väl då bli 10.23?) och 0.00 med 0V in, jag vill inte ha det med decimaler men förstår inte hur det tas bort.

Med 3.3V in ger det sedan 6.65V skiftandes mellan 6.63 - 6.65 vilket inte är acceptabelt, dock kanske bara lite avskärmning som krävs då det är en lite lång sladd som är kopplad, men jag undrar för jag tror inte det är så pass mycket brus på 3.3V linjen på kortet.

Jag måste förstås kunna lita på att den visar rätt.

Kod: Markera allt

#include <LiquidCrystal.h>

LiquidCrystal lcd(40, 42, 28, 26, 24, 22);

void setup() {

  lcd.begin(20, 4);
  lcd.clear();
  lcd.print("Vacuum:      Torr");

}

void loop() {

  lcd.setCursor(8, 0);
  int sensorValue = analogRead(A0);
  float voltage = sensorValue * (5.0/1023*2);
  lcd.print(voltage);
  delay(500);
}
Borre
Inlägg: 4570
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Borre »

Du måste ju räkna med att det börjar på 0, så 0 till 1023 är 1024.
kodar-holger
EF Sponsor
Inlägg: 920
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av kodar-holger »

Hur stabil är spänningen på Vref? Hur mycket brusar A/Dn? Jag tror inte du kommer få ut 10 bitar med en enskild avläsning även om det är 10 bitar i hårdvaran.

Om vi bortser från i vilken ordning de matematiska operationerna verkligen görs så kan vi betrakta det du gjort så här:

I programvaran delar du avläst värde med 1023 så att du får ett värde mellan 0 och 1 som motsvarar hela inspänningsintervallet (0-Vref) på A/D-omvandlaren. Att det är just ett visst antal steg spelar ingen roll när du har en skalfaktor så här som motsvarar A/D-omvandlarens upplösning. Fast det borde förmodligen stå 1024...

Värdet som är mellan 0 och 1 multiplicerar du sedan med 5.0 och sen 2 till för att få ett totalt omfång på 0-10.

Att det skall vara 1024 istället för 1023 baserar jag på att omvandlarna brukar ge värden mellan 0 och 2^n där 2^n ges redan för en inspänning på Vref*2^n-1/2^n. Aka du förlorar sista steget. Kolla hur en flash-omvandlare är konstruerad så är det nog lättare att förstå vad jag menar.

Vill du förbättra upplösningen får du lågpassfiltrera. Men det förutsätter att bruset från omvandlaren (och insignalen) har en fördelning som hjälper dig på traven.

Om du vill använda exakt 1000 steg får du väl se till att din spänningsdelare som du ändå måste ha externt inte delar med två utan med något lite mer än två. Typ 2,048.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Henry »

Spänningen på Vref är samma spänning som allt matas med som standard och det är avkopplat lite här och var så jag utgick ifrån att den skulle vara hyfsat ok, men eftersom värdet fladdrar så skall jag kolla upp det lite närmre senare med oscilloskop. Det är också kopplat till datorn så ju visserligen inte så konstigt om det inte skulle vara rent.

Har innan tittat på att pilla med Vref och Arduinon har också en intern ref på 2.54V men den var inte så värst stabil vad det verkade men kan kanske gå att få till, så blir det kanske ett lite bättre värde att arbeta med.

Med 1024 blir inte 5V in 10.00 utan 9.99 så det är kanske några interna grejer som är orsaken, 1023 visar rätt.

Har kollat runt en del mer nu och det hela är inte så värst noggrant som jag hoppades på utan det krävs lite extra vid sidan om för att få det hyfsat och tog även en titt i databladet och A/D omvandlaren har en precision på +-2 LSB vilket också är ungefär vad jag ser.

Men ok då har jag nog lite mer koll, dock detta med decimaltecknet vill jag ha bort men att tex lägga värdet i en array och bara ta de delar jag är ute efter känns överdrivet, borde väl rimligtvis gå att göra enklare. Float vill ju ha input i decimalform och således ut i decimalform så där finns väl kanske inte så mycket att göra.
Användarvisningsbild
Jan Almqvist
Inlägg: 1580
Blev medlem: 1 oktober 2013, 20:48:26
Ort: Orust

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Jan Almqvist »

Jag tror nog att det ska vara 1023. Det är visserligen 1024 olika värden men det högsta är 1023.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Henry »

Ja, jag har också sett att många andra skriver det och det vart något konstigt med det har jag för mig så jag håller med. Kanske använder 0 som en bit eller nåt.
Användarvisningsbild
ffredrik
Inlägg: 341
Blev medlem: 20 oktober 2009, 17:52:18
Ort: Göinge

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av ffredrik »

Jan A har rätt, lägsta värdet = 0, högsta = 1023 eller 0x3FF, dvs det högsta möjliga värdet med 10 bitar.
Borre
Inlägg: 4570
Blev medlem: 14 juni 2007, 15:43:50
Ort: Hälsingland

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Borre »

Henry skrev:Kanske använder 0 som en bit eller nåt.
Det var ju det jag skrev, börjar med 0.
Det är standard oavsett antal bitar, och har inget specifikt med Arduino att göra.

Med decimalerna, menar du att den inte alls ska visas?
Fungerar:

Kod: Markera allt

lcd.print(voltage,  0);
kodar-holger
EF Sponsor
Inlägg: 920
Blev medlem: 26 maj 2014, 12:54:35
Ort: Karlskoga

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av kodar-holger »

Jag vill fortfarande påstå att det skall vara 1024.

Enligt databladet, kapitel 24.7, sidan 247 (sammanträffande...)

ADC = Vin * 1024 / Vref.

Om Vin = VRef skulle alltså resultatet bli 1024 vilket inte kan representeras. Den högsta Vin som kan konverteras korrekt är alltså

Vref * 1023/1024.

Så för att få fram vilken spänning man har på Vin stuvar man om så att Vin = ADC * Vref/1024

Det står för övrigt i 24.1 att absolute accuracy är +-2 LSB så bättre än så blir nog svårt att åstadkomma.
limpan4all
Inlägg: 8208
Blev medlem: 15 april 2006, 18:57:29
Ort: Typ Nyköping

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av limpan4all »

Och med lite "verklighet" inblandad så har du minst +-2LSB i brus...
OM du får bra och korrekta 8 bitarsvärden så har du jobbat bra från en 10 bitars A/D...
Enda sättet runt det hela är att utnyttja bruset med hjälp av massiv översampling och sedan decimering i mjukvara.
Grovt sett så kan du räkna med 8 bitar som bas och för varje 4ggr du höjer samplingen samt medelvärdesbildar så "får" du en bit till (om du har vitt brus (helt slumpmässigt)).
Så med 16ggr översampling så skulle du ha 10 bitar igen. 64ggr 11 bitar, 256ggr 12 bitar osv.
Bruset minskar också, så det är bara fördelar för signalbehandlingen.
Ett problem bort, och högre noggrannhet = Win-Win.

Nja nästan, det kostar beräkningskraft...
Se https://en.wikipedia.org/wiki/Oversampling
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Andax »

En annan viktig sak när man börjar titta på hög upplösning är att det inte är samma sak som hög noggrannhet. Viktigare än att avgöra om du ska dividera med 1023 eller 1024 är hur du kan ta fram en kalibreringstabell eller i alla fall kompensera för eventuella effekter pga utimpedans från sensorn och inimpedansen i ADC mm.
Dessa felkällor kan vara mycket större än ett litet skalfaktorfel....
Användarvisningsbild
Klas-Kenny
Inlägg: 11328
Blev medlem: 17 maj 2010, 19:06:14
Ort: Växjö/Alvesta

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Klas-Kenny »

Jan Almqvist skrev:Jag tror nog att det ska vara 1023. Det är visserligen 1024 olika värden men det högsta är 1023.
Det är förvisso sant, men det är fortfarande bättre med 1024.

Den här forumtråden beskriver det hela ganska väl:
http://www.electro-tech-online.com/thre ... ng.132570/
Användarvisningsbild
Icecap
Inlägg: 26139
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Icecap »

Högsta möjliga värdet som en 10-bit A/D-omvandlare kan ge ut är ju 0x3FF = 1023 decimalt. Detta motsvara då Vref och det rör sig om 1024 steg totalt.

Så vid skalning är 1024 den rätta skalningsfaktor.
Användarvisningsbild
Andax
Inlägg: 4373
Blev medlem: 4 juli 2005, 23:27:38
Ort: Jönköping

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Andax »

Som jag skrev tidigare så är det skalfaktorfelet troligtvis en piss i Nilen mot andra felkällor. Tips glöm 1023 eller 1024, och ta istället fram en metod att kalibrera din uppkoppling. Den skalfaktor du får fram då är mycket mer relevant då den ger dig direkt mappningen mellan den storhet du vill mäta (tryck i det här fallet) och digitala värden ut från ADC.
Användarvisningsbild
Henry
Inlägg: 23613
Blev medlem: 20 april 2005, 02:52:47
Ort: Lund

Re: Sensor analog spänning, 10-bit A/D = fel spänning, m.m.

Inlägg av Henry »

Trodde/hoppades i min enfald att adc:n skulle vara mer eller mindre direkt i funktion med tex en ICL7106, men man kan alltid hoppas på mycket.

Kollade databladet på 2560 adc efter senaste inlägget och visst +-2 LSB så det jag ser är väl det jag får.

En onogrannhet på 2 siffror kan väl gå då men det är lite problem med fladdrandet av siffrorna vilket kunnat få systemet att flippa ut lite sedan, fast det går väl kanske att få ihop något i mjukvara så det funkar hyfsat.

Tänkt innan även att pilla med Vref för skalningen är nog inte helt ok för det visar rätt vid max och 0V men lite fel redan vid 3.3V, så får kolla upp detta.

Angående decimaler sedan så är det inte decimalerna jag vill ha bort för de innehåller betydande information utan det är själva decimaltecknet i sig jag vill ha bort så att alla siffror står efter varandra. Då representerar dessa direkt mätarens värde så som det kommer ut från den.
Skriv svar