Digitala multimetern shield för Arduino (17 / 17 steg)
Steg 17: Trimma ohmmeter
Hur trimma ohmmeter kommer jag att visa för spänna 1000 Ohm. Samma metod används för övriga utbud.
Innan du använder programvaran måste putsning några ytterligare mätning göras.
- Spänningsfallet över Zener dioden D2.
- För att ha stabila ström har jag ändrat den följande raden i huvudprogrammet (loop ()): digitalWrite (curr_mode, låg---> hög); - på detta sätt kan jag hålla nuvarande stabila och att mäta det under Välkommen förfarandet. Den ström som passerar från PNP/PMOS samlare/avloppet terminal marken bör mätas (bild 1)
- Den samma nuvarande mäts igen men med seriellt anslutna motståndet av 1KOhm (max för spänna) - bild 2. Spänningen över resistorn mäts också.
Jag har mätt 2,5 mA i den första och 2,48 mA i andra mätningar. Mitt motstånd var 997 Ohm.
Nu måste vi behandla uppgifterna som ingick i urvalet. För att kunna göra detta behöver vi också beräkna Vce/Vds - spänningsfallet över transistorn för bot fall.
Denna spänning - för enkelhetens skull jag kommer att skriva Vce beräknas med följande formel:
Vce = Vsupply - Vzener - Vr, där
Vsupply är den uppmätta matningsspänningen av "Arduino" styrelsen;
Vzener - spänningsfallet över D2 (mätt vid steg 1 ovan);
Vr - spänningen över resistorn - uppmätt i steg 3. För först är fallet 0 V.
Den beräknade Vce och motsvarande strömmarna fylls i excel-fil. (bild 3). Grafen är gjort, och trendlinjen motsvarar datumet visas (rak linje). Ekvationen för trendlinjen visas - det kommer att användas för beräkningarna.
I mitt fall Ir = is = 0.0081 * Vce + 2.4773 -med denna formel kan vi beräkna alltid aktuella is flöda genom uppmätta motstånd och även funktion av spänningen över resistorn, som ingår i urvalet av ADC. Här tas det antagande, att beroende av isen för Vce är linjär, vad är ofta fallet.
Slutligen beräkna vi motståndet med Ohm formeln:
R = Vr / Ir
här är hur den modifierade koden ser ut:
.......
flyta V_zener = 2.16;
flyta Vr = 0;
flyta Vce = 0;
flyta is = 0;
flyta coeff_v100 = 1,01;
flyta coeff_v30 = 1.011;
flyta coeff_v10 = 1.018;
flyta coeff_A_gain = 0.992174;
flyta coeff_A_res = 0.98315;
flyta opamp_offset = 0.000767;
volatile osignerade långa last_millis = 0;
void R_1000() {
digitalWrite (curr_mode, hög);
Delay(20);
LCD.Clear();
LCD.Print ("Ohmmeter R = < 1000");
Serial.println ("* Ohmmeter läge - intervallet 0 - 1000 Ohm *");
lcd.setCursor (0, 1);
acc_value = 0;
för (int jag = 0; jag < = 15; i ++)
{curr_value = analogRead(A2);
acc_value = acc_value + curr_value; }
curr_value = int(acc_value/16);
om (curr_value > = 513) {meas_overflow();}
annat {Vr = (curr_value * leverera) / 1024;
VCE = leverans - V_zener - Vr; Is = 0.0081 * Vce + 2.4773;
disp_res = Vr / is * 1000;
LCD.Print ("R =");
LCD.Print (disp_res, 1);
LCD.Print ("Ohm");
Serial.Print ("* R =");
Serial.Print (disp_res, 1);
Serial.println ("Ohm");
Delay(250); }
}
Som avslutning:
Den presenterade multimeter är utformad på enklaste sätt, försöker bädda in så mycket uppgifter som möjligt. Detta tillvägagångssätt ger vissa oönskade funktioner - input motståndet är mycket låg, jämfört med standard tyget DMM är lägre. Skälen till detta är:
matchningen av diskreta element (främst motstånd);
inte tillräckligt riktigheten av mikrokontroller ADC - det är 10 bit, men gör fel för 3-4 LSB;
digital buller som påverkar de analoga mätningarna.
inte bra fast matningsspänningen (det kan variera när DMM är ansluten till olika datorer), som fungerar som spänning referens för att ADC omvandlare;
... osv.
Trots alla nackdelar, visat i detta arbete, hur använda programvara tricks, riktigheten av sådan anordning kan vara drastiskt ökad - start med flera ADC avläsningar, deras genomsnitt och alla ytterligare programvara trimning. Jag tror att liknande projekt skulle vara intressant för studenter som är villig att få djupa inuti data mätning och behandling teori. Den kan användas också som DMM ersättning för hem elektroniska projekt, vilket net kräver mer komplicerade mätverktyg.
Tack för uppmärksamheten!