二、用PWM生成正弦波
有了PWM,自然就可以用PWM的方法生成正弦波了。下面生成500Hz正弦波的方法參考自張明峰的《PIC單片機(jī)入門與實(shí)踐》
每個(gè)正弦波分成四個(gè)像限,每個(gè)像限16點(diǎn),共64點(diǎn),每點(diǎn)出現(xiàn)2個(gè)PWM周期,故PWM的周期為:2ms/128=156.25us,頻率為64KHz。
TIM3 Frequency = TIM3 counter clock/(ARR + 1)
倒過來:
ARR=TIM3 Counter Clock/TIM3 Frequenc - 1 =562.5-1 =561
如果取ARR的值是561的話,那么實(shí)際的頻率是64.056KHz,即最終生成為的正弦波頻率是:500.4Hz
有了ARR,占空比就取決于CCR1的值了,使用EXCEL可以方便地計(jì)算出第一象限的16個(gè)點(diǎn)的數(shù)據(jù):
280,307,335,361,387,412,436,458,478,496,513,527,539,548,555,559
有了第一象限,其他象限都可以鏡像生成了。具體方法請(qǐng)看源程序。
要用上面的例子修改,還需要做一些工作。
前面是在SysTick中做出標(biāo)志,然后在主程序中修改CCR1的值,現(xiàn)在不行了,肯定會(huì)有時(shí)間的誤差,不能這做么,要在PWM輸出后修正,這樣就要在PWM波形輸出時(shí)產(chǎn)生中斷。因此,需要在main函數(shù)中增加以下這個(gè)函數(shù)。
這個(gè)函數(shù)哪里來的呢,很簡單,從timebase工程中中抄來的然后將TIM2改成TIM3就行了^_^。然后在main函數(shù)中調(diào)用它。
注意,還需要打開stm32f10x_conf.h文件,將下面:
藍(lán)色框里面的包含文件給“解放”出來。當(dāng)然,同時(shí)要把庫中的misc.c源程序文件加入工程中來。否則,編譯是通不過的。
為了讓通道1可以產(chǎn)生中斷,還需要做一件事,就是下面藍(lán)色的部分。
/* TIM IT enable */
TIM_ITConfig(TIM3, TIM_IT_CC1, ENABLE);
//也是從TIMEBASE工程中抄來,再將TIM2改成TIM3的。
/* TIM3 enable counter */
TIM_Cmd(TIM3, ENABLE);
現(xiàn)在該到stm32f10x_it.c中去了,增加一個(gè)中斷處理函數(shù):
uint16_t sinTab[]={280,307,335,361,387,412,436,458,478,496,513,527,539,548,555,559};
uint8_t Count1,Count2; //1.像限計(jì)數(shù)器,其值在0~3之間變化 2.其值在0~31之間變化
void TIM3_IRQHandler(void)
{
if (TIM_GetITStatus(TIM3, TIM_IT_CC1) != RESET)
{
TIM_ClearITPendingBit(TIM3, TIM_IT_CC1);
if(Count2%2==0) //準(zhǔn)備更新,新的值會(huì)在下一次更新
{ switch(Count1)
{ case 0: //象限1
{
TIM3-》CCR1= sinTab[Count2/2];
break;
}
case 1: //象限2
{ TIM3-》CCR1=sinTab[15-Count2/2];
break;
}
case 2: //象限3
{ TIM3-》CCR1=560-sinTab[Count2/2];
break;
}
case 3: //象限4
{ TIM3-》CCR1=560-sinTab[15-Count2/2];
break;
}
default:break;
}
}
}
if(++Count2==32)
{ Count2=0;
if(++Count1==4)
Count1=0;
}
}
也就是在這里,搞清楚了,所謂的“我有些懷疑上面提到的那個(gè)CCR1沒有立即變化僅僅只是調(diào)試器的問題”不對(duì),這是CCR1更新方法的問題,
注意上圖中紅色框中的描述。
這里就是不用立即更新的方法。因?yàn)槊總€(gè)點(diǎn)的PWM波形會(huì)出現(xiàn)2次,因此,用
if(Count2%2==0) 來判斷是第一次產(chǎn)生PWM波形,更新CCR1,但是這個(gè)CCR1不會(huì)立即更新,而會(huì)在下一次產(chǎn)生PWM事件時(shí)更新。
評(píng)論
查看更多