Elektrisk effektvariation via Raspberry
resumé
Arbejdsprincip
Pulsbreddemodulation er en teknik, der almindeligvis bruges til at syntetisere kontinuerlige signaler ved hjælp af on/off-kredsløb. Det generelle princip er, at ved at anvende en række af impulser (skift fra tilstand 0 til 1) i velvalgte varigheder, kan en hvilken som helst mellemværdi opnås i gennemsnit over en vis periode.
Dette princip er baseret på to parametre:
-
Frekvens (periode)
-
Duty cycle
frekvensen (eller periode) er antallet af gange pr. sekund, pulsen genereres. Dette tælles mellem tidspunktet for starten af en puls og starten af den næste. Frekvensenheden er Hertz (Hz). Hertz er et hjerteslag i sekundet. For eksempel svarer 50 Hz til 50 impulser på et sekund, hvilket giver en impuls hvert 0.02 sekund.
Duty cycle er den procentdel af tid, signalet er i position 1 under cyklussen.
For eksempel betyder en frekvens på 50 Hz og en arbejdscyklus på 50 %, at signalet hvert 0.02 sekund vil være på 1 (høj) i halvdelen af tiden og på 0 (LAV) i den anden halvdel.
50 Hertz og 50% cyklus
For en frekvens på 50 Hz og en arbejdscyklus på 80 % vil signalet være på 1 (HØJ) i 80 % af cyklustiden på 0.02 sekunder.
50 Hertz og 80% cyklus
Test med en LED
Tja, teorien er cool, men det sjoveste er øvelsen! Til en første test skal du bruge en LED og en 10 Ohm modstand for at beskytte sidstnævnte. Den maksimale strøm for en GPIO-pin på en Raspberry overstiger ikke 16 mA. På langt de fleste LED'er er den understøttede strøm 20 mA. Modstand burde derfor ikke være nødvendigt, men det beskytter alligevel. Op til dig. Beregningsformlen er som følger (hvis du har dokumentation for din LED).
Modstand = (Forsyningsspænding - LED-spænding) / Max LED-strøm
Kredsløbet er som følger:
For resten antager jeg, at du har installeret python-biblioteket, der tillader kontrol af GPIO-porte. Hvis dette ikke er tilfældet, henviser jeg dig til denne artikel.
Blinker af en LED
Vi starter med et simpelt blink af LED'en. Følgende kode tillader LED'en at blinke i 50 % af tiden i hver periode. Perioderne varer 0.5 Hz, altså en periode hvert 2. sekund. Kommentarerne skal være tilstrækkelige til at forstå koden.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
#!/usr/bin/env python
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
#0.5 Hz = 1 fois toutes les deux secondes
p = GPIO.PWM(4, 0.5)
# cycle = 50%
p.start(50)
# une touche pour quitter le programme.
input(‘Appuyez sur une touche pour stopper’)
# La fonction input est bloquante. Si on arrive ici alors on peut fermer le programme
p.stop()
GPIO.cleanup()
|
Blink af en LED med variation af intensitet
I det følgende eksempel vil vi få LED'en til at blinke, men denne gang ved at kontrollere dens intensitetsniveau takket være cyklusrapporten.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(4, GPIO.OUT)
# creation d’un objet PWM. canal=4 frequence=50Hz
LED = GPIO.PWM(4, 50)
# demarrage du PWM avec un cycle a 0 (LED off)
LED.start(0)
# On fait varier le rapport cyclique de 0 a 100 puis de 100 a 0
try:
while 1:
for dc in range(0, 101, 1):
LED.ChangeDutyCycle(dc)
time.sleep(0.01)
for dc in range(100, –1, –1):
LED.ChangeDutyCycle(dc)
time.sleep(0.01)
except KeyboardInterrupt:
pass
p.stop()
GPIO.cleanup()
|
Hastighedsvariation af en motor via Raspberry
Rapsberry's GPIO-porte sender kun et 3,3V-signal.Så hvordan varierer man effekten af en belastning, der kræver meget mere end 3,3V, såsom en motor? Til det skal vi bruge en komponent, der fungerer som en interruptor, som man kalder MOSFET. En MOSFET er en elektronisk komponent, der bruges til at udføre strømstyring. Funktionsprincippet for denne type transistor er, at når portens spænding når en tilstrækkelig værdi, strømmer strømmen mellem afløbet og kilden. Nogle transistorer er strømstyrede, Mosfet'en er spændingsstyret.
-
1 = G = GATE: styrestift. Kommandoen her vil være GPIO-porten.
-
2 = D = DRAIN: pin som dræner strømmen (belastningen hvad ... det er her vi vil tilslutte vores motor)
-
3 = S = KILDE: strømkildepin (hvor strømmen opsamles for at blive sendt til belastningen ... i vores tilfælde er den jord)
Så MOSFET gør det muligt at adskille kredsløbet, hvor vores belastning findes, fra styrekredsløbet, i dette tilfælde Rpi.
Her er diagrammet med en eklektisk motor og en 12V batteristrømforsyning.
Koden, der skal bruges, er nøjagtig den samme som for blinkende LED med variation i intensitet.
Har du ikke en motor eller strømforsyning ved hånden? Du kan prøve kredsløbet med Rpi. Til det skal du bruge en LED og en modstand denne gang på 100 Ohm, fordi vi skal bruge kilden Vcc 5v hard Rpi til testkredsløbet.
Materialer, der er nødvendige for at teste:
- LED
- 100 Ohm modstand
- MOSFET
På kredsløbet nedenfor passerer Vcc 5v-kilden til Rpi'en gennem 100 Ohm-modstanden for at begrænse strømmen, derefter ind i LED'en og slutter til afløbet på MOSFET'en. GPIO port 4 tillader, som for det foregående kredsløb, at styre MOSFET'en på porten.
Også her er koden, der skal bruges, nøjagtig den samme som for blinkende LED med variation af intensitet.