舵機(jī)速度控制原理細(xì)解
雖然理論上是那么回事,不過要通過程序表達(dá)還是要經(jīng)過一些變換,在這里假設(shè)舵機(jī)初始位置的值是x,舵機(jī)要運(yùn)行到目標(biāo)位置y,在設(shè)置個(gè)變量a讓他初始時(shí)0,x+(y-x)*a/100就是我們要送入的舵機(jī)位置信息,開始的時(shí)候a是0所以送入的數(shù)據(jù)是x,舵機(jī)還在初始位置,這時(shí)候我們每隔固定的時(shí)間就對(duì)a+1,隨著a的變化舵機(jī)位置逐步從初始位置向目標(biāo)位置靠近,到a=100的時(shí)候完全到達(dá)目標(biāo)位置停止a的自加。但是由于x+(y-x)*a/100的公式中大量的引入了x,你會(huì)發(fā)現(xiàn)寫程序還是不是那么好控制,我的最終的速度控制程序又對(duì)這個(gè)公式進(jìn)行了變換y-(y-x)*(100-a)/100這個(gè)公式也是隨著a的自加會(huì)使得送入的信息逐步到達(dá)目標(biāo)位置。兩個(gè)公式都可以實(shí)現(xiàn),但是相比較第二個(gè)程序到時(shí)候會(huì)相對(duì)簡(jiǎn)單。
本文引用地址:http://m.butianyuan.cn/article/201612/324196.htm在寫程序的時(shí)候有時(shí)候我們不光要考慮程序語句的正確性,有時(shí)候還要考慮單片機(jī)的處理能力,比方說a=(0x01<<16)>>16這個(gè)語句沒有錯(cuò)誤,理論上a應(yīng)該最后還是等于1但是把他下載到51單片機(jī)當(dāng)中就不是那么回事了,因?yàn)樵谙蛴乙苿?dòng)16位的過程中,51沒有16位的高位來儲(chǔ)存數(shù)據(jù),所需信息會(huì)有打失,最后的結(jié)果會(huì)是a=0,我也是在寫程序的時(shí)候發(fā)現(xiàn)了這個(gè)問題,只是想說明在涉及運(yùn)算的時(shí)候要考慮單片機(jī)處理能力。x+(y-x)*a/100就是對(duì)舵機(jī)在初始位置到目標(biāo)位置的轉(zhuǎn)化過程進(jìn)行了100微分,本來還想進(jìn)行1000微分的了,但是發(fā)現(xiàn)100微分就已經(jīng)完全足夠了,而且100的時(shí)候程序計(jì)算過程設(shè)計(jì)的不合理就會(huì)出現(xiàn)超出運(yùn)算能力而出錯(cuò)的情況。
有朋友問我我的舵機(jī)控制速度程序是什么原理,所以寫篇小文章介紹下,大家互相交流學(xué)習(xí) 呵呵
下面是舵機(jī)的單片機(jī)程序:
http://www.51hei.com/mcu/2542.html
http://www.51hei.com/mcu/2543.html
http://www.51hei.com/mcu/2544.html
http://www.51hei.com/mcu/2545.html
http://www.51hei.com/mcu/2546.html
http://www.51hei.com/mcu/2547.html
http://www.51hei.com/mcu/2554.html
評(píng)論