Hallo Bascom Freunde,
Ich möchte AC-Strom per Stromwandler messen und den RMS Wert dann berechnen.
Die Wechselspannung vom Wandler gelangt per Spannungsteiler zum ADC des Arduino.
Stromwandler.png
Der ADC soll ja mit einer Taktrate zwischen 50 und 200kHz betrieben werden also
der Arduino läuft mit 16MHz geteilt durch 128 (Vorteiler) ergibt einen ADC Takt von 125kHz.
Im Datenblatt steht das eine Wandlung 13 ADC Takte dauert das wären 0,104ms für eine Wandlung.
Natürlich wollte ich meine Theoretischen Überlegungen mit einem kleinen Testprogramm überprüfen aber anstand der erwarteten 0,104ms komme ich auf (wert aus Variable T1 * 1/16Mhz) 0,226ms woher kommt dieser unterschied?
Ist der Ansatz die Messungen mit dem ADC im Singel Modus durchzuführen ok oder muss ich mit dem free runn Modus arbeiten?
Alles anzeigen
Ich möchte AC-Strom per Stromwandler messen und den RMS Wert dann berechnen.
Die Wechselspannung vom Wandler gelangt per Spannungsteiler zum ADC des Arduino.
Stromwandler.png
Der ADC soll ja mit einer Taktrate zwischen 50 und 200kHz betrieben werden also
der Arduino läuft mit 16MHz geteilt durch 128 (Vorteiler) ergibt einen ADC Takt von 125kHz.
Im Datenblatt steht das eine Wandlung 13 ADC Takte dauert das wären 0,104ms für eine Wandlung.
Natürlich wollte ich meine Theoretischen Überlegungen mit einem kleinen Testprogramm überprüfen aber anstand der erwarteten 0,104ms komme ich auf (wert aus Variable T1 * 1/16Mhz) 0,226ms woher kommt dieser unterschied?
Ist der Ansatz die Messungen mit dem ADC im Singel Modus durchzuführen ok oder muss ich mit dem free runn Modus arbeiten?
Quellcode
- Hallo Bascom Freunde,
- Ich möchte AC-Strom per Stromwandler messen und den RMS Wert dann berechnen.
- Die Wechselspannung vom Wandler gelangt per Spannungsteiler zum ADC des Arduino.
- Der ADC soll ja mit einer Taktrate zwischen 50 und 200kHz betrieben werden also
- der Arduino läuft mit 16MHz geteilt durch 128 (Vorteiler) ergibt einen ADC Takt von 125kHz.
- Im Datenblatt steht das eine Wandlung 13 ADC Takte dauert das wären 0,104ms für eine Wandlung.
- Natürlich wollte ich meine Theoretischen Überlegungen mit einem kleinen Testprogramm überprüfen aber anstand der erwarteten 0,104ms komme ich auf (wert aus Variable T1 * 1/16Mhz) 0,226ms woher kommt dieser unterschied?
- Ist der Ansatz die Messungen mit dem ADC im Singel Modus durchzuführen ok oder muss ich mit dem free runn Modus arbeiten?
- [tt]
- $regfile = "m328pdef.dat"
- $crystal = 16000000
- $hwstack = 64
- $swstack = 32
- $framesize = 32
- $baud = 9600
- '$sim
- Config Timer1 = Timer , Prescale = 1
- Enable Timer1
- Enable Interrupts
- Config Adc = Single , Prescaler = Auto , Reference = Avcc
- Start Adc
- Config Portb.5 = Output
- Led Alias Portb.5
- Declare Function Berechne_i(byval Adc_kanal As Byte) As Dword
- Dim T1 As Word
- Dim Wandler_nr As Byte
- Dim Ausgabe_i As Dword
- Dim Adc_wert As Dword
- Dim Offset As Dword
- Offset = 1024 / 2
- Wandler_nr = 0
- Do
- Wait 1
- Led = 1
- Ausgabe_i = Berechne_i(wandler_nr)
- Print "ADC-Wert " ; Ausgabe_i ; " Kanal " ; Wandler_nr
- Wait 1
- Led = 0
- Loop
- End
- Function Berechne_i(byval Adc_kanal As Byte) As Dword
- Timer1 = 0
- Adc_wert = Getadc(adc_kanal)
- T1 = Timer1
- Print T1
- Berechne_i = Adc_wert
- End Function