Digitala multimetern shield för Arduino (16 / 17 steg)
Steg 16: Programvara trimning av noggrannhet (del 2)
Låt oss trimma ampere mätaren.
Voltmeter trimning var lätt - felet berodde bara spridningen av motstånd värdena i spänning avdelare.
I ampere mätaren är fel källor främst:
- resistor spridningen av R1 (se bilden i steg 4). Dess värde är 1 ohms, och det exakta värdet av används enheten är svårt att mäta exakt
- det spänning vinsten på opamp - orsakas främst av resistorer R2 och R3 värdena sprida
- Förskjutning av opamp Voffset. Som tidigare nämnts LM358 inte är det bästa valet för detta projekt (jag hade en tillgänglig och jag har använt den. Det är anledningen till varför PCB stöder också SO08 paketet - inte ofta används i vår tid). I databladet för chipet kan ses att förskjutningen kan vara 7 mV. Med vår nuvarande spänning överföringen lösning, kan detta medföra en konstant nuvarande oriktig 7mA. Det kan hända att ingen ström passerar, men ampere mätaren visar 7mA, och vice versa: en ström av 7 mA kan flöda och enheten kan visa 0 mA.
Alla dessa fel måste rensas av programvaran.
Som första steg måste vi fastställa det exakta värdet på motståndet R1. För detta ändamål använde jag en konstant nuvarande generator.
Jag har ansökt 189.9 mA input ström och jag har mätt 186,7 mV på motståndet R1. Dess värde beräknas vara 0.98315 Ohm. Detta nummer används också som korrigeringskoefficient.
Nu återstår två andra parameter, som måste beräknas / mätt: verklig spänning vinst på opamp och dess offset voltage.
Att fastställa dem. vi måste göra två separata mätningar på två olika strömmar. Måtten är: vi fixa strömmen genom den nuvarande generatorn och vi mäta det en gång med den standard DMM och en gång med "Arduino" baserade DMM. Spänningen på R1 mäts också under denna procedur. Här är resultaten som jag hade:
Tillämpad nuvarande uppmätta aktuell spänning över R1
(standard DMM) "Arduino" DMM (standard DMM)
[mA] [mA] [mV]
189.9 186 186,7
73,1 71.9 71,7
Opamp offset spänningen läggas till spänningsfallet över R1, och den resulterande potentialen är förstärkt 10 (korrigeras med koefficienten som vinst fel) och slutligen omvandlas genom ADC.
Denna process kan modelleras med följande ekvation:
(VR1+ Voffset) * coeff_A_gain = jagmultilaterala miljöavtalen;
var:
VR1 - är spänningen över R1;
Voffset - input opamp kompensera spänning;
coeff_A_gain - vinst fel koefficient, har i detta fall enheten för Siemens [S];
jagmultilaterala miljöavtalen - mätt med "Arduino" DMM nuvarande
Baserat på denna ekvation och den uppmätta data, kan ersätta Vkompenserasmed "x" ochcoeff_A_gain med "y" ett system av två ekvationer och två okända variabler skrivas:
(186,7 + x) * y = 186
(71,7 + x) * y = 71,9
186.7y + xy = 186
71,7 y + xy = 71,9; extrahera från först andra ekvationen
115y = 114.1
y = 0.992174 - vinst felet orsakas av motstånd värde spridningen av vinsten som definierar motstånd R2, R3
X = 0.767 mV - input förskjutningen av opamp (inte så dåligt...)
Den final koden för ampere mätaren nu har följande definitioner:
flyta coeff_A_gain = 0.992174;
flyta coeff_A_res = 0.98315;
flyta opamp_offset = 0.000767;
Beräkningen av nuvarande kan göras med följande ekvation:
disp_res = (((curr_value*supply)/1024 - 10 * opamp_offset) / coeff_A_gain) / coeff_A_res * 100;
(se steg 14 ytterligare information)