本文來源電子發燒友社區,作者:yjp, 帖子地址:https://bbs.elecfans.com/jishu_2293868_1_1.html
看手冊,如何配置PWM,代碼如下
void HRPWM1_config(uint16 period){ /影子寄存器的立即裝載/ EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; /PWM周期值向上計數時為TBCLK+1個TBCLK,period-1表示其周期值與實際周期數相等/ EPwm1Regs.TBPRD = period - 1;/*CC比較寄存器的占空比配置*/
/*HRPWM占空比初始值設置:整數部分*/
EPwm1Regs.CMPA.half.CMPA = period / 2;
/*HRPWM占空比初始值設置常規PWM占空比右移8位,擴展16位精度為24位*/
EPwm1Regs.CMPAM.half.CMPAHR = 1 << 8;
EPwm1Regs.CMPB = period / 2;
?
/*EPWM1的相位無偏移*/
EPwm1Regs.TBPHS.half.TBPHS = 0;
/*TB時基計數初始值從0開始計數*/
EPwm1Regs.TBCTR = 0;
/*仿真模式時,時基計數器自由運行*/
EPwm1Regs.TBCTL.bit.FREE_SOFT = 3;
?
/*時基計數器向上計數*/
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
/*禁止裝載相位*/
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
/*不產生同步事件*/
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
/*時基計數器高速時鐘與低速時鐘采用1分頻*/
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
?
/*在CTR=0時裝載影子寄存器的值*/
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
/*CC比較寄存器采用影子寄存器模式*/
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
?
/*在CTR=0時EPWMxA清零*/
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
/*EPWMxA向上計數時當CTR=CMPA時EPWMxA置位*/
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
/*當CTR=0時EPWMxB清零*/
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
/*EPWMxB向上計數時當CTR=CMPB時EPWMxB置位*/
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
?
/*事件中斷配置*/
/*從CTR=0處開始執行事件中斷*/
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;
/*ET事件中斷INT使能*/
EPwm1Regs.ETSEL.bit.INTEN = 1;
/*ET中斷事件次數配置:一中斷周期內執行3個事件*/
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;
?
EALLOW;
/*使能生成,占空比調節*/
EPwm1Regs.HRPCTL.bit.HRPE = 1;
/*相位調節屏蔽*/
EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 0;
?
/*MEP校準作用在上升沿,占空比控制模式*/
EPwm1Regs.HRCNFG.all = 0x0;
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_REP;
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
?
/*自CTR=0開始裝載高頻CMPAHR寄存器的值*/
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
/*使能自動校準延遲功能*/
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1;
?
/*自動延遲校準延遲數設置為1*/
EPwm1Regs.HRMSTEP = 0x00FC;
EDIS;}
再中斷服務函數如下/**********************函數名:EPWM2_ISR(void) 參 數:無 返回值:無 作 用:EPWM2事件中斷:產生占空比從1到256變化的常規PWM波形**********************/void INTERRUPT EPWM2_ISR(void){ for(DutyFine=1;DutyFine<256;DutyFine++)? ?? ???{? ?? ?? ?? ?? ? EPwm2Regs.CMPA.half.CMPA=DutyFine;? ?? ???}EPwm2Regs.ETCLR.bit.INT=1;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;}
看手冊,如何配置PWM,代碼如下
void HRPWM1_config(uint16 period){ /影子寄存器的立即裝載/ EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; /PWM周期值向上計數時為TBCLK+1個TBCLK,period-1表示其周期值與實際周期數相等/ EPwm1Regs.TBPRD = period - 1;/*CC比較寄存器的占空比配置*/
/*HRPWM占空比初始值設置:整數部分*/
EPwm1Regs.CMPA.half.CMPA = period / 2;
/*HRPWM占空比初始值設置常規PWM占空比右移8位,擴展16位精度為24位*/
EPwm1Regs.CMPAM.half.CMPAHR = 1 << 8;
EPwm1Regs.CMPB = period / 2;
?
/*EPWM1的相位無偏移*/
EPwm1Regs.TBPHS.half.TBPHS = 0;
/*TB時基計數初始值從0開始計數*/
EPwm1Regs.TBCTR = 0;
/*仿真模式時,時基計數器自由運行*/
EPwm1Regs.TBCTL.bit.FREE_SOFT = 3;
?
/*時基計數器向上計數*/
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
/*禁止裝載相位*/
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
/*不產生同步事件*/
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;
/*時基計數器高速時鐘與低速時鐘采用1分頻*/
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
?
/*在CTR=0時裝載影子寄存器的值*/
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
/*CC比較寄存器采用影子寄存器模式*/
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
?
/*在CTR=0時EPWMxA清零*/
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;
/*EPWMxA向上計數時當CTR=CMPA時EPWMxA置位*/
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET;
/*當CTR=0時EPWMxB清零*/
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
/*EPWMxB向上計數時當CTR=CMPB時EPWMxB置位*/
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;
?
/*事件中斷配置*/
/*從CTR=0處開始執行事件中斷*/
EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;
/*ET事件中斷INT使能*/
EPwm1Regs.ETSEL.bit.INTEN = 1;
/*ET中斷事件次數配置:一中斷周期內執行3個事件*/
EPwm1Regs.ETPS.bit.INTPRD = ET_3RD;
?
EALLOW;
/*使能生成,占空比調節*/
EPwm1Regs.HRPCTL.bit.HRPE = 1;
/*相位調節屏蔽*/
EPwm1Regs.HRPCTL.bit.TBPHSHRLOADE = 0;
?
/*MEP校準作用在上升沿,占空比控制模式*/
EPwm1Regs.HRCNFG.all = 0x0;
EPwm1Regs.HRCNFG.bit.EDGMODE = HR_REP;
EPwm1Regs.HRCNFG.bit.CTLMODE = HR_CMP;
?
/*自CTR=0開始裝載高頻CMPAHR寄存器的值*/
EPwm1Regs.HRCNFG.bit.HRLOAD = HR_CTR_ZERO;
/*使能自動校準延遲功能*/
EPwm1Regs.HRCNFG.bit.AUTOCONV = 1;
?
/*自動延遲校準延遲數設置為1*/
EPwm1Regs.HRMSTEP = 0x00FC;
EDIS;}
再中斷服務函數如下/**********************函數名:EPWM2_ISR(void) 參 數:無 返回值:無 作 用:EPWM2事件中斷:產生占空比從1到256變化的常規PWM波形**********************/void INTERRUPT EPWM2_ISR(void){ for(DutyFine=1;DutyFine<256;DutyFine++)? ?? ???{? ?? ?? ?? ?? ? EPwm2Regs.CMPA.half.CMPA=DutyFine;? ?? ???}EPwm2Regs.ETCLR.bit.INT=1;
PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
中科昊芯
+關注
關注
5文章
80瀏覽量
5184 -
開發板試用
+關注
關注
3文章
301瀏覽量
2111
發布評論請先 登錄
相關推薦
有獎丨米爾 全志T536開發板免費試用
米爾與全志合作發布的新品基于全志T536應用處理器的MYD-LT536-GK開發板免費試用活動來啦~~米爾提供了3塊價值750元的MYD-LT536-GK開發板發起試用活動您不僅可以免
瑞芯微主板/開發板Linux系統播放音頻方法,觸覺智能RK3562開發板演示
本文介紹瑞芯微方案主板/開發板Linux系統播放音頻的方法,觸覺智能RK3562開發板演示,通用RK3566、RK3568、RK3588等
追加名額丨米爾瑞芯微RK3576開發板有獎試用
米爾與瑞芯微合作發布的新品基于瑞芯微RK3576應用處理器的MYD-LR3576開發板免費試用活動加碼啦~~米爾追加了2塊價值849元的MYD-LR3576
有獎丨米爾 瑞芯微RK3576開發板免費試用
米爾與瑞芯微合作發布的新品基于瑞芯微RK3576應用處理器的MYD-LR3576開發板免費試用活動來啦~~米爾提供了7塊價值849元的MYD-LR3576
喜報!中科昊芯榮獲國家級專精特新“小巨人”企業稱號
喜訊!近日,國家工業和信息化部門正式揭曉了第六批國家專精特新“小巨人”企業名單,中科昊芯憑借卓越的技術實力和創新能力,榮獲了專精特新“小巨人”企業殊榮。這一榮譽不僅是對
【米爾-國產瑞芯微RK3568開發板試用體驗】燒寫Debian鏡像以及顯示設置
【感謝】
感謝電子發燒友論壇,米爾科技提供了米爾-國產瑞芯微RK3568開發板試用機會。收到開發板有幾天了,今天分享一下如何獲取資料以及燒友
發表于 08-22 20:35
點擊參與米爾NXP i.MX 93開發板有獎試用
米爾與NXP合作發布的新品基于NXPi.MX93應用處理器的MYD-LMX9X開發板免費試用活動來啦~~米爾提供了3塊價值678元的MYD-LMX9X開發板發起試用活動您不僅可以免費體
評論