关于步进电机驱动板,tb6560

参考的,淘宝上买来的步进电机S曲线驱动方法,发现

他程序输出的PWM波形全是方波,  占空比为50%

而且他

修改这两个数来输出波形,所以

我打算参考这个来写一个驱动

TIMX_CNT中放置的是当前计数值

即为:

修改计数器的计数值  ARR   和CNT

如下是修改后的  产生一个  50us高电平  100us低电平的程序

the flowing code is the timer3's init  pro

 1 //通用定时器3中断初始化
 2 //这里时钟选择为APB1的2倍,而APB1为36M
 3 //    Tout =( (arr+1)*(psc+1) )/Ft  us
 4 //arr:自动重装值。
 5 //psc:时钟预分频数
 6 //这里使用的是定时器3!
 7 void TIM3_Int_Init(u16 arr,u16 psc)
 8 {
 9     TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure  ;
10     NVIC_InitTypeDef NVIC_InitStructure;
11 
12     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能
13     
14     //定时器TIM3初始化
15     TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值    
16     TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
17     TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
18     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
19     TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
20  
21     TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断
22 
23     //中断优先级NVIC设置
24     NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;  //TIM3中断
25     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
26     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
27     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
28     NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器
29     
30     
31     TIM_Cmd(TIM3, ENABLE);  //使能TIMx                     
32 }

the  fllowing code is the  TIM3_IRQHandler

 1 //中断服务程序
 2 void TIM3_IRQHandler(void)   //TIM3中断
 3 {
 4     if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  //检查TIM3更新中断发生与否
 5         {
 6         TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  //清除TIMx更新中断标志 
 7         //LED1=!LED1;
 8         //LED0=!LED0;
 9         //CLK=!CLK;
10         //GPIO_SetBits(GPIOB,GPIO_Pin_5);
11         
12 //                 if(MyPwmChangeFlag==0)//  if  is  0    do  low process
13 //                 {
14 //                     GPIO_ResetBits(GPIOB,GPIO_Pin_5);
15 //                     TIM3_Int_Init(MyPwmPeriod-MyPwmHigh-1,72-1);
16 //                     TIM_Cmd(TIM3, ENABLE);  //使能TIMx    
17 //                     MyPwmChangeFlag=1;
18 //                 }
19 //                 else if(MyPwmChangeFlag==1)
20 //                 {
21 //                     GPIO_SetBits(GPIOB,GPIO_Pin_5);
22 //                     TIM3_Int_Init(MyPwmHigh-1,72-1);
23 //                     TIM_Cmd(TIM3, ENABLE);  //使能TIMx                
24 //                     MyPwmChangeFlag=0;
25 //                 }
26                 CLK=~CLK;
27                 if(MyPwmChangeFlag)
28                 {
29                     TIM3->ARR=99;
30                     TIM3->CNT=0;
31                     MyPwmChangeFlag=0;
32                 }
33                 else
34                 {
35                     TIM3->ARR=49;
36                     TIM3->CNT=0;
37                     MyPwmChangeFlag=1;
38                 }
39                 
40             
41         }
42 }
原文地址:https://www.cnblogs.com/qdrs/p/7683437.html