Einstieg in die Regelungstechnik mit Python

Fachbuch von Hans-Werner Philippsen

Funktionsgeneratoren

MicroPython bietet die Möglichkeit elementare technische Signale auf einem DAC-Kanal auszugeben. Das Pyboard d verfügt über zwei 12 Bit Digital-Analog-Wandler, wobei microPython noch die Methoden PWM, triangle und noise bereitstellt. Das nachfolgende Beispiel zeigt die Erzeugung eines PWM-Signals mit konstanter Frequenz von 1000 Hz und variablen Duty-Faktor sowie Ausgabe auf Pin X1.

# PWM für LED PYBOARD und L293d
# The MIT License (MIT)
# Copyright (c) 2019 Hans - Werner Philippsen

from time import sleep
from pyb import Pin, Timer

p = Pin('X1') # X1 has TIM2, CH1
tim = Timer(2, freq=1000)
ch = tim.channel(1, Timer.PWM, pin=p)
ch.pulse_width_percent(50)

EN = machine.Pin('X5',Pin.OUT)
EN.value(1) # enable-pin ein
# LED-Helligkeit
k = 100
try:
    while True:
        for i in range(k):
            print('Duty-Faktor in %',i)
            ch.pulse_width_percent(i)
            sleep(0.02)

finally:
  EN.value(0)

Ein Dreiecksignal mit der Frequenz von 100 Hz kann direkt aus der Konsole mit den Befehlen

from pyb import DAC
d = DAC(‘X6‘, bits=12) 
d.triangle(204800) 

erzeugt werden.

Dreieck

Das Argument der triangle-Funktion ist die Änderungsrate des Signals. Die Frequenz des Dreiecks ist 2048-fach kleiner. Das Signal hat einen Offset von 0,216 V und eine Amplitude 0,833 V.

Die DAC-Ausgänge können sinusförmige Spannungen bis ca. 70kHz erzeugen, jedoch sind leichte Verformungen des Signals schon ab 1kHz sichtbar. Der online Dokumentation von MicroPython kann man das folgende Programm entnehmen.

import math
from array import array
from pyb import DAC

# create a buffer containing a sine-wave, using half-word samples
buf = array('H', 2048 + int(2047 * math.sin(2 * math.pi * i / 128)) for i in range(128))

# output the sine-wave at 400Hz
dac = DAC('X6', bits=12)
dac.write_timed(buf, 400 * len(buf), mode=DAC.CIRCULAR)

Zunächst wird ein Array mit dem Typ unsigned short (H) erzeugt und mit Werten der Sinusfunktion gefüllt. Nach Zuweisung des Pins und der Datenbreite wird der Buffer in einer Endlosschleife auf dac zyklisch mit 400 Hz ausgegeben.

Theme von Anders Norén