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

評論