日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

首頁 >產品 >電子 > 電子材料、零部件> 半導體材料>華大單片機高級定時器輸出0~100%占空比方法

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

數量(件) 價格
1000 3000.00元/件
  • 最小起訂: 1件
  • 發(fā)貨地址: 遼寧 沈陽市
  • 發(fā)布日期:2021-09-09
  • 訪問量:362
咨詢電話:188-7506-7453
打電話時請告知是在機電之家網上看到獲取更多優(yōu)惠。謝謝!
5

沈陽芯碩科技有限公司

實名認證 企業(yè)認證
  • 企業(yè)地址:

更多>>推薦產品

詳細參數
品牌其他型號華大HC32F460
類型其他材質其他
顏色其他

產品詳情

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

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

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

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

以華大單片機HC32F003芯片TIM4定時器CHA通道為例,每一秒改變增加10%占空比,輸出100%后,占空比改為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端口輸出由STACBSTPCB決定

    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)                                                                                          //占空比小于100%,將占空比加10%

                  {

                            fPwmDyty += 0.1;

                  }

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

                  {

                            fPwmDyty = 0;

                  }

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

                  {

                             M0P_ADT0->PCONR_f.PERCA = 0; 

                  }

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

                  {

                            M0P_ADT0->PCONR_f.PERCA = 1;

                  }

               

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

               

          }

}

溫馨提示

  • 還沒找到想要的產品嗎? 立即發(fā)布采購信息,讓供應商主動與您聯(lián)系!

免責聲明:所展示的信息由會員自行提供,內容的真實性、準確性和合法性由發(fā)布會員負責,機電之家網對此不承擔任何責任。機電之家網不涉及用戶間因交易而產生的法律關系及法律糾紛,糾紛由您自行協(xié)商解決。
友情提醒:本網站僅作為用戶尋找交易對象,就貨物和服務的交易進行協(xié)商,以及獲取各類與貿易相關的服務信息的平臺。為避免產生購買風險,建議您在購買相關產品前務必確認供應商資質及產品質量。過低的價格、夸張的描述、私人銀行賬戶等都有可能是虛假信息,請采購商謹慎對待,謹防欺詐,對于任何付款行為請您慎重抉擇!如您遇到欺詐等不誠信行為,請您立即與機電之家網聯(lián)系,如查證屬實,機電之家網會對該企業(yè)商鋪做注銷處理,但機電之家網不對您因此造成的損失承擔責任!
您也可以進入“消費者防騙指南”了解投訴及處理流程,我們將竭誠為您服務,感謝您對機電之家網的關注與支持!

您是不是在找