天天看點

PS2小車—舵機基本原理

文章目錄

    • 1.舵機的結構
    • 2.舵機的規格和選型
      • 2.1舵機轉速
      • 2.2 舵機扭矩
      • 2.3工作電壓
      • 2.4尺寸、重量和材質
    • 3.舵機的工作原理
    • 4.STM32控制舵機代碼

  最近幾年國内機器人開始起步發展,很多高校、中國小都開始進行機器人技術教學。小型的機器人、子產品化的機器人、元件式的機器人是教學機器人的首選。在這些機器人産品中,舵機是很關鍵,使用較多的部件。根據控制方式,舵機應該稱為微型伺服馬達。早期在模型上使用最多,主要用于控制模型的舵面,是以俗稱舵機。舵機接受一個簡單的控制指令就可以自動轉動到一個比較精确的角度,是以非常适合在關節型機器人産品使用。

1.舵機的結構

  舵機簡單的說就是內建了直流電機、電機控制器和減速器等,并封裝在一個便于安裝的外殼裡的伺服單元。能夠利用簡單的輸入信号比較精确的轉動給定角度的電機系統。舵機安裝了一個電位器(或其它角度傳感器)檢測輸出軸轉動角度,控制闆根據電位器的資訊能比較精确的控制和保持輸出軸的角度。這樣的直流電機控制方式叫閉環控制,是以舵機更準确的說是伺服馬達,英文servo。

PS2小車—舵機基本原理

  舵機的主體結構如圖所示,主要有幾個部分:外殼、減速齒輪組、電機、電位器、控制電路。簡單的工作原理是控制電路接收信号源的控制信号,并驅動電機轉動;齒輪組将電機的速度成大倍數縮小,并将電機的輸出扭矩放大響應倍數,然後輸出;電位器和齒輪組的末級一起轉動,測量舵機軸轉動角度;電路闆檢測并根據電位器判斷舵機轉動角度,然後控制舵機轉動到目标角度或保持在目标角度。

  舵機的外殼一般是塑膠的,特殊的舵機可能會有金屬鋁合金外殼。金屬外殼能夠提供更好的散熱,可以讓舵機裡面的電機運作在更高功率下,以提供更高的扭矩輸出。金屬外殼也可以提供更牢固的固定位置。舵機的齒輪箱有塑膠齒輪、混合齒輪、金屬齒輪的差别。塑膠齒輪成本底,噪音小,但強度較低;金屬齒輪強度高,但成本高,在裝配精度一般的情況下會有很大的噪音。小扭矩舵機、微舵、扭矩大但功率密度小的舵機一般都用塑膠齒輪,如Futaba3003,輝盛的9g微舵。金屬齒輪一般用于功率密度較高的舵機上,比如輝盛的MG995舵機,在和3003一樣體積的情況下卻能提供13KG的扭矩。Hitec甚至用钛合金作為齒輪材料,其高強度能保證3003大小的舵機能提供20幾公斤的扭矩。混合齒輪在金屬齒輪和塑膠齒輪間做了折中,在電機輸出減速箱扭矩不大的部位,用塑膠齒輪。

2.舵機的規格和選型

2.1舵機轉速

  轉速由舵機無負載的情況下轉過60°角所需時間來衡量,常見舵機的速度一般在0.11s/60°-0.21s/60°之間。

PS2小車—舵機基本原理

2.2 舵機扭矩

  舵機扭矩的機關是KG·CM,這是一個扭矩機關。可以了解為在舵盤上距舵機軸中心水準距離1CM處,舵機能夠帶動的物體重量。

PS2小車—舵機基本原理

2.3工作電壓

  廠商提供的速度、轉矩資料和測試電壓有關,在4.8V和6V兩種測試電壓下這兩個參數有比較大的差别。如MG995在4.8V時速度為0.17秒,在6.0V時速度為0.13秒。舵機的工作電壓對性能有重大的影響,舵機推薦的電壓一般都是4.8V或6V。當然,有的舵機可以在7V以上工作,比如12V的舵機也不少。具體更加較高的電壓可以提高電機的速度和扭矩。選擇舵機還需要看我們的控制闆所能提供的電壓。

2.4尺寸、重量和材質

  舵機的功率(速度×轉矩)和舵機的尺寸比值可以了解為該舵機的功率密度,一般同樣品牌的舵機,功率密度大的價格高。塑膠齒輪的舵機在超出極限負荷的條件下使用可能會崩齒,金屬齒輪的舵機則可能會電機過熱損毀或外殼變形。是以材質的選擇并沒有絕對的傾向,關鍵是将舵機使用在設計規格之内。使用者一般都對金屬制的物品比較信賴,齒輪箱期望選擇全金屬的,舵盤期望選擇金屬舵盤。但需要注意的是,金屬齒輪箱在長時間過載下也不會損毀,最後卻是電機過熱損壞或外殼變形,而這樣的損壞是緻命的,不可修複的。塑膠出軸的舵機如果使用金屬舵盤是很危險的,舵盤和舵機軸在互相扭轉過程中,金屬舵盤不會磨損,舵機軸會在一段時間後變得光秃,導緻舵機完全不能使用。綜上,選擇舵機需要在計算自己所需扭矩和速度,并确定使用電壓的條件下,選擇有150%左右甚至更大扭矩富餘的舵機。

3.舵機的工作原理

舵機是一個微型的伺服控制系統,具體的控制原理可以用下圖表示:

PS2小車—舵機基本原理

  工作原理是控制電路接收信号源的控制脈沖,并驅動電機轉動;齒輪組将電機的速度成大倍數縮小,并将電機的輸出扭矩放大響應倍數,然後輸出;電位器和齒輪組的末級一起轉動,測量舵機軸轉動角度;電路闆檢測并根據電位器判斷舵機轉動角度,然後控制舵機轉動到目标角度或保持在目标角度。模拟舵機需要一個外部控制器(遙控器的接收機或者單片機)産生脈寬調制信号來告訴舵機轉動角度,脈沖寬度是舵機控制器所需的編碼資訊。舵機的控制脈沖周期20ms,脈寬從0.5ms-2.5ms,分别對應-90度到+90度的位置(對于180°舵機)。

  舵機的控制一般需要一個20ms的時基脈沖,該脈沖的高電平部分一般為0.5ms~2.5ms範圍内的角度控制脈沖部分。以180度角度舵機為例,那麼對應的控制關系是這樣的:

0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
           

如下圖所示:

PS2小車—舵機基本原理

  需要解釋的是舵機原來主要用在飛機、汽車、船隻模型上,作為方向舵的調節和控制裝置。是以,一般的轉動範圍是45°、60°或者90°,這時候脈沖寬變一般隻有1ms-2ms之間(比如你做一個遙控小車,用舵機控制方向,那麼舵機轉的角度肯定不是180度,對吧。因為你見過你開的車方向能轉180度嗎?)。而後舵機開始在機器人上得到大幅度的運用,轉動的角度也在根據機器人關節的需要增加到-90°至90°之間,甚至還有-135°至135°之間,脈沖寬度也随之有了變化。對與機器人控制而言,我們一般通過單片機産生PWM信号控制舵機。

4.STM32控制舵機代碼

0.5ms---------0度
0.6ms---------9度
0.7ms---------18度
0.8ms---------27度
0.9ms---------36度
1.0ms---------45度
1.1ms---------54度
1.2ms---------63度
1.3ms---------72度
1.4ms---------81度
1.5ms---------90度
1.6ms---------99度
1.7ms---------108度
1.8ms---------117度
1.9ms---------126度
2.0ms---------135度
2.1ms---------144度
2.2ms---------153度
2.3ms---------162度
2.4ms---------171度
2.5ms---------180度

\    |    /
 \---|---/   
  \  |  /
   \ | /
    \|/      
--------------------------------------------------------------

20ms的時基脈沖,如果想讓舵機轉63度,就應該發生一個高電平為1.2ms,
周期為20ms的方波,duty=1.2/20=6% ,而定時器自動重裝載寄存器arr的值
為 1000 ,是以令duty=60,時占空比才為60/1000=6%.

20ms的時基脈沖,如果想讓舵機轉90度,就應該發生一個高電平為1.5ms,
周期為20ms的方波,duty=1.5/20=7.5% ,而定時器自動重裝載寄存器arr的值
為 1000 ,是以令duty=75,時占空比才為75/1000=7.5%.

20ms的時基脈沖,如果想讓舵機轉126度,就應該發生一個高電平為1.9ms,
周期為20ms的方波,duty=1.9/20=9.5% ,而定時器自動重裝載寄存器arr的值
為 1000 ,是以令duty=95,時占空比才為95/1000=9.5%.
-----------------------------------------------------------------
void SERVO_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStruct;
	TIM_TimeBaseInitTypeDef TIM_TimeStructure;
	TIM_OCInitTypeDef   TIM_OCInitStructure;
	
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);	
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//配置為複用推挽輸出
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_7;
    GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_Init(GPIOA,&GPIO_InitStruct); 

	TIM_TimeStructure.TIM_Period=1000;//1000 自動重裝載寄存器的值,周期為50 000Hz/1000=50Hz,即輸出PWM波形的頻率為20ms。
	TIM_TimeStructure.TIM_Prescaler=1440-1;;// 1400 時鐘預分頻系數為3600,72 000 000Hz/1400=50000Hz =50KHZ。	
	TIM_TimeStructure.TIM_ClockDivision=TIM_CKD_DIV1;
	TIM_TimeStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeStructure.TIM_RepetitionCounter=0;
	TIM_TimeBaseInit(TIM3,&TIM_TimeStructure);
	TIM_ARRPreloadConfig(TIM3,ENABLE);	//使能ARR預裝載寄存器(影子寄存器)
	
	TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
	TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
	TIM_OCInitStructure.TIM_Pulse=0;//占空比大小
	TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
	TIM_OC2Init(TIM3,&TIM_OCInitStructure);
	
	TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);	
	TIM_Cmd(TIM3,ENABLE);
	TIM_CtrlPWMOutputs(TIM3,ENABLE);	
}
//舵機角度控制
void SERVO_Angle_Control(uint16_t Compare2)
{
    TIM_SetCompare2(TIM3,Compare2);//設定通道2為可變的pwm
}
           
SERVO_Angle_Control(75);//舵機旋轉90度
           

繼續閱讀