STM32的PWM輸入模式
2個ICx信號映射到同一下TIxl輸入(這里是CH1及CH2)。
這兩個ICx信號都為邊沿有效,但極性相反。
由上面程序可知,TIM2的TIM_Channel_2被配置為上升沿觸發(fā),則TIM2的TIM_Channel_1被配為下降沿觸發(fā)。
利用此模式能夠測量輸入到TI1上的PWM信號的長度(TIMx_CCR2寄存器)和占空比(TIMx_CCR1)數(shù)值;
在測量時,當(dāng)上升沿信號觸發(fā)后,TIMx_CCR2寄存器開始計數(shù),當(dāng)下降沿出現(xiàn)時,TIMx_CCR1寄存器也開始計數(shù)。
直到下一個上升沿信號出現(xiàn)時,在中斷里記下TIM2_CCR1(TIM_GetCapture1(TIM2))及TIM2_CCR2(TIM_GetCapture1(TIM2))的值,然后根據(jù)這兩個值算出點空比TIM_GetCapture1(TIM2)/2C1Value ,頻率=系統(tǒng)時鐘/2C1Value 。
中斷程序如下所示:
void TIM2_IRQHandler(void)
{
}
在輸入信號的每一次上升沿都會觸發(fā)中斷,在中斷對IC2Value及IC1Value的值進(jìn)行計算
在這個程序中,TIM2的通道2設(shè)置為上升沿觸發(fā)中斷,TIM2的預(yù)分頻為0,因此可以得到:
輸入信號的頻率
輸入信號的點空比 DutyCycle = (TIM_GetCapture1(TIM2) * 100) / IC2Value;
再簡要解釋一下:不管是用一個通道還是2個通道,都是要使用輸入捕獲來實現(xiàn)測量脈寬。
輸入捕獲的意思是,當(dāng)計數(shù)器不斷地計數(shù)時,在指定的邊沿到來時刻,把計數(shù)器的內(nèi)容拷貝到這個通道對應(yīng)的CCR寄存器,同時計數(shù)器還會繼續(xù)不斷地計數(shù)。
當(dāng)使用一個通道測量脈寬時,你需要先指定上升沿觸發(fā)捕獲,當(dāng)產(chǎn)生捕獲中斷時,讀出CCR寄存器的內(nèi)容,再改變這個通道為下降沿捕獲,當(dāng)再次產(chǎn)生捕獲中斷時,再讀出CCR寄存器的內(nèi)容并與上次的捕獲數(shù)值相減,結(jié)果就是脈寬。
當(dāng)使用2個通道測量脈寬時,你只需要指定一個通道為上升沿觸發(fā)捕獲,另一個通道為下降沿捕獲,計算方法與使用一個通道時相同,即把下降沿捕獲的數(shù)值減去上升沿捕獲的數(shù)值,結(jié)果就是脈寬。使用2個通道的好處是,在產(chǎn)生捕獲中斷時不必改變觸發(fā)捕獲的邊沿。
評論