說在前面:在網上找了一圈有關樹莓派控制舵機的**,發現好多都是一模一樣的,重點是它們都貼著「原創」標籤。 ^ __ ^!
樹莓派不能直接輸出模擬電訊號,但我們可以使用pwm(脈寬調變)方法來模擬這一點。我們製作乙個固定頻率的數碼訊號,在那裡我們將改變脈衝寬度,將「轉換」改為「平均」輸出電壓的電平,我們可以使用這個「平均」電壓水平來控制led亮度。
頻率本身不是重點,而是「占空比」,即脈衝「高」的時間除以波週期之間的關係。例如,假設我們在樹莓派的 gpio上產生乙個50hz的脈衝頻率。週期(p)將是頻率的倒數或20ms(1 / f)。如果我們的led達到「半」亮度,我們的占空比必須為50%,這意味著「脈衝」將是10ms的「高」。而在這裡,我們將用「占空比」來定義舵機的位置。
一般舵機有三根控制線,分別為黃、紅、灰(黑),這三根線分別接樹莓派gpio資料輸出引腳、5v電源正極、gnd。
對於舵機的供電,可以選擇樹莓派的5v輸出,但為了樹莓派的安全起見,建議用外部5v電源。充電寶就可以。
舵機引數
首先,你要清楚你的舵機引數。我使用的舵機基本引數如下:
範圍0°~180°
電源5vdc
工作頻率
50hz(週期:20 ms)
脈衝寬度
1ms~2ms
理論上,1ms對應舵機0°,1.5ms對應舵機90°,2ms對應舵機180°。
在利用python編寫舵機位置時,利用的是上述位置所對應的的「占空比」。
位置角度
脈衝寬度
占空比0°
1ms5.0%
90°1.5ms
7.5%
180°
2ms10%
其中,占空比 = 脈衝寬度/週期。 5.0% = 1ms/20ms
可以看出,占空比理論上應該在5%到10%之間變化。但是,舵機在實際上會有一些誤差,需要我們校正,得到它的準確值。
舵機校正
在樹莓派中執行以下**:
#!/usr/bin/env python3
import rpi.gpio as gpio
import time
gpio.setmode(gpio.board)
# gpio引腳編號的兩種方式之一,另一種是bcm。所用編號方式不同,pin也不同。
gpio.setwarnings(false) # 禁用警告。
gpio.setup(pin,gpio.out)
# pin為你所接的資料輸出gpio引腳。
p = gpio.pwm(pin,50)
# 在pin腳上產生頻率為50hz的pwm訊號。
p.start(0)
# 在引腳上設定乙個初始pwm訊號。
p.changedutycycle(3)
# 通過輸入不同的「占空比值」來觀察舵機的位置變化,這裡的「占空比」是3%。
time.sleep(1)
p.stop(
)# 停止pwm。
gpio.cleanup(
)# 清理gpio。
最終得到的角度和「占空比」的關係為:
角度占空比
0°2%
90°7%
180°
12%進而,我們可以通過一組簡單的二元一次方程,得到占空比和角度的關係表示式:
dutycycle = angle/18 + 2
#!/usr/bin/env python3
import rpi.gpio as gpio
import time
defsetser***ngle
(angle)
: gpio.setmode(gpio.board)
gpio.setwarnings(
false
) gpio.setup(
32, gpio.out)
tilt = gpio.pwm(32,
50)tilt.start(0)
dutycycle = angle/18+
2 tilt.changedutycycle(dutycycle)
time.sleep(1)
tilt.stop(
)c =
input
("if you want to continue, type 'c' please. type 'e' to end."
)while c ==
'c':
angle =
input
('please type an angle:'
)# input輸入的是字串,需要用int()函式轉化成數字。
angle =
int(angle)
setser***ngle(angle)
c =input
("'c' or 'e'?"
) gpio.cleanup(
)exit(
)
樹莓派python控制舵機 樹莓派控制舵機資料
舵機介紹 樹莓派pwm函式介紹 舵機角度和占空比對應的關係動畫。對應關係如下,範圍為 90 到 90 為了方便計算,可以將其對映到0 180 角度20ms內脈衝寬度 占空比對映後角度 90 0.5ms 2.5 0 45 1ms5.0 45 0 1.5ms 7.5 90 45 2ms10.0 135 ...
樹莓派控制SG90舵機
sg90一共三根線,紅線接5 電源,棕線gnd。黃線為資料控制線,該線接到gpio上,這裡我們是bcm模式的pin 21.sg90 脈衝週期為20毫秒 millisecond 不是20微秒 microsecond 兩者差1000倍呢!也就是說最多1秒鐘內可以轉動5 次,但是考慮到每次轉動還要耗時,所...
樹莓派控制数字舵機轉動
使用樹莓派控制数字舵機 舵機的線一般是 棕 gnd 紅 vcc 黃 控制線 我們把gnd和vcc接好,然後控制線接到gpio 16上。此舵機的介紹說明上活動角度是180度,脈寬範圍是500us 2500us,中立區1500us,死區2us,意思0度到180度對應500us到2500us,90度對應1...