Einstieg in die Regelungstechnik mit Python

Fachbuch von Hans-Werner Philippsen

Sprungantwort mit ESP32

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

Theme von Anders Norén