模型的PWM不是各位電子高手所習(xí)慣的幾KHZ的PWM信號(hào),模型用的頻率要慢很多,但是原理上是一致的。模型的PWM頻率很低,幾乎都是用軟件+定時(shí)器做的。在說之前,首先要提到一個(gè)東西,模型的標(biāo)準(zhǔn)接收機(jī)。這個(gè)是用于接收遙控信號(hào),并且 “直接” 給多個(gè)通道的舵機(jī)/電調(diào)輸出PWM信號(hào)的。它的輸出標(biāo)準(zhǔn),是我們用單片機(jī)輸出PWM信號(hào)控制商品舵機(jī)/電調(diào)的參考。
我來說說它每個(gè)通道的輸出標(biāo)準(zhǔn)
輸出頻率 50Hz
高電平時(shí)間 0.5~1.5ms (或0.5~2.5ms 取決于操控者手上的發(fā)射機(jī))
高電平電壓 5V
先說輸出頻率,這個(gè)頻率50HZ最為標(biāo)準(zhǔn),但是也有些商品接收機(jī)超過50HZ的,有的可以達(dá)到70HZ,所以說這個(gè)多一點(diǎn),少一點(diǎn),對(duì)于標(biāo)準(zhǔn)的舵機(jī)/標(biāo)準(zhǔn)電調(diào)沒有影響。
再說高電平時(shí)間,電調(diào)/舵機(jī)都是以高電平時(shí)間長(zhǎng)度判斷量的大小的。高電平0.5ms在電調(diào)上,代表油門為0%,相應(yīng)的1.5ms或者2.5ms對(duì)應(yīng)油門為100%。但是要注意,這個(gè)也不是絕對(duì)的,電調(diào)為了保證PWM的值在油門行程以內(nèi),可能大約小于20%的都認(rèn)為是油門0,從20%開始, 大于80%的時(shí)候認(rèn)為是達(dá)到100%了。實(shí)際給操作者的感覺就是,操作桿上的20~80%的行程就對(duì)應(yīng)油門0~100%了。其實(shí)這個(gè)沒什么影響,對(duì)于電調(diào),就按0.5~1.5ms做就好,對(duì)于舵機(jī)就按0.5~1.5ms(對(duì)應(yīng)0~90度)或者0.5~2.5ms(對(duì)應(yīng)0~180度)做就好。
然后說說高電平的電壓,這個(gè)我沒有實(shí)際測(cè)量過,5V肯定可以,3.3V就不行了,至少我手上的XXD電調(diào)就不認(rèn)了。商品電調(diào)很多都是用AVR M8做控制的,我雖然不懂AVR,但是混了那么久,也知道AVR M8是5V的單片機(jī)了。至于得不得,那你可以自己去試了,我建議,務(wù)必要用各種方法把它弄到標(biāo)準(zhǔn)的5V。方法很多,上拉電阻可以,三極管可以,電平轉(zhuǎn)換芯片可以,百度一下“單向電平轉(zhuǎn)換”很多方法,怎么做由你的。不做的話,假設(shè)你碰運(yùn)氣驅(qū)動(dòng)了這個(gè)牌子的舵機(jī),插上另一個(gè)牌子的就沒反應(yīng)..這也是有可能的。
說完標(biāo)準(zhǔn),再說不標(biāo)準(zhǔn),現(xiàn)在的商品電調(diào),大多可以用超過50HZ的PWM去輸出,比如300HZ,400HZ,如果初始化的時(shí)候行程設(shè)置在0.5~2.5ms 400HZ理論上到頂了...至于為什么,你算算2.5ms * 400 等于多少就懂了。再往上就要各位自己測(cè)試過了。好贏可以,中威特可以,XXD也可以。
還有一個(gè)不標(biāo)準(zhǔn),大約5、6年前出的一種舵機(jī),叫“數(shù)字舵機(jī)”或者“數(shù)位舵機(jī)”或者“數(shù)碼舵機(jī)”都是一個(gè)意思,它的特性同上,也可以工作在幾百HZ的PWM,買的時(shí)候要注意,不是數(shù)字舵機(jī)的話,你接上超過100HZ的PWM,肯定亂串(100HZ只是個(gè)大概值,普通舵機(jī)的還是以50HZ為準(zhǔn))。數(shù)字舵機(jī)精度相對(duì)較高,因?yàn)樗墓ぷ髦芷诳�,精度設(shè)置得比較高也不容易產(chǎn)生抖舵的情況。弄電子的DX都懂...這個(gè)不會(huì)增加什么成本,所以數(shù)字舵機(jī)也不貴。剛出來的時(shí)候,它是給模型直升機(jī)的高端陀螺儀(都是用ADI的芯片啊>_<!!)用的,可以更好地“鎖尾”,這種舵機(jī)因?yàn)闆]什么技術(shù)含量,現(xiàn)在都白菜價(jià)了。
推薦買“數(shù)字”+“金屬齒”+“空心杯”的舵機(jī),這個(gè)就比較貴了,如果減去空心杯,就便宜很多。
關(guān)于商品電調(diào)的初始化和啟動(dòng)
要注意,電調(diào)的調(diào)試需要遙控器,或者自制一個(gè)已經(jīng)能輸出0.5~1.5msPWM的“東西”
這個(gè)初始化過程,xxd好像沒要我初始化,但是好贏和中威特好像是要的,至于怎么初始化,注意看說明書,或者賣家寶貝下面的幾行字.很容易的.看過就懂了。
初始化,要設(shè)置的好像是行程,電池保護(hù),剎車之類的,需要的話,我再講。但是手上只有XXD的電調(diào),所以要講也只能結(jié)合網(wǎng)上的說明書講了。
商品電調(diào)為了安全,上電的時(shí)候必須保證油門為最小值 0%,等到電機(jī)唱完歌后才能開始控制PWM輸出油門。另外,如果在上電的時(shí)候,油門推到最大值,將進(jìn)入設(shè)置狀態(tài)。這點(diǎn)是編程的時(shí)候需要注意的
商品電調(diào)都帶有5V的輸出,一般都是兩個(gè)疊在一起的小7805降壓降出來的,這個(gè)是給舵機(jī)和接收機(jī)供電用的,大概可以提供1A左右的電流。我們用單片機(jī)控制的話,不需要供電的時(shí)候,一定要記得把電調(diào)輸出的電源正極咔嚓掉,不然你的電路可能會(huì)有危險(xiǎn)!這個(gè)必須記得!
題外話,對(duì)于四軸類飛行器,我推薦的設(shè)置:鋰電保護(hù) 剎車開 直升機(jī)啟動(dòng)模式關(guān),對(duì)于固定翼類的,剎車可以關(guān)掉,直升機(jī)關(guān)掉(其實(shí)拿來就用就好,不用設(shè)置)
相比之下,舵機(jī)就不需要注意那么多,隨心所欲用就好
說了那么多廢話,總結(jié)一下,要注意的就是:
1.高電平電壓 5V
2.數(shù)字舵機(jī)+普通電調(diào) PWM頻率400以下都OK
3.高電平時(shí)間 0.5~1.5ms 或0.5~2.5ms (模型里一般都用前者,后者機(jī)器人用得比較多)
4.電調(diào)啟動(dòng)要注意等那么幾秒
5.電調(diào)有供電的功能,要小心
反正保持標(biāo)準(zhǔn),就能通吃所有的商品電調(diào)/舵機(jī)
如果按這樣一小段程序的樣子寫,應(yīng)該可以實(shí)現(xiàn)對(duì)單通道電調(diào)/舵機(jī)的控制了。我大概按思路現(xiàn)場(chǎng)寫的,只說明原理,因?yàn)閐elay_us這樣的函數(shù),在標(biāo)準(zhǔn)51上,應(yīng)該做不到,速度太慢。
void main()
{
int i = 1000;
while(1)
{
P1_0 = 1;
delay_us(500); //即最前面的0.5ms高電平,這段是固定的
delay_us(i); //通過調(diào)節(jié)i的范圍 0~1000可以對(duì)應(yīng)0.5~1.5ms的PWM,
P1_0 = 0;
delay_us(20000 - 500 - i); //這是低電平時(shí)間,要把整個(gè)周期控制在50HZ
}
}
按以上程序的樣子寫,雖然可以做到調(diào)節(jié)PWM控制舵機(jī)/電調(diào)了,但是現(xiàn)實(shí)中明顯不可能這樣做,因?yàn)閱纹瑱C(jī)還要做別的事,而且只輸出一個(gè)通道PWM根本做不出四軸。
我就把我做過或者思考過的兩種做多通道商品舵機(jī)/電調(diào)用的PWM的方法給大家說說,然后對(duì)比一下各自的優(yōu)缺點(diǎn),我也很期待各位能分享一下其他的方法~
第一種,是我正在用的,用單片機(jī)的定時(shí)器,輸入每個(gè)高電平的時(shí)間然后拉高引腳開始計(jì)時(shí),到時(shí)間后拉低引腳,然后在中斷里切換到下一個(gè)通道,繼續(xù)拉高引腳重復(fù)上一步,純中斷操作。
第二種,是我打算要做的,用單片機(jī)定時(shí)器做大概10us的中斷,一開始直接拉高每個(gè)通道的電平,然后每10us把所有通道的值減一,然后判斷哪一個(gè)通道的值為0了,就拉低電平。
兩種方法都能實(shí)現(xiàn)多通道PWM信號(hào)輸出,但是各自的優(yōu)點(diǎn)缺點(diǎn)都很明顯。
第一種
優(yōu)點(diǎn):精度高,因?yàn)槭怯枚〞r(shí)器計(jì)時(shí)可以做到遠(yuǎn)高于8位的精度(我這里10~12位)。每個(gè)通道逐個(gè)掃描(這也算優(yōu)點(diǎn)?)。耗費(fèi)單片機(jī)時(shí)間少,對(duì)系統(tǒng)負(fù)荷很輕,在我的飛控里,這片單片機(jī)同時(shí)負(fù)責(zé)姿態(tài)計(jì)算,浮點(diǎn)和三角函數(shù)都用了..
缺點(diǎn):輸出的通道少,50HZ的頻率時(shí)只能輸出 13個(gè)(0.5~1.5ms)或者8個(gè)(0.5~2.5ms)通道,具體為什么,你算算13*1.5 還有8*2.5等于多少就知道了。50HZ,就是要在20ms內(nèi)把所有通道都掃描一次。同時(shí),也使得PWM頻率提不上去,反應(yīng)遲鈍對(duì)于飛控來說,的確很棘手。
第二種
優(yōu)點(diǎn):支持通道可以達(dá)到數(shù)十個(gè)(假如每2.5ms輸出8個(gè)通道,20ms內(nèi)就可以掃描8組通道,一共就可以輸出64個(gè)通道�。。�。輸出PWM的頻率可以很高(可以做到理論最大值)。
缺點(diǎn):占用單片機(jī)時(shí)間很集中(集中在輸出高電平的時(shí)候)。10us(按0.5~1.5ms對(duì)應(yīng)只能做到7位不到的精度)的定時(shí)器中斷,不是一般的51能辦到的,我用的C8051F 50MIPS都很吃力。
總結(jié)以上,第一種方式,適合給同時(shí)做連續(xù)采集傳感器信息,需要連續(xù)計(jì)算的單片機(jī)用,而第二種因?yàn)檎加脮r(shí)間太集中,更適合單獨(dú)做成舵機(jī)驅(qū)動(dòng)模塊,機(jī)器人方面應(yīng)用應(yīng)該會(huì)多一些...
新手習(xí)慣用while循環(huán)來定時(shí),這樣非常容易抖舵,只要有中斷,就會(huì)開始抖,不用說也知道原因了吧?要解決其實(shí)很簡(jiǎn)單的,只要用硬件定時(shí)器就可以了。
另外,控制商品電調(diào)/舵機(jī),八位精度足以。我試過一個(gè)“標(biāo)準(zhǔn)舵機(jī)”,我的八位精度PWM從100慢慢跳到107之后,他才給我羞澀地動(dòng)了一格...