標(biāo)題: Micropython教程之TPYBoard開(kāi)發(fā)板驅(qū)動(dòng)舵機(jī)教程(蘿卜學(xué)科編程) [打印本頁(yè)]

作者: bodasister    時(shí)間: 2018-12-8 09:51
標(biāo)題: Micropython教程之TPYBoard開(kāi)發(fā)板驅(qū)動(dòng)舵機(jī)教程(蘿卜學(xué)科編程)
    大家應(yīng)該都看到過(guò)機(jī)器人的手臂啊腿腳啊什么的一抽一抽的在動(dòng)彈吧...是不是和機(jī)械舞一樣的有節(jié)奏,現(xiàn)在很多機(jī)器人模型里面的動(dòng)力器件都是舵機(jī)。

    但是大家一般見(jiàn)到的動(dòng)力器件都是像步進(jìn)電機(jī),直流電機(jī)這一類(lèi)的動(dòng)力器件,應(yīng)該對(duì)舵機(jī)比較陌生。

    舵機(jī)主要有以下3個(gè)優(yōu)點(diǎn):

    一是體積緊湊,便于安裝; 二是輸出力矩大,穩(wěn)定性好; 三是控制簡(jiǎn)單,便于和數(shù)字系統(tǒng)接口。

    本次教程中使用的是SG90的舵機(jī),個(gè)人感覺(jué)性能一般,但是比較穩(wěn)定和耐用,做DIY實(shí)驗(yàn)器材用還是比較不錯(cuò)的。

    舵機(jī)的基本介紹

    舵機(jī),又稱(chēng)伺服馬達(dá),是一種具有閉環(huán)控制系統(tǒng)的機(jī)電結(jié)構(gòu)。舵機(jī)主要是由外殼、電路板、無(wú)核心馬達(dá)、齒輪與位置檢測(cè)器所構(gòu)成。 其工作原理是由控制器發(fā)出PWM(脈沖寬度調(diào)制)信號(hào)給舵機(jī),經(jīng)電路板上的IC處理后計(jì)算出轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)無(wú)核心馬達(dá)轉(zhuǎn)動(dòng), 透過(guò)減速齒輪將動(dòng)力傳至擺臂,同時(shí)由位置檢測(cè)器(電位器)返回位置信號(hào),判斷是否已經(jīng)到達(dá)設(shè)定位置,一般舵機(jī)只能旋轉(zhuǎn)180度。



    舵機(jī)的接線

    舵機(jī)有3根線,棕色為地,紅色為電源正,橙色為信號(hào)線,但不同牌子的舵機(jī),線的顏色可能不同。

    舵機(jī)的控制原理

    舵機(jī)的轉(zhuǎn)動(dòng)的角度是通過(guò)調(diào)節(jié)PWM(脈沖寬度調(diào)制)信號(hào)的占空比來(lái)實(shí)現(xiàn)的。

    占空比

    1.指高電平在一個(gè)周期之內(nèi)所占的時(shí)間比率。

    2.正脈沖的持續(xù)時(shí)間與脈沖總周期的比值。例如:正脈沖寬度1μs,信號(hào)周期10μs的脈沖序列占空比為0.1。即:脈沖的寬度除以脈沖的周期稱(chēng)為占空比。標(biāo)準(zhǔn)PWM(脈沖寬度調(diào)制)信號(hào)的周期固定為20ms(50Hz),理論上脈寬分布應(yīng)在1ms到2ms之間,但是,事實(shí)上脈寬可由0.5ms到2.5ms之間,脈寬和舵機(jī)的轉(zhuǎn)角0°~180°相對(duì)應(yīng)。


    Python語(yǔ)言驅(qū)動(dòng)舵機(jī)的方法

    其實(shí)說(shuō)了以上這些呢,都是為了給大家介紹利用Python語(yǔ)言來(lái)控制舵機(jī)的轉(zhuǎn)動(dòng)角度,和普通單片機(jī)一樣的,都是需要用不同寬度的脈沖來(lái)控制器轉(zhuǎn)動(dòng)的角度。 說(shuō)白了,我們需要做的就是使用Python語(yǔ)言來(lái)輸出不同寬度的脈沖信號(hào),來(lái)給到信號(hào)線里面去,F(xiàn)在一般的舵機(jī)脈寬那都是在0.5ms到2.5ms之間,這就可以計(jì)算了。 0.5MS-2.5MS這兩毫秒里面可以控制轉(zhuǎn)動(dòng)到180度,這樣算下來(lái),轉(zhuǎn)一度的脈沖時(shí)間大約就是2毫秒/180度=0.011毫秒/度,這樣依次計(jì)算就可以了。剩下的就是寫(xiě)一個(gè)脈沖信號(hào)了,相信寫(xiě)脈沖信號(hào)的程序大家都很熟悉啦。 但是,在舵機(jī)里面有一些幾點(diǎn)幾的毫秒的延時(shí)脈沖,這個(gè)在Python語(yǔ)言里如果想要利用delay()函數(shù)來(lái)做延時(shí)的話,很難做到每個(gè)角度都可以轉(zhuǎn)到,甚至說(shuō)是很難做到轉(zhuǎn)動(dòng)到大多數(shù)的角度。所以,你需要找到一個(gè)比毫秒延時(shí)還要精確的延時(shí)函數(shù)來(lái)作為脈沖的計(jì)時(shí)延時(shí)函數(shù)。我現(xiàn)在用的是time.sleep(i)這個(gè)函數(shù),這個(gè)函數(shù)里面的i,建議設(shè)置在0.0000-0.0035之間。不能說(shuō)精確的轉(zhuǎn)動(dòng)到每個(gè)角度吧,但是百分之九十的角度都是可以轉(zhuǎn)到。如果想讓舵機(jī)進(jìn)行循環(huán)擺動(dòng),一定要記得加上適當(dāng)?shù)难訒r(shí),因?yàn)槌绦蚩梢燥w快的跑,但是舵機(jī)轉(zhuǎn)動(dòng)也是需要一點(diǎn)時(shí)間的。舵機(jī)轉(zhuǎn)動(dòng)時(shí)間肯定要比程序跑一遍的時(shí)間要長(zhǎng)的多啦。
http://v.youku.com/v_show/id_XMTY1MzE5ODIyOA==.html


    實(shí)驗(yàn)?zāi)康?br />
    通過(guò)加速度傳感器的X方向控制舵機(jī)的轉(zhuǎn)動(dòng),讓舵機(jī)隨TPYBoard 的轉(zhuǎn)動(dòng)而轉(zhuǎn)動(dòng)

    實(shí)驗(yàn)材料

    TPYBoard v10x 開(kāi)發(fā)板 1塊
    SG90舵機(jī) 1個(gè)
    杜邦線 若干

    實(shí)驗(yàn)線路圖

    這里電路圖很簡(jiǎn)單,只需要給舵機(jī)接上VCC和GNG(這是最基本的,這個(gè)開(kāi)發(fā)板上好多電源和地可以用)。 然后把舵機(jī)的信號(hào)線接到任意一個(gè)GPIO口(后面程序里面要在這個(gè)GPIO往外輸出脈沖的,我用了X1,還有很多其他的GPIO口可以用。)就可以了。 接線原理圖:

  1. import pyb
  2. import time
  3. from pyb import Pin
  4. xlights = (pyb.LED(2), pyb.LED(3))
  5. ylights = (pyb.LED(1), pyb.LED(4))
  6. M0 = Pin('X1', Pin.OUT_PP)
  7. accel = pyb.Accel()
  8. i=0.0001
  9. j=0.0000
  10. while True:
  11.     x = accel.x()
  12.     print("x=")
  13.     print(x)
  14.     Y=x+20
  15.     M0.high()
  16.     time.sleep(i*Y)
  17.     M0.low()
  18.     time.sleep(i*Y)
  19.     pyb.delay(12)
  20.     if x > 0:
  21.         xlights[0].on()
  22.         xlights[1].off()
  23.     elif x < 0:
  24.         xlights[1].on()
  25.         xlights[0].off()
  26.     else:
  27.         xlights[0].off()
  28.         xlights[1].off()
復(fù)制代碼



    雖然舵機(jī)只是能實(shí)現(xiàn)轉(zhuǎn)動(dòng)指定的角度,看起來(lái)功能很單一,但是單一的功能結(jié)合起來(lái),就能完成很復(fù)雜的任務(wù)。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1