我造輪子,你造車,創客一塊兒造起來!塔克創新資訊【塔克社區 www.xtark.cn 】【塔克博客 www.cnblogs.com/xtark/ 】 函數
本文介紹X-CTR100控制器的舵機控制,X-CTR100具備16路舵機控制接口,經過定時器產生PWM控制信號,可用於航模、機械臂、機器人等製做。 性能
舵機是一種位置(角度)伺服的驅動器,適用於那些須要角度不斷變化並能夠保持的控制系統。目前,在高檔遙控玩具,如飛機、潛艇模型,遙控機器人中已經獲得了廣泛應用。 測試
舵機的形狀和大小多到讓人眼花繚亂,但大體能夠如圖C所示分類。最右邊身材不錯的是常見的標準舵機,中間兩個小不點是體積最小的微型舵機,左邊的魁梧的那個是體積最大的大扭力舵機。它們都是一樣的三線控制,所以你能夠根據需求換個大個的或小個的。 ui
除了大小和重量,舵機還有兩個主要的性能指標:扭力和轉速,這兩個指標由齒輪組和電機所決定。扭力,通俗講就是舵機有多大的勁兒。在5V的電壓下,標準舵機的扭力是5.5千克/釐米(75盎司/英寸),轉速很容易理解,就是指從一個位置轉到另外一個位置要多長時間。在5V電壓下,舵機標準轉度是0.2秒移動60度。總之,和咱們人同樣,舵機的個子越大,轉的就越慢但也越有勁兒。 spa
舵機有一個三線的接口。黑色(或棕色)的線是接地線,紅線接+5V電壓,黃線(或是白色或橙色)接控制信號端。 3d
舵機的控制信號週期爲20ms的脈寬調製(PWM)信號,其中脈衝寬度從0.5-2.5ms,相對應的舵盤位置爲0-180度,呈線性變化。即提供必定的脈寬,它的輸出軸就會保持必定對應角度上,不管外界轉矩怎麼改變,直到給它提供一個另外寬度的脈衝信號,它纔會改變輸出角度到新的對應位置。舵機控制脈衝寬度與轉角關係以下圖。 blog
控制16路舵機30度、90度、150度間隔運動。。 接口
硬件資源: 資源
硬件鏈接: get
X-SOFT軟件生態,X-API擴展文件以下。
ax_servo.c——X-CTR100 舵機控制源文件
ax_servo.h——X-CTR100 舵機控制頭文件
接口函數
void AX_SERVO_TIM2_AB_Init(void); //舵機AB接口初始化 void AX_SERVO_TIM2_A_SetAngle(uint16_t angle); //舵機A控制 void AX_SERVO_TIM2_B_SetAngle(uint16_t angle); //舵機B控制
void AX_SERVO_TIM5_CD_Init(void); //舵機CD接口初始化 void AX_SERVO_TIM5_C_SetAngle(uint16_t angle); //舵機C控制 void AX_SERVO_TIM5_D_SetAngle(uint16_t angle); //舵機D控制
void AX_SERVO_TIM3_EFGH_Init(void); //舵機EFGH接口初始化 void AX_SERVO_TIM3_E_SetAngle(uint16_t angle); //舵機E控制 void AX_SERVO_TIM3_F_SetAngle(uint16_t angle); //舵機F控制 void AX_SERVO_TIM3_G_SetAngle(uint16_t angle); //舵機G控制 void AX_SERVO_TIM3_H_SetAngle(uint16_t angle); //舵機H控制
void AX_SERVO_TIM4_IJKL_Init(void); //舵機IJKL接口初始化 void AX_SERVO_TIM4_I_SetAngle(uint16_t angle); //舵機I控制 void AX_SERVO_TIM4_J_SetAngle(uint16_t angle); //舵機J控制 void AX_SERVO_TIM4_K_SetAngle(uint16_t angle); //舵機K控制 void AX_SERVO_TIM4_L_SetAngle(uint16_t angle); //舵機L控制
void AX_SERVO_TIM1_MNOP_Init(void); //舵機MNOP接口初始化 void AX_SERVO_TIM1_M_SetAngle(uint16_t angle); //舵機M控制 void AX_SERVO_TIM1_N_SetAngle(uint16_t angle); //舵機N控制 void AX_SERVO_TIM1_O_SetAngle(uint16_t angle); //舵機O控制 void AX_SERVO_TIM1_P_SetAngle(uint16_t angle); //舵機P控制 |
函數AX_SERVO_TIMX_XX_Init()完成舵機控制定時器和IO的初始化,TIMX爲對應的定時器,XX爲初始化所包含的舵機接口,例如AX_SERVO_TIM3_EFGH_Init()初始化定時器TIM3,包含的接口爲EFGH。while循環中經過AX_SERVO_TIMX_X_SetAngle()設置舵機的旋轉角度,實現16路舵機30°、90°、150°間隔運動。主程序代碼以下。
int main(void) { //X-CTR100初始化 AX_Init(115200); printf("***X-CTR100 舵機控制例程***\r\n\r\n");
//模塊初始化及配置 AX_SERVO_TIM2_AB_Init(); AX_SERVO_TIM5_CD_Init(); AX_SERVO_TIM3_EFGH_Init(); AX_SERVO_TIM4_IJKL_Init(); AX_SERVO_TIM1_MNOP_Init();
//X-API測試:16路舵機控制測試 printf("*16路舵機控制測試\r\n");
while (1) { printf("*30度...... \r\n"); AX_SERVO_TIM2_A_SetAngle(300); AX_SERVO_TIM2_B_SetAngle(300); AX_SERVO_TIM5_C_SetAngle(300); AX_SERVO_TIM5_D_SetAngle(300); AX_SERVO_TIM3_E_SetAngle(300); AX_SERVO_TIM3_F_SetAngle(300); AX_SERVO_TIM3_G_SetAngle(300); AX_SERVO_TIM3_H_SetAngle(300); AX_SERVO_TIM4_I_SetAngle(300); AX_SERVO_TIM4_J_SetAngle(300); AX_SERVO_TIM4_K_SetAngle(300); AX_SERVO_TIM4_L_SetAngle(300); AX_SERVO_TIM1_M_SetAngle(300); AX_SERVO_TIM1_N_SetAngle(300); AX_SERVO_TIM1_O_SetAngle(300); AX_SERVO_TIM1_P_SetAngle(300); AX_Delayms(1000);
printf("*90度...... \r\n"); AX_SERVO_TIM2_A_SetAngle(900); AX_SERVO_TIM2_B_SetAngle(900); AX_SERVO_TIM5_C_SetAngle(900); AX_SERVO_TIM5_D_SetAngle(900); AX_SERVO_TIM3_E_SetAngle(900); AX_SERVO_TIM3_F_SetAngle(900); AX_SERVO_TIM3_G_SetAngle(900); AX_SERVO_TIM3_H_SetAngle(900); AX_SERVO_TIM4_I_SetAngle(900); AX_SERVO_TIM4_J_SetAngle(900); AX_SERVO_TIM4_K_SetAngle(900); AX_SERVO_TIM4_L_SetAngle(900); AX_SERVO_TIM1_M_SetAngle(900); AX_SERVO_TIM1_N_SetAngle(900); AX_SERVO_TIM1_O_SetAngle(900); AX_SERVO_TIM1_P_SetAngle(900); AX_Delayms(1000);
printf("*150度...... \r\n"); AX_SERVO_TIM2_A_SetAngle(1500); AX_SERVO_TIM2_B_SetAngle(1500); AX_SERVO_TIM5_C_SetAngle(1500); AX_SERVO_TIM5_D_SetAngle(1500); AX_SERVO_TIM3_E_SetAngle(1500); AX_SERVO_TIM3_F_SetAngle(1500); AX_SERVO_TIM3_G_SetAngle(1500); AX_SERVO_TIM3_H_SetAngle(1500); AX_SERVO_TIM4_I_SetAngle(1500); AX_SERVO_TIM4_J_SetAngle(1500); AX_SERVO_TIM4_K_SetAngle(1500); AX_SERVO_TIM4_L_SetAngle(1500); AX_SERVO_TIM1_M_SetAngle(1500); AX_SERVO_TIM1_N_SetAngle(1500); AX_SERVO_TIM1_O_SetAngle(1500); AX_SERVO_TIM1_P_SetAngle(1500); AX_Delayms(1000); } } |
可在16路舵機接口中任意一路插入舵機,舵機便可循環30°、90°、150°運動,接口順序以下圖,使用時注意電源供電能力及舵機的功率,通常電腦USB供電(500mA)可爲1路GS90舵機提供電源,若是插入多路舵機,或舵機負載扭矩大,也可經過VIN-5V接口供電。
https://m.guokr.com/article/5292/#weixin.qq.com