參考的,淘寶上買來的步進電機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 }