先看看官方資料對單脈衝模式的介紹
下面看C代碼的實現
void PWM_GPIO_Init( void )
{
PC_DDR_DDR6 = 1; //輸出管腳 PC6 TIM1_CH1
PC_CR1_C16 = 1; //推輓輸出
PC_CR2_C26 = 1; //輸出最大10MHZ
PC_DDR_DDR7 = 0; //輸入管腳 PC7 TIM1_CH2
PC_CR1_C17 = 1; //帶上拉輸入
PC_CR2_C27 = 0; //禁止外部中斷
}
//TIM1_CH2 設置爲輸入模式 TIM1_CH1 設置爲輸出模式
//當檢測到 TIM1_CH2 爲高電平或者上升沿時,TIM1_CH1 輸出一個脈衝,然後又恢復爲默認電平
void PWM_Mode( void )
{
TIM1_PSCRH = 0x00; //4MHz
TIM1_PSCRL = 0x03; //時鐘分頻寄存器 計數器的時鐘頻率(fCK_CNT)=fCK_PSC/(PSCR[15:0]+1)
/*
此處設置的頻率決定了 TIM1_CH1 輸出的最高頻率,就算TIM1_CH2 輸入引腳的在高,TIM1_CH1輸出頻率也不會高於此頻率
TIM1_CH1 輸出頻率最高爲4K Hz,意味着當TIM1_CH2的輸入脈衝頻率低於4K Hz時,檢測到TIM1_CH2的一個高電平或者上升沿時
TIM1_CH1 就會輸出一個脈衝,TIM1_CH1輸出脈衝的頻率和TIM1_CH2輸入脈衝的頻率一樣。但是當TIM1_CH2輸入脈衝頻率超過4KHz
時,TIM1_CH1輸出的脈衝頻率也只有4KHZ,如果TIM1_CH2捕獲的輸入脈衝頻率超過4K Hz時,需要修改TIM1_CH1 輸出最高頻率
*/
TIM1_ARRH = ( u8 )( 1000 >> 8 ) ; //設置PWM的週期 4M / 1000 = 4K
TIM1_ARRL = ( u8 )( 1000 & 0xFF );
TIM1_CCR1H = ( u8 )( 100 >> 8 ); //通道1配置佔空比 佔空比10%
TIM1_CCR1L = ( u8 )( 100 );
//設置TIM1_CH1 輸出模式
TIM1_CCMR1_OC1M = 6; //PWM模式1
TIM1_CCMR1_OC1PE = 1 ; //使能CCR預裝載
TIM1_CCER1_CC1P = 0 ; //配置輸出極性爲高電平
TIM1_CCER1_CC1E = 1 ; //使能通道1PWM的輸出
//設置TIM1_CH2 輸入捕獲模式
TIM1_CCER1_CC2E = 0; //禁止輸出
TIM1_CCMR2_CC2S = 0x01 ; //配置通道2爲輸入模式
TIM1_CCER1_CC2P = 0 ; //捕獲高電平或者上升沿
TIM1_CCER1_CC2E = 1; //使能通道捕獲
TIM1_SMCR_TS = 6; //濾波後定時器輸入2
TIM1_SMCR_SMS = 6; //觸發模式 計數器在觸發輸入TRGI的上升沿啓動
TIM1_CR1_DIR = 0; //向上計數
TIM1_CR1_CMS = 0 ; //計數模式爲邊沿對其模式
TIM1_CR1_OPM = 1; //使能單脈衝模式
TIM1_CR1_ARPE = 0; //禁止自動重裝
TIM1_CR1_CEN = 1 ; //使能定時器1
TIM1_BKR_MOE = 1; //主輸出使能
TIM1_EGR_UG = 1 ; // 允許在產生更新事件時重裝定時器值
}
void PWM_Init( void )
{
PWM_GPIO_Init();
PWM_Mode();
}
PC7引腳輸入一個脈衝波,當捕獲到上升沿之後,就會通過PC7引腳輸出一個脈衝。下面看下測試情況
用函數發生器產生一個100HZ的脈衝波送到單片機PC7口,PC6口輸出一個單脈衝。
示波器上黃色波形爲函數發生器輸入脈衝波,綠色波形爲PC6口輸出的單脈衝。通過波形可以看到在黃色波形上升沿時,綠色波形發出了一個脈衝。黃色波形發送脈衝的頻率爲100HZ,綠色波形輸出脈衝的頻率也爲100HZ。
將綠色波形放大看看,是不是程序中設置的4K頻率。
從黃色波形上升沿開始,綠色波形輸出高電平,高電平持續時間25us左右,低電平持續時間225us左右,整個週期時長25+225=250us,頻率剛好是4K。高電平佔空比爲10%,說明輸出的單脈衝和程序設置的一樣。
下面將輸入脈衝波頻率設置爲4K,佔空比設置爲10%,看看單脈衝輸出是不是和脈衝輸入波形是一樣的。
通過實測可以看到,輸入脈衝波頻率爲4K,佔空比爲10%,輸出的單脈衝和輸入的是一樣的。
下面將輸入脈衝頻率增加到8K
可以看到黃色輸入脈衝波的頻率增加到8K時,輸出單脈衝的頻率依然是4K。說明要想正常使用單脈衝模式時,輸入捕獲脈衝的頻率要低於單脈衝的輸出頻率。