Tämän harjoitustyön tarkoituksena on soveltaa aiemmissa harjoituksissa opittua tietoa. Tämän työn tarkoituksena on myös tutustua H-sillan käyttöön moottorien ohjauksessa.
Työssä käytetään NPN-transistorina 2N2222A transistoria ja PNP-transistorina 2N2907A transistoria. Moottorina käytetään DGO-3512ADA pienoismoottoria.
Toteuta elektroniikan simulaatio-ohjelmalla (NI Multisim) kuvassa 1 esitetty kytkentä. Korvaa PNP-transistori 2N2907A transistorilla ja NPN-transistori 2N2222A transistorilla. Tutustu kytkennän toimintaan simuloinnissa. Esittele toimiva simulointi opettajalle.
- Rakenna (Hyväksytyn simuloinnin jälkeen) kuvassa 2 oleva kytkentä koekytkentäalustalle.
- Pythonilla Raspberry Pi:lle ohjelma, jossa ohjaat moottorin pyörimisuuntaa kytkinten avulla seuraavasti:
– GPIO17 käynnistää moottorin myötäpäivään.
– GPIO23 käynnistää moottorin vastapäivään.
– GPIO# pysäyttää moottorin.
Huomioi seuraavat asiat:
1. Väärin kytkettynä/ohjelmoituna H-silta synnyttää hyvin helposti oikosulun.
2. Tarkistuta rakentamasi kytkentä ja koodaamasi ohjelma opettajalla ennen kuin kytket sähköt päälle!
Kuva 1. Simuloitava transistorien muodostama H-silta, jolla ohjataan tasavirtamoottoria
Tarvitset kytkentään
- Erillisen 5V virtalähteen
- 2kpl NPN-transistori 2N2222A
- 2kpl PNP-transistori 2N2907A
- pienoismoottori DGO-3512ADA tai DGO-3512ADA
- Vastuksia 10 kΩ
- kytkentäjohtimia
Kuva 2: Rakennettava H-sillalla ohjattava DC-moottori kytkentä
Tee Python-ohjelma, jolla luet jo kytkemiäsi painonappeja (painonappi 1, GPIO17, pin 11, input ja painonappi 2, GPIO23, pin 16, input) ja ohjaat lähdöiksi määrittelemiäsi GPIO-pisteitä 5 (pin 29) ja 6 (pin 31). Lisää ohjelmaan toimintoja seuraavasti:
- Kun 1-wire anturin lämpötila laskee alle 10 ºC, moottori pysähtyy
- Kun 1-wire anturin lämpötila nousee yli 35 ºC, moottori pysähtyy ja led syttyy hälytyksen merkiksi.
Voit myös jatkaa tehtävää siten, että voit säätää moottorin pyörimisnopeutta potentiometrin asennon perusteella. Kytke FET-transistori (BS170) jännitesyöttöön ja ohjaa hilaa PWM-ohjauksella aivan kuten teit led-himmennyksessä. Käytä pyörimisnopeuden säätämiseen potentiometrin asentoarvoa (potentiometrin asento -> PWM -> ohjaus BS170 hilalle).
Ohjelmaa:
import
RPi.GPIO as GPIO
from
time
import
sleep
GPIO.setmode(GPIO.BOARD)
Motor1A
=
29
Motor1B
=
31
GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
"Turning motor on left"
GPIO.output(Motor1A,GPIO.HIGH)
GPIO.output(Motor1B,GPIO.LOW)
sleep(
5
)
"Turning motor on right"
GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.HIGH)
sleep(5)
print
"Stopping motor"
GPIO.output(Motor1A,GPIO.LOW)
GPIO.output(Motor1B,GPIO.LOW)
GPIO.cleanup()
nano.py
import RPi.GPIO as io io.setmode(io.BCM) in1_pin = 29 in2_pin = 31 io.setup(in1_pin, io.OUT) io.setup(in2_pin, io.OUT) def set(property, value): try: f = open("/sys/class/rpi-pwm/pwm0/" + property, 'w') f.write(value) f.close() except: print("Error writing to: " + property + " value: " + value) set("delayed", "0") set("mode", "pwm") set("frequency", "500") set("active", "1") def clockwise(): io.output(in1_pin, True) io.output(in2_pin, False) def counter_clockwise(): io.output(in1_pin, False) io.output(in2_pin, True) clockwise() while True: cmd = raw_input("Command, f/r 0..9, E.g. f5 :") direction = cmd[0] if direction == "f": clockwise() else: counter_clockwise() speed = int(cmd[1]) * 11 set("duty", str(speed))
https://learn.adafruit.com/adafruit-raspberry-pi-lesson-9-controlling-a-dc-motor/pwm