8. Moottoriharjoitustyö

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.

  1. Rakenna (Hyväksytyn simuloinnin jälkeen) kuvassa 2 oleva kytkentä koekytkentäalustalle.
  2. 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!

kuva8-1

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

kuva8-2

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).

h-silta

Ohjelmaa:

importRPi.GPIO as GPIOfromtime importsleepGPIO.setmode(GPIO.BOARD)Motor1A =29Motor1B =31GPIO.setup(Motor1A,GPIO.OUT)GPIO.setup(Motor1B,GPIO.OUT)print"Turning motor on left"GPIO.output(Motor1A,GPIO.HIGH)GPIO.output(Motor1B,GPIO.LOW)sleep(5)

print"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