一、简介
1.工作原理
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms-2.5ms范围内的角度控制脉冲部分,总间隔为2ms。以180度角度伺服为例,那么对应的控制关系是这样的:


2.接线方法
主要是SG90舵机的三根线,我使用的这款舵机红线接5V(3.3V带不动舵机),棕色接GND,黄色线接开发板的PWM输出引脚。
二、工程创建



三、实验示例
(1)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();
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//***定时器初始化
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
int i=1000; //循环时间间隔1s
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,50); //相当于一个周期内(20ms)有0.5ms高脉冲
HAL_Delay(i);
__HAL_TIM_SET_COMPARE(&htim2,TIM_CHANNEL_1,250); //相当于一个周期内(20ms)有2.5ms高脉冲
HAL_Delay(i);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
也可以直接修改寄存器CCR1的值去改变PWM的占空比
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
TIM1->CCR1=50;
HAL_Delay(1000);
TIM1->CCR1=150;
HAL_Delay(1000);
}
/* USER CODE END 3 */
}


该文介绍了舵机的工作原理,特别强调了20ms周期和0.5ms-2.5ms的高电平控制角度范围。在工程实践中,通过连接SG90舵机的红、棕、黄线到开发板相应接口,并利用HAL库初始化定时器,设置TIMChannel1的占空比来调整舵机角度。在示例代码中,通过HAL_TIM_PWM_Start和HAL_Delay函数交替改变TIMChannel1的比较值,以实现舵机角度的变化。

2231

被折叠的 条评论
为什么被折叠?



