一、MG90S的简单了解
MG90S分为360度舵机和180度的两种,本质上都是通过输出pwm波来控制的。
本篇详细论述360度的舵机使用方法
360度的舵机只能控制转动的方向和速度,并不能控制转动的角度!!!
实物长这个样子
二、工作原理
舵机的工作原理非常简单,就是通过单片机输出的pwm波来控制,舵机会根据信号的占空比来计算需要转动的角度,而mg90s(360度)是不能控制转动的角度,因此它的占空比是用来控制舵机转动的速度和方向。
脉冲周期(20ms) | 速度 |
0.5ms | 快 |
1.0ms | 慢 |
1.5ms | 停止 |
2.0ms | 慢 |
2.5ms | 快 |
1.5ms是一个分界线,方向会在再此发送改变,距离1.5ms这个阈值越近,舵机转动速度越慢,反之越快。但上限2.5ms 下限是0.5ms ,超过阈值舵机将不工作。
三、接线
由上面的实物图可以看到,舵机就三根线 分别是 黄、红、棕
黄线 -->pwm信号线(控制线)
红线-->VCC5v
棕线-->GND
四、初始化配置
我使用的是stm32f4的板子,以此为例
mg90s的基础配置
void MG90s_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
TIM_OCInitTypeDef TIM_OCInitStruct;
RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA, ENABLE );
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2, ENABLE );
GPIO_PinAFConfig( GPIOA, GPIO_PinSource5, GPIO_AF_TIM2 ); //GPIOA5复用为定时器2
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5;
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_Init( GPIOA, &GPIO_InitStruct );
TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInitStruct.TIM_Period = arr;
TIM_TimeBaseInitStruct.TIM_Prescaler = psc;
TIM_TimeBaseInit( TIM2, &TIM_TimeBaseInitStruct );
TIM_OCInitStruct.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式2
TIM_OCInitStruct.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性低
TIM_OC1Init( TIM2, &TIM_OCInitStruct );
TIM_OC1PreloadConfig( TIM2, TIM_OCPreload_Enable ); //使能TIM2在CCR1上的预装载寄存器
TIM_ARRPreloadConfig( TIM2,ENABLE );//ARPE使能
TIM_Cmd( TIM2, ENABLE ); //使能TIM2
}
定时器初始化配置
我使用的是TIM2通用定时器。系统时钟为84MHZ
MG90s_PWM_Init(200-1,8400-1);
设置占空比
TIM_SetCompare1(TIM2,speed);
speed 填你需要设置的速度大小,这样你的舵机就能流利工作起来啦