Hoofdstuk 4 Analoog & PWM
In voorgaande hoofdstukken hebben we geleerd dat een drukknopschakelaar twee standen heeft: ingedrukt (AAN) en losgelaten (UIT),
en een LED heeft een licht AAN- en UIT-stand. Is er een middelste of tussenliggende stand?
Vervolgens leren we hoe we een tussenliggende uitgangsstand creëren om een gedeeltelijk heldere (gedimde) LED te bereiken.
Laten we eerst leren hoe we de helderheid van een LED kunnen regelen.
Project 4.1 Breathing LED
We beschrijven dit project als een Breathing Light. Dit betekent dat een LED die UIT is, geleidelijk AAN gaat en vervolgens geleidelijk UIT gaat, net als bij “ademen”.
Oké, dus hoe regelen we de helderheid van een LED om een Breathing Light te creëren? We gebruiken PWM om dit doel te bereiken.
Componentenlijst

Componentenkennis
Analoog en digitaal
Een analoog signaal is een continu signaal in zowel tijd als waarde. Integendeel, een digitaal signaal of discreet tijdsignaal is een tijdreeks die bestaat uit een reeks grootheden. De meeste signalen in het leven zijn analoge signalen. A
Een bekend voorbeeld van een analoog signaal is hoe de temperatuur gedurende de dag continu is veranderend en kon niet plotseling onmiddellijk veranderen van 0℃ naar 10℃. Digitale signalen kunnen dat echter wel ogenblikkelijk in waarde veranderen.
Deze verandering wordt uitgedrukt in cijfers als 1 en 0 (de basis van binaire code).
Hun verschillen kunnen gemakkelijker worden gezien als ze worden vergeleken in de onderstaande grafiek.

Merk op dat de analoge signalen gebogen golven zijn en de digitale signalen “vierkante golven”.
In praktische toepassingen gebruiken we vaak binair als digitaal signaal, dat wil zeggen een reeks nullen en enen. Sinds een binair getal signaal heeft slechts twee waarden (0 of 1) en heeft een grote stabiliteit en betrouwbaarheid.
Tenslotte zowel analoge als digitale signalen kan worden omgezet in de andere.
PWM
PWM, Pulse-Width Modulation, is een zeer effectieve methode om digitale signalen te gebruiken om analoge circuits te besturen.
Digitale processors kunnen analoge signalen niet rechtstreeks uitvoeren. PWM-technologie maakt het erg gemakkelijk om dit te bereiken deze conversie (vertaling van digitale naar analoge signalen).
PWM-technologie maakt gebruik van digitale pinnen om bepaalde frequenties van vierkante golven te verzenden, dat wil zeggen de uitvoer van hoge golven niveaus en lage niveaus, die afwisselend een tijdje aanhouden.
De totale tijd voor elke set hoge en lage niveaus is over het algemeen vast, wat de periode wordt genoemd (Opmerking: het omgekeerde van de periode is frequentie). De tijd van hoog niveau-uitgangen worden over het algemeen “pulsbreedte” genoemd, en de duty-cycle is het percentage van de pulsverhouding duur of pulsbreedte (PW) tot de totale periode (T) van de golfvorm.
Hoe langer de uitvoer van hoge niveaus duurt, hoe langer de duty-cycle en hoe hoger de overeenkomstige spanning in het analoge signaal zal zijn.
Het volgende figuren laten zien hoe de analoge signaalspanningen variëren tussen 0V-5V (hoog niveau is 5V) overeenkomend met de puls breedte 0%-100%:

Hoe langer de PWM-dutycycle is, hoe hoger het uitgangsvermogen zal zijn.
Nu we dit begrijpen relatie kunnen we PWM gebruiken om de helderheid van een LED of de snelheid van de DC-motor enzovoort te regelen.
Uit het bovenstaande blijkt duidelijk dat PWM niet echt analoog is, maar dat de effectieve waarde van de spanning gelijkwaardig is naar de overeenkomstige analoge waarde.
Daarom kunnen we door PWM te gebruiken het uitgangsvermogen van een LED regelen en bedien andere apparaten en modules om meerdere effecten en acties te bereiken.
In RPi heeft de GPIO18-pin de mogelijkheid om via PWM naar hardware uit te voeren met een nauwkeurigheid van 10 bits. Dit betekent dat 100% van de pulsbreedte kan in 2 worden verdeeld 10=1024 gelijke delen.
De bedradingPi-bibliotheek van C biedt zowel een hardware-PWM- als een software-PWM-methode.
De hardware-PWM hoeft alleen maar te worden geconfigureerd, vereist geen CPU-bronnen en is nauwkeuriger in de tijd controle.
De software PWM vereist dat de CPU continu werkt door code te gebruiken voor uitvoer van hoog niveau en laag niveau.
Dit deel van de code wordt uitgevoerd door middel van multi-threading en de nauwkeurigheid is relatief niet hoog genoeg.
Om de resultaten consistent te houden, zullen we PWM gebruiken.

Code
Dit project gebruikt de PWM-uitvoer van de GPIO18-pin om de pulsbreedte geleidelijk te laten toenemen van 0% tot 100% en vervolgens geleidelijk verlagen van 100% naar 0% om de LED helderder en vervolgens zwakker te laten schijnen.
C Code 4.1.1 Ademhalings-LED
Observeer eerst het projectresultaat en leer vervolgens in detail over de code.
BreathingLED.py
Er zijn twee “for”-lussen die worden gebruikt om de ademhalings-LED te besturen in de volgende eindeloze “while”-lus. De eerste lus voert een voedingssignaal uit naar de led-PWM van 0% tot 100% en de tweede lus voert een voedingssignaal uit naar de leidde PWM van 100% naar 0%.
led.value vertegenwoordigt: de werkcyclus van het PWM-apparaat. 0.0 staat uit, 1.0 staat volledig aan. led.value ertussen kan zijn gespecificeerd voor verschillende energieniveaus in het apparaat
#!/usr/bin/env python3
########################################################################
# Filename : BreathingLED.py
# Description : Breathing LED
# Author : www.freenove.com
# modification: 2023/05/11
########################################################################
from gpiozero import PWMLED
import time
led = PWMLED(18 ,initial_value=0 ,frequency=1000)
def loop():
while True:
for b in range(0, 101, 1): # make the led brighter
led.value = b / 100.0 # set dc value as the duty cycle
time.sleep(0.01)
time.sleep(1)
for b in range(100, -1, -1): # make the led darker
led.value = b / 100.0 # set dc value as the duty cycle
time.sleep(0.01)
time.sleep(1)
def destroy():
led.close()
if __name__ == '__main__': # Program entrance
print ('Program is starting ... ')
try:
loop()
except KeyboardInterrupt: # Press ctrl-c to end the program.
destroy()
print("Ending program")