简介

基于上一篇 STM32F103C8T6实现 SG90 180 °电机任意角度转动
本来想实现角度转动, 但靠舵机本身无法实现限位, 需要记录位置, 并且根据转速计算大概位置, 存在误差, 不实现角度转动了, 只实现正反转

代码

正向速度0.75为最大速度, 反向2.25, 接近1.5ms则速度降低

void Servo_SetDirection(uint8_t direction) 
{
	int ccrMs = 2000;
  uint16_t pulse = 0;

    switch (direction) 
		{
        case 0: // 正向最大速度
            pulse = 0.75 * ccrMs; // 0.75ms
            break;
        case 1: // 停止
            pulse = 1.5 * ccrMs; // 1.5ms
            break;
        case 2: // 反向最大速度
            pulse = 2.25 * ccrMs; // 2.25ms
            break;
        default:
            pulse = backMax * ccrMs; // 默认停止
            break;
    }

    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse);
}
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐