Das MicroPython-Programm ermöglicht die Aufnahme einer Sprungantwort auf Grundlage eines Sprungs von 0 auf 1 Volt, ausgegeben über einen DAC-Ausgang und eingelesen über einen ADC-Eingang des ESP32. Die Werte werden in einer csv-Datei abgespeichert. Es werden keine besonderen Maßnahmen für die Sicherstellung der Echtzeitfähigkeit durchgeführt. Die einzige Maßnahme ist die Berücksichtigung der Rechenzeit.
# Aufnahme Sprungantwort auf dem ESP32 WROOM Entwicklerbord
# Ohne besondere Massnahmen fuer exakte Echtzeit
# programmiert in microPython MIT-License, H.-W. Philippsen
import os
import machine
import time
pin = machine.Pin(2,machine.Pin.OUT) # LED-Pin
ana = machine.ADC(machine.Pin(32)) # Analoger Eingang
ana.atten(machine.ADC.ATTN_11DB) # Ausnutzung ges. Spannungsbereich
ana.width(machine.ADC.WIDTH_12BIT)
d=machine.DAC(machine.Pin(25)) # Analoger Ausgang
d.write(0) # analogen Ausgang auf null setzen
T0 = 0.1
delay = T0 - 0.008 # Rechenzeit von 8ms beruecksichtigen
#os.remove('elog1.txt')
logfile = open("elog1.txt", "w")
yk = 1.0
for i in range(100):
start = time.ticks_ms() # get millisecond counter
pin.value(not pin.value()) # LED blinken
d.write(int(yk*255/3.13))
x = ana.read()*3.6/4095 # noch kalibrieren
delta = time.ticks_diff(time.ticks_ms(), start) # compute time difference
print('T0 [ms] = ',delta,'x = ',x ,' y = ', yk )
s = str(T0*i) + '\t' + str(x) + '\t' + str(yk) + '\n'
logfile.write(s)
time.sleep(delay) # Warten
logfile.close() # Datei schliessen
pin.value(False) # Led ausschalten
d.write(0) # analogen Ausgang auf null setzen
# mit ampy -p com3 -d 2 get elog1.txt > elog1.txt hochladen
# disconnect nicht vergessen
# mit f1 = np.loadtxt('elog1.txt') unter Python in Numpy-Array wandeln
# plt.plot(f1[:,0],f1[:,1],f1[:,0],f1[:,2]) und plotten