關於步進電機驅動板,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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM