使用TMS320F28335控制360 數字舵機

2021-10-19 07:12:37 字數 2424 閱讀 3167

實現過程

初步效果

轉速、方向控制

注意事項

總結前兩天用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和...