SG90舵机
- 1.sg90
- 舵机
- 工作原理
- 控制
- 应用
- 引脚
- 2.PWM
- 3.资源代码
- 4. 成果演示
- 5. 工程获取
1.sg90
舵机
在机器人机电控制系统中,舵机控制效果是性能的重要影响因素。
舵机可以在微机电系统和航模中作为基本的输出执行机构,其简单的控制和输出使得单片机系统非常容易与之接口。
舵机是一种位置(角度)伺服的驱动器,适用于那些需要角度不断变化并可以保持的控制系统。目前在高档遥控玩具,
如航模,包括飞机模型,潜艇模型;遥控机器人中已经使用得比较普遍。舵机是一种俗称,其实是一种伺服马达。
工作原理
控制信号由接收机的通道进入信号调制芯片,获得直流偏置电压。它内部有一个基准电路,产生周期为20ms,宽度为1.5ms的基准信号,将获得的直流偏置电压与电位器的电压比较,获得电压差输出。最后,电压差的正负输出到电机驱动芯片决定电机的正反转。当电机转速一定时,通过级联减速齿轮带动电位器旋转,使得电压差为0,电机停止转动。当然我们可以不用去了解它的具体工作原理,知道它的控制原理就够了。就象我们使用晶体管一样,知道可以拿它来做开关管或放大管就行了,至于管内的电子具体怎么流动是可以完全不用去考虑的。
控制
舵机的控制一般需要一个20ms左右的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分。以180度角度伺服为例,那么对应的控制关系是这样的:
0.5ms--------------0度;
1.0ms------------45度;
1.5ms------------90度;
2.0ms-----------135度;
2.5ms-----------180度;
应用
1. 高档遥控仿真车,至少得包括左转和右转功能,高精度的角度控制,必然给你最真实的驾车体验.2. 多自由度机器人设计,为什么日本人设计的机器人可以上万RMB的出售,而国内设计的一些两三千块也卖不出去呢,还是一个品质的问题.3. 多路伺服航模控制,电动遥控飞机,油动遥控飞机,航海模型等
引脚
本次使用的是STM32F103RCT6/STM32F103VET6,通道设置的是TIM2-CH4.
PB11 | TIM2->CH4 |
---|---|
VCC | +5V |
GND | GND |
控制原理及PWM配置
舵机的控制一般需要一个20ms的时基脉冲,该脉冲的高电平部分一般为0.5ms~2.5ms范围内的角度控制脉冲部分
PWM周期为20ms = (7200*200)/72000000=0.02
所以TIM_Period = 199,TIM_Prescaler = 7199
占空比 = t / T 相关参数如下:
t = 0.5ms——————-舵机会转动 0 °
t = 1.0ms——————-舵机会转动 45°
t = 1.5ms——————-舵机会转动 90°
t = 2.0ms——————-舵机会转动 135°
t = 2.5ms——————-舵机会转动180°
PWM占空比是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,由于PWM周期为20ms,所以(以舵机会转动 45°为例),占空比就应该为1ms/20ms = 5%,所以TIM_SetCompare1的 TIMx 捕获比较 1 寄存器值就为200-200*5% = 190
2.PWM
PWM 详解——呼吸灯应用
3.资源代码
pwm_init
// An highlighted block
void TIM2_Configuration( void)
{RCC->APB1ENR |= RCC_APB1ENR_TIM2EN ; //使能RCC->APB2ENR |= RCC_APB2ENR_AFIOEN | RCC_APB2ENR_IOPBEN;AFIO->MAPR = AFIO_MAPR_TIM2_REMAP;TIM2->ARR = 240;//最大计数值TIM2->PSC = 999;//TIM2->CR1 &=~TIM_CR1_DIR; TIM2->CCMR2 |= TIM_CCMR2_OC4M_1|TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4PE ;TIM2->CR1 |= TIM_CR1_ARPE;TIM2->CCR4 = 50;TIM2->CCER |= TIM_CCER_CC4P |TIM_CCER_CC4E ;TIM2->EGR |= TIM_EGR_UG;TIM2->RCR = 1;TIM2->CR1 = TIM_CR1_CEN;TIM2->BDTR |= TIM_BDTR_MOE;}
main
// An highlighted block
int main(void)
{int i = 0;RCC->APB2ENR = RCC_APB2ENR_IOPAEN;GPIOA->CRH |= (GPIOA->CRH & 0XFFFFFFF0) | 0X3;GPIOA->ODR &=~GPIO_ODR_ODR8;TIM2_Configuration();GPIOB->CRH = (GPIOB->CRH & 0XFFFF0FFF) | 0XB000;while(1){for( ; i < 250 ; i++){TIM2->CCR4 = i+0;for(int i = 0; i< 90000;i++);}for( ; i > 0 ; i--){TIM2->CCR4 = i+0;for(int i = 0; i< 80000;i++);}} return 0;
}
4. 成果演示
图片显示的是上示代码的结果
后续补摄像头转动角度
演示视频
演示视频
5. 工程获取
链接: 工程连接.
或者
:关注微信公众号:媒想到叭
回复:舵机