欧美一级爱爱视频-欧美一级爱操视频-欧美一级暴毛片-欧美一级爆毛片-欧美一级别-欧美一级成人

華大單片機高級定時器輸出0~占空比方法

 
品牌: 華大
單價: 面議
起訂:
供貨總量:
發貨期限: 自買家付款之日起 3 天內發貨
所在地: 遼寧省 沈陽市
有效期至: 長期有效
最后更新: 2021-09-08 08:36
瀏覽次數: 282
 
公司基本資料信息
詳細說明
 

華大單片機可以通過種方式進行PWM輸出,工程師反應使用高級定時器輸出PWM的時候,不能輸出占空比為0或的波形。這時由于高級定時器輸出PWM時設置會比較特殊,下面進行相關的介紹。

高級定時器進行PWM輸出時,波形主要由下面幾個寄存器的值來決定:
PCONR.PERCx(x=A/B) : CHA和CHB的周期匹配時,輸出電平狀態,設置的是PWM周期結束后電平狀態;
PCONR.CMPCx(x=A/B): CHA和CHB的比較匹配時,輸出電平狀態,設置的是計數到計數點后電平的狀態;
PCONR.STASTPSx(x=A/B):CHA和CHB的起始和停止電平選擇;
PCONR.STACx(x=A/B): 計數開始時CHA和CHB電平狀態,PWM開始前端口的電平狀態;
PCONR.STPCx(x=A/B):計數結束時CHA和CHB電平狀態,PWM停止后端口的電平狀態;
前兩個寄存器用來設置PWM輸出周期的波形,后三個寄存器用來設置PWM開始和結束時端口的電平。

本文開頭提到的問題通過設置前兩個寄存器就可以實現。下面以起始低電平,計數匹配后高電平的PWM波形來說明。起始低電平說明PWM周期匹配后,新的周期開始時端口的電平為低電平,需要把PCONR.PERCx設置為低電平;計數匹配后為高電平,把PCONR.CMPCx設置為高電平就可以。這樣的設置可以輸出0~(<)占空比的波形。這點需要始終是高電平,也就是說周期匹配的時候不能輸出低電平,設置為低電平的話,當周期匹配的時候會立刻輸出一個低電平,再進行比較匹配的判斷,匹配分輸出高電平,這樣就存在一個很小的低電平脈沖,不是我們所需要的。

當要輸出占空比的時候,要把PCONR.PERCx設置為高電平,這樣就周期匹配的時候會輸出高電平,不會再有低電平脈沖。當占空比不是的時候,再把PCONR.PERCx設置回低電平就可以。

以華大單片機HC32F003芯片TIM4定時器CHA通道為例,每一秒改變增加10%占空比,輸出后,占空比改為0輸出。代碼部分如下:

 

int32_t main(void)

{

        float fPwmDyty = 0.0;

    en_adt_unit_t enAdt;

    uint16_t u16Period;

    en_adt_compare_t enAdtCompare;

    uint16_t u16Compare;

    stc_adt_basecnt_cfg_t stcAdtbaseCntCfg;

    stc_adt_CHxX_port_cfg_t stcAdtTIM4ACfg;

 

 

    DDL_ZERO_STRUCT(stcAdtbaseCntCfg);

    DDL_ZERO_STRUCT(stcAdtTIM4ACfg);

 

    Clk_SetPeripheralGate(ClkPeripheralGpio, TRUE);                       //端口外設時鐘使能

 

   

    Gpio_SetFunc_TIM4_CHA_P23();

 

 

    Clk_SetPeripheralGate(ClkPeripheralAdt, TRUE);                         //ADT外設時鐘使能

 

    enAdt = AdTIM4;

    Adt_StopCount(enAdt);

    Adt_ClearCount(enAdt);

 

    stcAdtbaseCntCfg.enCntMode = AdtSawtoothMode;                    //ADT載波為三角波

    stcAdtbaseCntCfg.enCntDir = AdtCntUp;                                               //向上計數

    stcAdtbaseCntCfg.enCntClkDiv = AdtClkPClk0Div8;                    //PCLK8分頻

    Adt_Init(enAdt, &stcAdtbaseCntCfg);                                                       //ADT載波、計數模式、時鐘配置

   

    u16Period = 0xEEEE;

    Adt_SetPeriod(enAdt, u16Period);                                                              //設置PWM周期

 

    enAdtCompare = AdtCompareA;

    u16Compare = 0xEEEE;

    Adt_SetComparevalue(enAdt, enAdtCompare, u16Compare);       //設置CHA通道PWM低電平時間

   

    enAdtCompare = AdtCompareC;

    u16Compare = 0xEEEE;

    Adt_SetComparevalue(enAdt, enAdtCompare, u16Compare);      //設置CHA通道比較緩存值

 

    Adt_EnablevalueBuf(enAdt, AdtCHxA, TRUE);                                           //使能CHA通道緩存輸出

 

    stcAdtTIM4ACfg.enCap = AdtCHxCompareOutput;                              //比較輸出

    stcAdtTIM4ACfg.bOutEn = TRUE;                                                                        //端口輸出使能

    stcAdtTIM4ACfg.enPerc = AdtCHxPeriodLow;                                         //周期匹配時輸出低電平

    stcAdtTIM4ACfg.enCmpc = AdtCHxCompareHigh;                               //比較匹配時輸出高電平

    stcAdtTIM4ACfg.enStaStp = AdtCHxStateSelSS;                                  //計數開始或停止時,CHA端口輸出由STACB、STPCB決定

    stcAdtTIM4ACfg.enStaOut = AdtCHxPortOutLow;                               //計數開始時CHA端口輸出設定為低電平

    stcAdtTIM4ACfg.enStpOut = AdtCHxPortOutLow;                               //計數停止時CHA端口輸出設定為低電平

    Adt_CHxXPortConfig(enAdt, AdtCHxA, &stcAdtTIM4ACfg);       //端口CHA配置

   

    Adt_StartCount(enAdt);                                                                                             //開啟ADT

   

    while(1)

        {

               

                   delay1ms(1000);

                   if(fPwmDyty < 1)                                                                                          //占空比小于,將占空比加10%

                  {

                            fPwmDyty += 0.1;

                  }

                  else                                                                                                                          //占空比大于等于,將占空比設置為0%

                  {

                            fPwmDyty = 0;

                  }

 

                  if (fPwmDyty < 1)                                                                                     //占空比小于,將計數周期結束時輸出設置為低

                  {

                             M0P_ADT0->PCONR_f.PERCA = 0; 

                  }

                  else                                                                                                                       //占空比大于等于,將計數周期結束時輸出設置為高

                  {

                            M0P_ADT0->PCONR_f.PERCA = 1;

                  }

               

                  Adt_SetComparevalue(AdTIM4, AdtCompareC, (1-fPwmDyty)*u16Period);

               

          }

}

反對 0舉報 0 收藏 0
更多>本企業其它產品
澎湃微PT32L031 系列 華大HC32A460 系列介紹(一) 維晟WS2410高性能低功耗2.4G SOC芯片 維晟WS51F7130 系列物聯網 MCU 華潤微CS88M312芯片如何降低功耗及使用時的注意事項 華大單片機高級定時器輸出0~占空比方法
網站首頁  |  聯系方式  |  關于我們  |  問題解析  |  版權隱私  |  使用協議  |  網站地圖  |  排名推廣  |  廣告服務  |  積分換禮  |  網站留言  |  RSS訂閱  |  違規舉報  |  粵ICP備1207862號

中國智能化網(zgznh®)--引領工業智能化產業發展 共享智能化+優質平臺

版權所有:深圳市智控網絡有限公司 學術指導:深圳市智能化學會

粵ICP備12078626號

深公網安備案證字第 4403101901094 號 | 粵公網安備 44030702001206號

 
主站蜘蛛池模板: 国产欧美一区二区三区视频在线观看 | 亚洲精品欧美精品一区二区 | 色蜜桃蜜桃在线影院 | 久久久久毛片成人精品 | 免费观看四虎精品国产永久 | 日本免费第一区二区三区 | 日韩欧美一区二区久久 | 91精品国产综合久久久久久 | 激情在线观看视频免费的 | 秘密影院久久综合亚洲综合 | 国产精品一区二区三区免费 | 欧美人视频在线观看视频 | 成人黄色在线视频 | 亚洲国产成人久久一区www | 啪啪免费网站入口链接 | 国产成人在线免费视频 | 亚洲2020| 日本一级一片免费 | 99久久精品免费看国产一区二区三区 | 天天躁夜夜躁狠狠躁2021 | 色综合天天综合中文网 | 日本中文字幕免费 | 天天综合亚洲 | 久久成人免费播放网站 | 亚洲日本综合 | 国产亚洲精品美女一区二区 | 国产v欧美v日韩在线观看 | 免费特黄一区二区三区视频一 | 久久久久久久免费 | 午夜国产亚洲精品一区 | 欧美国产精品不卡在线观看 | 日皮视频免费看 | 国产三级乡下 | 国产成人综合欧美精品久久 | 国产不卡在线 | 国产精品18久久久久网站 | 婷婷亚洲视频 | 91精品福利 | 欧美性猛交ⅹxxx乱大交按摩 | 亚洲欧美日韩国产综合 | 久艹视频在线 |