欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

如何使用樹莓派控制舵機MG90D

本篇文章為大家展示了如何使用樹莓派控制舵機MG90D,內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、紅橋ssl等。為成百上千企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的紅橋網(wǎng)站制作公司

舵機介紹

舵機是一種位置(角度)伺服的驅(qū)動器,適用于那些需要角度不斷變化并可以保持的控制系統(tǒng)。目前,在高檔遙控玩具,如飛機、潛艇模型,遙控機器人中已經(jīng)得到了普遍應(yīng)用。我們這里使用的淘寶上常見的MG90舵機。如下圖,需要注意,不同的型號,其轉(zhuǎn)向的角度,力距不一樣,可以根據(jù)自己的需求進(jìn)行選用。

如何使用樹莓派控制舵機MG90D

工作原理

舵機的控制信號由接收機的通道進(jìn)入信號調(diào)制芯片,獲得直流偏置電壓。它內(nèi)部有一個基準(zhǔn)電路,產(chǎn)生周期為20ms,寬度為1.5ms的基準(zhǔn)信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負(fù)輸出到電機驅(qū)動芯片決定電機的正反轉(zhuǎn)。當(dāng)電機轉(zhuǎn)速一定時,通過級聯(lián)減速齒輪帶動電位器旋轉(zhuǎn),使得電壓差為0,電機停止轉(zhuǎn)動。 
??舵機的控制一般需要一個20ms左右的時基脈沖,該脈沖的高電平部分一般為0.5ms-2.5ms范圍內(nèi)的角度控制脈沖部分,總間隔為2ms。以180度角度伺服為例,那么對應(yīng)的控制關(guān)系是這樣的: 
如何使用樹莓派控制舵機MG90D

脈寬、占空比和舵機轉(zhuǎn)角之間的關(guān)系表格:

脈沖/ms占空比角度
0.52.5%0
1.05%45
1.57.5%90
2.010%135
2.512.5%180

數(shù)據(jù)推算

在上表的基礎(chǔ)上,我們需要計算一些關(guān)鍵參數(shù)。 
根據(jù)上表,如果我們要使舵機轉(zhuǎn)到指定的角度θ(0≤θ≤180)θ(0≤θ≤180) ,則需要輸入的脈沖占空比為: 
D=2.5+(θ×(12.5?2.5))/180=2.5+(θ×10)/180
舵機轉(zhuǎn)動需要一定時間,給它發(fā)指令應(yīng)避免引起沖突。舵機的轉(zhuǎn)速大概為0.2秒每60度,即0.003s/° 。而舵機的精度為180°/1024≈0.18°,對應(yīng)的脈沖占空比精度為(12.5?2.5)/1024≈0.01 ,因此,在步進(jìn)轉(zhuǎn)動內(nèi)(即每次轉(zhuǎn)0.18°,后面直接取0.2°),給舵機發(fā)的指令間隔時間不應(yīng)該低于0.2×0.003=0.0006s ,舍入一下即0.001s。而如果我們是任意指定轉(zhuǎn)角,那么兩次指令的間隔時間則應(yīng)該長于180×0.260=0.4s,這是從0度轉(zhuǎn)到180度的時間。   

舵機接線

將舵機棕色線接到GND,紅色線接到+5V引腳,橙色線接到GPIO.12(BCM18)引腳。
如何使用樹莓派控制舵機MG90D

程序編寫

Rotation.py

import RPi.GPIO as GPIO
import time

# 這個類表示單個的SG90模塊
class Rotation:
    frequency=50 #脈沖頻率(Hz)
    delta_theta=0.2 #步進(jìn)轉(zhuǎn)動間隔(度)
    min_delay=0.0006 #轉(zhuǎn)動delta_theta的理論耗時(s)
    max_delay=0.4 #從0轉(zhuǎn)到180的耗時(s)

    def __init__(self,channel,min_theta,max_theta,init_theta=0):
        '''
        構(gòu)造函數(shù):
            channel: 舵機信號線所連接的樹莓派引腳編號(BCM編碼)
            min_theta: 舵機轉(zhuǎn)動的最小角度
            max_theta: 舵機轉(zhuǎn)動的最大角度
            init_theta: 舵機的初始角度
        '''
        self.channel=channel 
        if(min_theta<0 or min_theta>180):
            self.min_theta=0
        else:
            self.min_theta=min_theta

        if(max_theta<0 or max_theta>180):
            self.max_theta=180
        else:
            self.max_theta=max_theta
            
        if(init_theta<min_theta or init_theta>max_theta):
            self.init_theta=(self.min_theta+self.max_theta)/2
        else:
            self.init_theta=init_theta #初始角度
                    
        #計算最小角度、最大角度的占空比
        self.min_dutycycle=2.5+self.min_theta*10/180
        self.max_dutycycle=2.5+self.max_theta*10/180


    def setup(self):
        '''
        初始化
        '''
        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(self.channel,GPIO.OUT)
        self.pwm=GPIO.PWM(self.channel,Rotation.frequency) #PWM
        self.dutycycle=2.5+self.init_theta*10/180 #脈沖占空比的初始值
        self.pwm.start(self.dutycycle) #讓舵機轉(zhuǎn)到初始位置
        time.sleep(Rotation.max_delay)

    def positiveRotation(self):
        '''
        正相步進(jìn)轉(zhuǎn)動,每次調(diào)用只轉(zhuǎn)動delta_theta度
        '''
        self.dutycycle=self.dutycycle+Rotation.delta_theta*10/180
        if self.dutycycle>self.max_dutycycle:
            self.dutycycle=self.max_dutycycle
        self.pwm.ChangeDutyCycle(self.dutycycle)
        time.sleep(Rotation.min_delay)

    def reverseRotation(self):
        '''
        反相轉(zhuǎn)動,每次調(diào)用只轉(zhuǎn)動delta_theta度
        '''
        self.dutycycle=self.dutycycle-Rotation.delta_theta*10/180
        if self.dutycycle<self.min_dutycycle:
            self.dutycycle=self.min_dutycycle
        self.pwm.ChangeDutyCycle(self.dutycycle)
        time.sleep(Rotation.min_delay)

    def specifyRotation(self,theta): 
        '''
        轉(zhuǎn)動到指定的角度
        '''
        if(theta<0 or theta>180):
            return
        self.dutycycle=2.5+theta*10/180
        self.pwm.ChangeDutyCycle(self.dutycycle)
        time.sleep(Rotation.max_delay)

    def cleanup(self):
        self.pwm.stop()
        time.sleep(Rotation.min_delay)
        GPIO.cleanup()

ServoCtrl.py

import time

rot = Rotation(18, 0, 180)

rot.setup()
time.sleep(2)

for i in range(0,900):
    rot.positiveRotation()
    
for i in range(0,900):
    rot.reverseRotation()
    
rot.cleanup()

上述內(nèi)容就是如何使用樹莓派控制舵機MG90D,你們學(xué)到知識或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識儲備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)站欄目:如何使用樹莓派控制舵機MG90D
標(biāo)題來源:http://aaarwkj.com/article14/igehde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站設(shè)計公司、面包屑導(dǎo)航網(wǎng)頁設(shè)計公司、企業(yè)建站營銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)
九九九热精品视频在线观看| 欧美精品青青久久久久久| 草逼免费在线观看视频| 哪里可以看日韩免费毛片| 日本熟女视频免费观看| 日韩毛片资源在线观看| 最新日韩精品电影在线网| 男人午夜影视在线观看| 欧美日韩三级国产在线| 99久久免费中文字幕| 国产一级内射视频免费观看| 亚洲女同中文字幕在线| 中午字幕久久亚洲精品| 国产乱一伦一性一情一色| 欧美成人黄色免费在线网站| 性感美女国产av一区二区三区| 麻豆映画传媒在线播放| 亚洲一区二区三区免费在线视频| 亚洲香蕉一级视频在线播放| 亚洲欧美日韩老汉影院| 91麻豆亚洲国产成人久久| 亚洲精品一区二区三区网站| 国产精品一级自拍视频| 一区二区三区日韩电影在线| 日韩电影在线播放中文字幕| 精品人妻aⅴ一区二区| 最新人妻少妇精品中文字幕视频| 四虎免费在线视频观看| 亚洲中文字幕av天堂久久| 天天操天天干蜜桃av| 亚洲av精二区三区四区| 国产精品一区二区av不卡| 久热视频这里只有精品99| 国产午夜三级视频在线观看| 四虎永久精品在线视频| 中国成熟女人毛茸茸视频| 日韩一区二区高清视频在线观看| 精品人妻一区二区三区mp4| 中文字幕人妻熟女在线| 国产黄色片网站在线看| 能在线播放的国产三级|