MG90S舵机-基础角度控制

MG90S舵机

1. 简介

舵机即可以通过输入指定占空比的PWM实现输出固定角度偏转的电机,通过调节输入的PWM波的占空比可以实现舵机不同角度的偏转
不同型号的舵机可实现偏转的角度不同,比如此次使用到的MG90S舵机,即可实现0-180°的偏转(如果你用力去拧舵机的齿轮,会发现拧到0°和180°时便不能在拧动了)

2. 原理

舵机实际上是由一个直流电机,一个编码器和若干齿轮组合而成的
舵机的控制原理实际上是一个位置环控制(PID控制内容,详见:直流电机控制),与普通直流电不同的是,舵机可以直接使用STM32的IO口输出PWM波控制,而不需要额外的驱动芯片

3. 程序逻辑

控制舵机实际上只需要使用定时器输出一束PWM就可以了(详见:PWM波输出)

TIM_HandleTypeDef 	TIM3_Handler;      	//定时器句柄 
TIM_OC_InitTypeDef 	TIM3_CH2Handler;	//定时器3通道2句柄

/*
*********************************************************************************************************
*	函 数 名: TIM3_PWM_Init
*	功能说明: 初始化TIM3CH2为PWM输出	
			  定时器溢出时间计算方法:Tout=((arr+1)*(psc+1))/Ft us.
			  Ft=定时器工作频率,单位:Mhz
*	形    参: 1.arr:自动重装载值	
		      2.psc:时钟预分频数
*	返 回 值: 无
*********************************************************************************************************
*/
void TIM3_PWM_Init(u16 arr,u16 psc)
{  
    TIM3_Handler.Instance=TIM3;          				//定时器3
    TIM3_Handler.Init.Prescaler=psc;       				//定时器分频
    TIM3_Handler.Init.CounterMode=TIM_COUNTERMODE_UP;	//向上计数模式
    TIM3_Handler.Init.Period=arr;         				//自动重装载值
    TIM3_Handler.Init.ClockDivision=TIM_CLOCKDIVISION_DIV1;
    HAL_TIM_PWM_Init(&TIM3_Handler);       				//初始化PWM
    
    TIM3_CH2Handler.OCMode=TIM_OCMODE_PWM1; //模式选择PWM1
    TIM3_CH2Handler.Pulse=arr/2;            //设置比较值,此值用来确定占空比,默认比较值为自动重装载值的一半,即占空比为50%
    TIM3_CH2Handler.OCPolarity=TIM_OCPOLARITY_LOW; //输出比较极性为低 
    HAL_TIM_PWM_ConfigChannel(&TIM3_Handler,&TIM3_CH2Handler,TIM_CHANNEL_2);//配置TIM3通道2
	
    HAL_TIM_PWM_Start(&TIM3_Handler,TIM_CHANNEL_2);//开启PWM通道2 	   
}

//定时器底层驱动,时钟使能,引脚配置
//此函数会被HAL_TIM_PWM_Init()调用
//htim:定时器句柄
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
	GPIO_InitTypeDef GPIO_Initure;
	
    if(htim->Instance==TIM3)
	{
		__HAL_RCC_TIM3_CLK_ENABLE();			//使能定时器3
		__HAL_RCC_GPIOA_CLK_ENABLE();			//开启GPIOA时钟
		
		GPIO_Initure.Pin=GPIO_PIN_7;           	//PA7
		GPIO_Initure.Mode=GPIO_MODE_AF_PP;  	//复用推挽输出
		GPIO_Initure.Pull=GPIO_PULLUP;          //上拉
		GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH;//高速
		HAL_GPIO_Init(GPIOA,&GPIO_Initure); 	
	}
}
/*
*********************************************************************************************************
*	函 数 名: TIM_SetTIM3Compare2
*	功能说明: 设置TIM3CH2输出的PWM的占空比
*			  附:舵机各个角度PWM: 0-195    45-190    90-185    135-180    180-175
*	形    参: compare:占空比
*	返 回 值: 无
*********************************************************************************************************
*/
void TIM_SetTIM3Compare2(u32 compare)
{
	TIM3->CCR2=compare; 
}

你可能感兴趣的:(控制类,stm32,单片机,arm,嵌入式硬件)