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