STM8學習筆記----PWM單脈衝模式輸出

先看看官方資料對單脈衝模式的介紹

下面看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。說明要想正常使用單脈衝模式時,輸入捕獲脈衝的頻率要低於單脈衝的輸出頻率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章