實現過程
初步效果
轉速、方向控制
注意事項
總結前兩天用f28335控制四位共陽數碼管玩了一下(鏈結在這),這兩天換乙個,用f28335來控制舵機。
pwm(pulse width modulation),指脈衝寬度調製,是一種模擬控制方式。它的思想很簡單,就是一種等效的思想:乙個5v的訊號作用0.5秒可以等效成乙個2.5v的訊號作用1秒。所以通過控制訊號的通斷時間,就可以在恆壓訊號的基礎上輸出不同大小的訊號。
舵機由外殼、電機、控制電路以及減速器組成,因為常用於舵面(飛行器操縱面)的控制,所以叫舵機。根據轉動範圍,舵機可以分為90°、180°和360°舵機等。我手頭上的這個是360°舵機,所以它可以做整圈轉動。360°舵機和其他舵機不一樣的是,其他舵機可以控制其轉動角度,而360°舵機只能控制其轉動速度和轉動方向。
(來自網路,侵刪)
舵機一般有三根線,分別是電源線、地線以及訊號線。舵機的控制是通過在訊號線上施加不同占空比的pwm訊號而實現的。
pwm訊號的配置主要是週期以及占空比,和控制開關器件不一樣,由於這裡pwm是作為舵機的控制訊號,不需要避免開關器件同時接通的問題,因此不需要對死區做出配置。
首先進行相關的巨集定義,以便理解和後期修改,包括時鐘頻率、pwm頻率和週期,**如下:
#if (cpu_frq_150mhz)
#define cpu_clk 150e6
// sysclk = 150mhz
#endif
#if (cpu_frq_100mhz)
#define cpu_clk 100e6
// sysclk = 100mhz
#endif
#define tbctlval 0x200e
// up-down cnt, timebase = sysclkout 控制暫存器的值
#define servo_clk 50
// servoclk = 50hz
#define servo_sp cpu_clk/(2*servo_clk*8*12)
// 週期暫存器的值,由於採用增減計數,所以週期暫存器的值為系統時鐘頻率除pwm頻率再除2
然後需要對pwm的輸出管腳進行配置,用的是 initepwm1gpio 函式,這個函式是自帶的例程函式,位於 dsp2833x_epwm.c 檔案中,**如下:
void
initepwm1gpio
(void
)
最後,需要對pwm的各個模組進行配置,包括時基模組、比較計數模組、動作模組、死區模組、錯誤聯防模組、事件觸發模組以及斬波模組。不過由於我們這個是基礎應用,因此死區模組、錯誤聯防模組、事件觸發模組和斬波模組我們實際上並沒有涉及。配置**如下:
void
epwm1setup()
360度舵機轉動效果
在前面我們只是使舵機轉起來了,但是我們還需要去控制它的轉速以及方向。這要求我們清楚不同占空比所對應的舵機轉速以及方向,所以在上面的基礎上增添如下內容,每隔一定時間改變pwm訊號的占空比,觀察舵機的表現,**如下:
cnt_pwm++;if
(duty_cycle_2 >=
0.1)
duty_cycle_2 =0;
if(cnt_pwm %4==
0)duty_cycle_2 +
=0.01
;epwm1regs.cmpa.half.cmpa = servo_sp *(1
- duty_cycle_2)
;
不同占空比下的舵機表現
占空比/%
舵機表現0不轉
1順時針較快轉動2同上
3順時針較慢轉動
4逆時針更慢轉動
5逆時針較快轉動6同上
7不轉8同上
9同上10同上
由上表可以清楚看到,作用不同占空比的pwm訊號,舵機表現出不同的轉速以及方向,不過這個只是作為參考的目測結果,具體的轉速多少需要後期結合其他模組進一步測量。
由於開發板能力有限,無法直接給舵機供電,所以我們這裡採用開關電源給舵機供電。這個時候要注意將開關電源的com端與開發板的地端相連,不然舵機無法正常執行。這應該是因為不相連的話就沒有共地,會導致pwm訊號與舵機內部的基準訊號的比較出現問題。當時除錯了很久都沒反應,還以為是舵機壞了或者是pwm模組配置有問題。
另外,由於舵機控制所需的pwm訊號頻率較低,因此如果直接用系統時鐘作為時鐘源的話,週期值會超過週期暫存器的上限,因此需要設定時基控制暫存器tbctl的clkdiv位和hspclkdiv位來對系統時鐘進行分頻。
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...
TMS320F28335的時鐘介紹
tms320f28335的時鐘介紹 tms320f28335上有乙個基於pll電路的片上時鐘模組,為cpu及外設提供時鐘有兩種方式 一種是用外部的時鐘源,將其連線到x1引腳上或者xclkin引腳上,x2接地 另一種是使用振盪器產生時鐘,用30mhz的晶體和兩個20pf的電容組成的電路分別連線到x1和...