前言
这几天一直在整舵机,虽然之前玩过SG90这种舵机,但是实际操作起来却总出问题,还是了解太浅了。
一、数字舵机和模拟舵机
像SG90这种的便是模拟舵机了,这种舵机很便宜,控制这种舵机需要一直发送pwm信号以此来让它转动和保持原来的位置。而数字舵机则不需要一直发送,它里面自带了微处理器和晶振,可以让它在接受一次信号后便能保证原来的位置,以及转动。在使用舵机时需要注意到舵机的电压(已踩坑)以及它的型号。
二、使用步骤
代码如下(示例):
void TIM4_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Pin = (GPIO_Pin_8|GPIO_Pin_9);
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr;
TIM_TimeBaseStructure.TIM_Prescaler =psc;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OC3Init(TIM4, &TIM_OCInitStructure);
TIM_OC4Init(TIM4, &TIM_OCInitStructure);
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Enable);
TIM_Cmd(TIM4, ENABLE);
}
stm32的各个定时器以及通道引脚
2.主函数
代码如下(示例):
int main()
{
TIM4_Int_Init(199,7199);
TIM_SetCompare3(TIM4,190);控制通道3的pwm信号 转动45度(舵机有个初始位置0度,以这个为起始位置来转动)
TIM_SetCompare3(TIM4,195);
TIM_SetCompare3(TIM4,185);
TIM_SetCompare3(TIM4,175);
}
总结
以上都在20毫秒的脉冲下的。在我们使用不可调速的舵机时,可以把转动角度细分为几步,然后每步直接加上延时,便可做到调速的效果了。在使用电源模块时,需要将模块上的gnd与单片机上的gnd进行连接。(单片机上的5v实际输出电压大概在4.7左右)
|