連接伺服電機(jī)可能是許多項(xiàng)目中的一項(xiàng)基本任務(wù),例如構(gòu)建定制機(jī)器人。可以采用多種方法將伺服電機(jī)與Raspberry Pi連接起來。本文介紹了其中的兩種,并解釋了伺服電機(jī)的工作原理。這些知識將使讀者能夠使用不同的微控制器,甚至是簡單的基于555定時(shí)器的電路來控制伺服系統(tǒng)。
伺服電機(jī)是如何工作的?
通常,伺服系統(tǒng)具有三個(gè)輸入,其中兩個(gè)為位于塑料體內(nèi)的電機(jī)供電。第三個(gè)輸入控制伺服轉(zhuǎn)動(dòng)多少。
通常,輸入信號是脈寬調(diào)制(PWM)信號,其頻率不會隨時(shí)間變化。相反,當(dāng)PWM輸入信號的占空比發(fā)生變化時(shí),伺服電機(jī)會旋轉(zhuǎn)到某個(gè)角度。本例中使用的舵機(jī)總共可以轉(zhuǎn)動(dòng)180度(每個(gè)方向90度)。當(dāng)占空比為5%(一毫秒長的高脈沖)時(shí),伺服旋轉(zhuǎn)到其最小位置。如果占空比變?yōu)?0%(這是一個(gè)兩毫秒長的高脈沖),伺服會一直向右旋轉(zhuǎn)。之間的占空比與-90和+90之間的不同角度相關(guān)。但是,這些數(shù)字可能因不同的伺服系統(tǒng)和制造商而異。因此,始終有必要查閱伺服的數(shù)據(jù)表。
請注意,Raspberry Pi不應(yīng)為伺服提供電壓。相反,使用外部電源來驅(qū)動(dòng)伺服電機(jī),因?yàn)镽aspberry Pi的GPIO引腳可能無法提供足夠的電源來使電機(jī)以可接受的速度轉(zhuǎn)動(dòng)。
如何用樹莓派控制伺服電機(jī)?
要使樹莓派控制伺服電機(jī),請將伺服器的+5 V和GND線連接到外部電源,將剩余的信號線連接到樹莓派的任何I/O引腳。
不要忘記將Raspberry Pi的任何GND引腳也連接到電源的地。
如上所述,伺服系統(tǒng)通常需要一個(gè)PWM信號來告訴它們轉(zhuǎn)向哪里。因此,有多種方法可以將舵機(jī)旋轉(zhuǎn)到特定角度。一種方法是使用包含伺服模塊的gpiozero庫。您可以使用pip在Raspberry Pi上安裝該庫。如果尚未安裝rpi.gpio包,也請下載它。否則,gpiozero庫將無法工作:
復(fù)制代碼
sudo apt-get install python3-rpi.gpiosudo pip3 install gpiozero
完成后,就可以執(zhí)行以下腳本:
復(fù)制代碼
from gpiozero import Servofrom time import sleep servo = Servo(25)try: while True: servo.min() sleep(0.5) servo.mid() sleep(0.5) servo.max() sleep(0.5)except KeyboardInterrupt: print("Program stopped")
如您所見,該庫允許您快速將伺服轉(zhuǎn)向三個(gè)預(yù)定義位置之一。這個(gè)簡單的python腳本首先導(dǎo)入所需的庫。然后,它定義伺服在開始無限循環(huán)之前連接到引腳25,在該無限循環(huán)中,伺服旋轉(zhuǎn)到其最小、中間和最大位置。在角度變化之間,腳本等待半秒。
但是,庫也可以通過直接將舵機(jī)的值設(shè)置為-1和1之間的數(shù)字來指示舵機(jī)轉(zhuǎn)向舵機(jī)最小值和最大值之間的任何位置。負(fù)值對應(yīng)于舵機(jī)的最小位置,一個(gè)代表舵機(jī)的最大旋轉(zhuǎn):
復(fù)制代碼
from gpiozero import Servo from time import sleep servo = Servo(25)val = -1try: while True: servo.value = val sleep(0.1) val = val + 0.1 if val > 1: val = -1except KeyboardInterrupt: print("Program stopped")
這個(gè)簡單的腳本與前一個(gè)腳本的工作方式類似。然而,它在每次循環(huán)迭代中直接設(shè)置舵機(jī)的值,而不是使舵機(jī)旋轉(zhuǎn)到三個(gè)預(yù)定義位置之一。
請注意,此庫僅代表使用Raspberry Pi控制伺服的一種方式。同樣,您也可以使用不同的庫,例如pigpio,并直接操縱進(jìn)入伺服器的PWM輸出信號,使其轉(zhuǎn)向指定位置。
控制多個(gè)舵機(jī)的另一種方法
任何樹莓派編號的I/O引腳都能夠控制伺服系統(tǒng)。但是,如果您想控制更多的伺服系統(tǒng),或者您的項(xiàng)目需要GPIO引腳用于其他用途,那么也可以使用伺服控制器板。
這些模塊通常通過I2C與微控制器或類似設(shè)備通信,因此可以僅使用Raspberry Pi的兩個(gè)GPIO引腳來控制許多伺服系統(tǒng)。但是,您可以購買許多不同類型的模塊,它們的工作方式通常大不相同。因此,您應(yīng)該查閱模塊的數(shù)據(jù)表以了解如何使用它。
概括
與普通直流電機(jī)不同,伺服系統(tǒng)通常不能旋轉(zhuǎn)完整的360度。相反,它們在某個(gè)最小和最大角度之間轉(zhuǎn)動(dòng)。具有恒定頻率的脈寬調(diào)制輸入信號控制旋轉(zhuǎn)。該信號的占空比直接對應(yīng)于電機(jī)的角度。當(dāng)輸入信號的占空比增加時(shí),伺服會向其最大位置旋轉(zhuǎn)。樹莓派可以通過軟件直接同時(shí)控制多個(gè)舵機(jī)。每個(gè)編號的GPIO引腳都可以管理一個(gè)舵機(jī)。但是,不建議使用Raspberry Pi為伺服器供電。相反,它們應(yīng)該連接到外部電源。伺服控制器板是一次控制大量伺服的不錯(cuò)選擇。