HAL STM32 SG90舵机驱动控制

HAL STM32 SG90舵机驱动控制


  • 🔖测试对象:STM32F103
  • SG90舵机
    在这里插入图片描述

🌼功能实现:通过串口指令,控制SG90舵机转动到指定角度。

在这里插入图片描述

  • ✨在实际硬件舵机驱动过程中,使用SG90普通舵机空载运转情况下,电流在180mA左右,建议采用独立供电,光依赖开发板供电来驱动,可能带不动。

  • 🌿SG90舵机驱动,PWM控制参数:50hz=20ms,定时器计数值设定值:10000,舵机转动角度与PWM占空比关系如下表:


0.5ms-------------0度; 2.5% 对应函数中占空比为250
 1.0ms------------45度; 5.0% 对应函数中占空比为500
 1.5ms------------90度; 7.5% 对应函数中占空比为750
 2.0ms-----------135度; 10.0% 对应函数中占空比为1000
 2.5ms-----------180度; 12.5% 对应函数中占空比为1250

🛠STM32CubeMX配置

  • 🌿PWM频率=72000000/(143+1)/(9999+1)=50hz
    在这里插入图片描述

📘功能代码实现

  • 🌿main函数:
int main(void)
{

  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_TIM2_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
	htim2.Instance->CCR1 = 250; //对应舵机0角度	
//__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 250); //设置CH1->PWM脉冲宽度,同上
HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); //开启PWM输出通道3,PA0 -->50Hz	
	HAL_UART_Receive_IT(&huart1, &rx_buf, 1); //开启串口接收中断
	printf("TIM2 PWM SG90 Test\r\n");
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		if(Rece_flag)
		{
			Rece_flag = 0;
			__HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1,PWM_ANGLE[Rece_Data-'0']); 
			printf("舵机转动到:%d°\r\n",SG_ANGLE[Rece_Data-'0']);
			GPIOC->ODR ^=LED_Pin; //翻转led
			//HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);//同上
		}
  }
  /* USER CODE END 3 */
}
  • 🌿串口接收中断:
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
		if(huart->Instance == USART1) {
//				HAL_UART_Transmit(&huart1, &rx_buf, 1, 1000);//串口转发数据
			 int receivedNum = rx_buf - '0'; // 将字符转换为数字
    // 检查接收到的数字是否在0到4之间
    if (receivedNum >= 0 && receivedNum <= 4) {
		Rece_Data =	 rx_buf;
      Rece_flag = 1; 
		}			
	HAL_UART_Receive_IT(&huart1, &rx_buf, 1);//再次调用串口接收中断,否则下次无法接收到数据
		}

}
  • 🌿串口控制:0 - 4数字指令
    在这里插入图片描述

  • 📚驱动代码:
通过网盘分享的文件:STM32F1_TIM2_PWM_SG90.rar
链接: https://pan.baidu.com/s/1OHFs1YMrV1qmPvAvjc0W2w?pwd=7e2a 提取码: 7e2a
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值