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