| 
 前言这几天一直在整舵机,虽然之前玩过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左右) |