这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32WBA55CG开发板评测】7、蓝牙+PWM控制舵机

共4条 1/1 1 跳转至

【STM32WBA55CG开发板评测】7、蓝牙+PWM控制舵机

助工
2024-12-23 21:26:06     打赏

本文实现定时器PWM输出驱动舵机,通过蓝牙BLE改变PWM占空比时间改变舵机角度。


一、驱动舵机原理

舵机控制信号通常是PWM(脉宽调制)信号。

PWM信号的脉宽直接影响舵机的转动角度。通常,PWM信号的周期固定为20毫秒,而脉冲宽度则决定了舵机的目标角度。例如:

脉冲宽度为0.5毫秒时,对应舵机的最小角度(如0°)。
脉冲宽度为1.5毫秒时,对应舵机的中间位置(如90°,对于180°舵机而言)。
脉冲宽度为2.5毫秒时,对应舵机的最大角度(如180°)

二、STM32CuteMX配置

TIM3通道1选择PWM Generation CH1

3.png

PWM周期计算:

SYSTEMcoreClock/{[(SYSTEMcoreClock/10000)-1]+1}=10000Hz

10000/(199+1)=50Hz

1/50=20ms

占空比时间:20*15/(199+1)=1.5ms

三、程序

1、按键控制舵机

定义任务

UTIL_SEQ_RegTask( 1U << TASK_PLAY_NOTE, UTIL_SEQ_RFU, servo_process);

任务处理函数

void servo_process(void)
{
static uint8_t running=0;
if(running==0)
{
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 5);        //0度
running=1;
}else
{
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 15);     //90度
running=0;
}
}

按键B3触发TASK,调用servo_process,控制舵机调节角度。


void BSP_PB_Callback(Button_TypeDef Button)
{
switch(Button)
{
case B3:
UTIL_SEQ_SetTask(1U << TASK_PLAY_NOTE, CFG_SEQ_PRIO_0);
break;
default:
break;
}
}

2、BLE控制舵机


 servce1_app.c中写特征事件处理:

case SERVICE1_SERVOCHAR_WRITE_NO_RESP_EVT:
      /* USER CODE BEGIN Service1Char1_WRITE_NO_RESP_EVT */
//if(p_Notification->DataTransfered.p_Payload[0]==0x01){
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_4); 
printf("%d\r\n",p_Notification->DataTransfered.p_Payload[0]);
__HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_1, 5+p_Notification->DataTransfered.p_Payload[0]);
//}
      /* USER CODE END Service1Char1_WRITE_NO_RESP_EVT */

p_Notification->DataTransfered.p_Payload[0]为通过BLE调试工具发送的HEX数据(0x00-0x14)对应角度0-180

四、运行效果


BLE助手上发送指令也可以调节舵机。








关键词: STM32WBA55CG开发板评测    

专家
2024-12-23 22:28:23     打赏
2楼

感谢分享


专家
2024-12-23 22:29:05     打赏
3楼

感谢分享


专家
2024-12-23 22:36:15     打赏
4楼

感谢分享


共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]