使用RPi控制直流電機
我們的下一個任務是使用樹莓派上的python腳本和GPIO頭控制直流電動機,這將在我們的腦海中產生一幅“機器人如何工作”的圖景。您可以根據外面的天氣來控制房間的風扇(因為您知道rpi會使用傳感器)。完成所有這些操作將使您了解機器人技術的基本規則。
我們將控制一個直流電動機,該電動機至少需要400mA的電流才能正常工作,但我們的RPi只能提供接近20mA的電流。這意味著我們必須在外部連接直流電源。這不成問題!我們在市場上有6V和9V的小型電池。
警告:請勿將電機直接連接到Raspberry Pi,否則會損壞Raspberry Pi。
顯然,我們將需要一個電動機控制器IC來控制電動機的功能(順時針或逆時針旋轉)。最好從L293D電機控制器IC開始。
要求:
·預先裝有Raspbian的SD卡的Raspberry Pi
·面包板
·跳線(公對公,母對公)
·一臺額定電壓為6v的直流電動機
·一塊6V或9V電池。
L293D
這是一個電機驅動器IC,我們可以一次控制2個電機。其引腳配置如下所示。它是一個16針IC,在一側包括一個Vcc(上電),一個GND針,一個Enable針(用于打開和關閉電動機),兩個輸入對應兩個輸出。
連接:
·首先將L293D的Vcc引腳連接到5V(也可以使用3.3V)
·現在連接地線
·使用GPIO-2、3、4來控制IC。(分別將GPIO-02和GPIO-03分別作為輸入1和2)
·將GPIO-04連接到IC的相應使能引腳。
·現在終于將輸出1和2連接到電動機的兩個連接上,如圖所示。
Python代碼:-
導入RPi.GPIO作為GPIO
從導入睡眠時間開始
GPIO.setmode(GPIO.BCM)
Motor1A = 02
Motor1B = 03
Motor1E = 04
的 GPIO.setup(Motor1A,GPIO.OUT)
GPIO.setup(Motor1B,GPIO.OUT)
GPIO.setup(Motor1E,GPIO.OUT)
打印“電動機要啟動“
GPIO.output(Motor1A,GPIO.HIGH)#以順時針方向運行電動機
GPIO.output (Motor1B,GPIO.LOW)#將其設置為高電平以使電動機沿逆時針方向旋轉
GPIO.output(Motor1E,GPIO.HIGH)#啟動時應始終為高電機
睡眠(5)
打印“停止電機”
GPIO.output(Motor1E,GPIO.LOW)#停止電動機后
GPIO.cleanup()
上面的代碼,您的電動機將開始沿順時針方向旋轉5秒鐘。通過修改以上代碼,您可以將其反轉。現在我們可以用兩個或四個電動機來制造汽車。
使用RPi控制直流電動機的速度
您知道在某些地方我們需要也可以控制電動機的速度。通過以上主題,您了解了電動機的ON-OFF控制,但這還不夠嗎?現在您應該在腦海中思考一個問題,即我們如何從RPi的GPIO引腳產生模擬電壓。沒問題,因為我們可以通過PWM(脈沖寬度調制)從中產生電壓脈沖并控制GPIO引腳的輸出電壓。
脈沖寬度調制
這是一個非常簡單的過程,我們可以控制電源的電壓頻率。我們知道,PWM模塊可用于RPi中的GPIO。
時間段= 1/頻率
因此,如果我選擇100Hz的頻率,則意味著時間段為10m sec。 (電壓被觸發為“高”持續10m秒)。我們的電池為電動機提供9V的電壓,為了降低速度,我們必須降低此電壓。因此,如果要將速度降低一半,而不必將占空比(電壓為高電平的時間段的百分比)更改為50。
由于供應給電動機的電壓由電機驅動器IC-L293N的使能引腳,因此我們僅需將PWM應用于使能引腳即可改變速度。貝婁是理解PWM的python代碼,需要上一主題中的上述連接(通過RPi控制直流電動機)。
》》》導入RPi.GPIO為GPIO#導入GPIO庫。
》》從時間導入睡眠開始
》》》 GPIO.setmode(GPIO.BCM)
》》》 Motor1A = 02#將GPIO-02設置為控制器IC的輸入1
》》》 Motor1B = 03#設置GPIO- 03作為控制器IC的輸入2
》》》 Motor1E = 04#將GPIO-04設置為控制器IC的使能引腳1
》》》 GPIO.setup(Motor1A,GPIO.OUT)
》》》 GPIO.setup(Motor1B,GPIO.OUT)
》》》GPIO.setup(Motor1E,GPIO.OUT)
》》》pwm=GPIO.PWM(04,100)#配置啟用引腳表示用于PWM的GPIO-04
》》》 pwm.start(50)#以50%的占空比啟動它
》》》打印“前進”
》》》 GPIO.output(Motor1A,GPIO.HIGH)
》》》 GPIO.output(Motor1B,GPIO.LOW)
》》》 GPIO.output(Motor1E,GPIO.HIGH)
》》》 sleep(2)
##這將使電動機以50%的速度向前運行2秒。
》》》 pwm.ChangeDutyCycle(80)#將占空比增加到80
》》》打印“后退”
》》》 GPIO.output(Motor1A,GPIO.HIGH)
》》》 GPIO.output(Motor1B,GPIO.LOW)
》》》 GPIO.output(Motor1E,GPIO.HIGH)
》》》睡眠(2)
##通過提供80%的電池電壓,電動機將以80%的速度反向運行2秒
》》》打印“立即停止”
》》》 GPIO.output(Motor1E,GPIO.LOW)
》 》》 pwm.stop()#從GPIO輸出中停止PWM是必要的
》》》 GPIO.cleanup()
-
直流電機
+關注
關注
36文章
1734瀏覽量
71797 -
樹莓派
+關注
關注
121文章
2005瀏覽量
107438
發布評論請先 登錄
評論