电机加减速转动

控制电机的加减速,那就要用到pwm的初始化。也就是控制L298N的使能引脚。

 1      GPIO_PinRemapConfig(GPIO_Remap_TIM4, ENABLE); //Timer完全映射  TIM4_CH3->PD14  
 2    
 3     
 4     TIM_TimeBaseStructure.TIM_Period = arr; //重装载
 5     TIM_TimeBaseStructure.TIM_Prescaler =psc;  //预分频
 6     TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割
 7     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //向上计数  
 8     TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); 
9 10 //初始化TIM4_channel3 pwm模式 11 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; 12 TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能 13 TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性 14 TIM_OC3Init(TIM4, &TIM_OCInitStructure); //通道3的初始化 15 16 TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); 17 18 TIM_Cmd(TIM4, ENABLE);

还有IN1,IN2,IN3, IN4。  如果是使能1,就控制IN1和IN2。如果不是,这相反。

假设pwm控制使能1。则IN1,IN2就控制电机的转动方向。利用两个GPIO口就行了。

1     void JD_set(u8 x,u8 y)
2 {
3     JD1=x;
4     JD2=y;
5 } 

可以在主函数中写一个函数,然后再USMART中调用,之后就可以在串口调试助手上直接控制电机的转动方向。

 1     void JD_set(u8 x,u8 y)
 2 {
 3     JD1=x;
 4     JD2=y;
 5 } 
 6 
 7  int main(void)
 8  {        
 9     u32 temp=0;
10      u16 pwmval=0;
11     u8 dir=1;    
12     usmart_dev.init(SystemCoreClock/1000000); //72HZ
13     delay_init(); 
14     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);      
15     uart_init(115200);    //串口波特率
16      LED_Init();             
17   //  TIM8_Cap_Init(0XFFFF,72-1); 
18     JD_Init();
19      TIM4_PWM_Init(899,0);    //72MHZ/(899+1)=80KHZ
20 
21        while(1)
22     {
23         
24         
25                     delay_ms(10);     
26           if(dir)pwmval++;
27             else pwmval--;
28 
29             if(pwmval>899)dir=0;
30             if(pwmval==0)dir=1;                                         
31             TIM_SetCompare3(TIM4,pwmval);    
32     }
33 }    

这样电机就能加速减速了

 实物图:

posted on 2017-08-22 13:12  zengsf  阅读(793)  评论(0编辑  收藏  举报

导航