STM32 HAL庫快速實戰【三】《pwm控制舵機》--基於黑龍江科技大學機電工業機器人實訓


系列目錄:

模塊介紹

TBS-K210舵機

  • 數字舵機,采用PWM控制輸出角度
  • 工作頻率 50-330HZ
  • 脈沖寬度范圍 500-2500us
  • 控制角度 270°
  • 中立位置 1500us

通過計算可得,步進角為270/2000=0.135°

PWM控制介紹

對於本次控制的舵機,當工作頻率為50HZ,即周期為20ms,20000us時,500us對應的占空比為500/20000=2.5%,2500/20000=12.5%,也就是控制占空比在該區間內變換,即可改變舵機角度。

接線

image
在這里使用DJ0接口,即PB3。

配置CubeMX

可以使用上節配置好的demo復制后繼續配置,也可以重新生成,這里不多贅述。
點擊PB3,勾選TIM2_CH2定時器
image
Pinout & Configuration > A-Z > TIM2
Channel2 > PWM Generation CH2
image
然后配置如下參數

參數 作用
PSC 預分頻,定時器計數的頻率。當主頻為72Mhz,PSC為71時,計數頻率為72/(71+1)=1Mhz,即每個周期1us
計數模式 遞增計數或者遞減計數
ARR 自動重載值,當計數到這個值時,計數器清零,重新計數。計數周期為1us,ARR為19999時,PWM周期為1us*(19999+1)為20ms,即50HZ
Pulse 翻轉計數值,當計數到達這個值時,電平翻轉
Polarity 輸出極性,即計數到達Pulse前的電平狀態

image

GENERATE CODE >Open Project

編寫代碼

配置完PWM后,若要開啟PWM,需要用到HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2)來打開TIM_CH2的定時器通道。同時舵機歸零時需要一定時間,最好加個延時。

  /* USER CODE BEGIN 2 */
	HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_2);
	HAL_Delay(2000);
	HAL_GPIO_WritePin(led_GPIO_Port,led_Pin,GPIO_PIN_RESET);
  /* USER CODE END 2 */

注意到這里我們設置的ARR為20000,對應了20ms,調整占空比為2.5%即為500,因此只需要在500-2500之間改變Pulse值即可進行調節角度。
int 一個speed變量用來調整角度(原則上不能使用這個單詞,會造成讀者迷茫,”這個變量究竟控制什么?“,這里代碼已經上傳,因此就不想改了)
通過__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed)進行修改占空比。
每次改變完占空比后,舵機轉到指定角度需要一定時間,因此需要根據改變角度幅度設置延時,也可以通過共同改變占空比變化量和延時時間來調節速度。delay減半,速度翻倍(
建議加一個翻轉led來判斷運行情況。
注意,當speed范圍不在[500,2500]時舵機不會轉動,因此建議限定speed的范圍。

  /* USER CODE BEGIN WHILE */
  int speed=500;
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  __HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_2,speed);
	 HAL_GPIO_TogglePin(led_GPIO_Port,led_Pin);
	  speed+=3;
	  HAL_Delay(100);
  }
  /* USER CODE END 3 */

工程源碼

國內用戶請使用gitee克隆或是使用代理訪問Github
https://github.com/USTHzhanglu/stm32-hal/tree/main/pwm


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM