本文来源电子发烧友社区,作者: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文章
84浏览量
5889 -
开发板试用
+关注
关注
3文章
303浏览量
2642
发布评论请先 登录
相关推荐
热点推荐
【获奖名单】2025开发板评测大赛优秀开发者、最受欢迎开发板公布
试用测评后通过问卷调查投票,选出了各自心目中最受欢迎的开发板。现将名单一同予以公示。
大赛作品详情:【作品精选】2025电子发烧友开发板测评大赛作品合集!
优秀作品
发表于 11-21 09:31
【作品合集】飞凌嵌入式OK527N-C开发板测评
作品合集
第十三期合集 : 玄铁Banana Pi BPI-RV2开发板测评作品合集
第十四期合集 : 玄铁BPI-CanMV-K230D-Zero开发板测评作品合集
第十五期合集 : 中科昊
发表于 09-22 15:54
【作品精选】2025电子发烧友开发板测评大赛作品合集!
Milk-V Duo S 开发板免费试用
玄铁Banana Pi BPI-RV2开发板试用
玄铁Banana Pi BPI-CanMV-K230D-Zero17
发表于 09-03 15:24
【中科昊芯Core_DSC280025C开发板试用体验】+4. CAN外设调试(含源码)
前言
大家好,非常感谢电子发烧友与中科昊芯提供的DSC280025C开发板,这是一款DSP的
发表于 08-05 20:46
【中科昊芯Core_DSC280025C开发板试用体验】+SCI测试与代码解读
Core_DSC280025C核心板使用了昊芯HXS320F28025CRISC-V DSP芯片,该芯片集成了吴芯自主研发的H28x内核。核
发表于 07-17 10:42
【中科昊芯Core_DSC280025C开发板试用体验】+3.DSP基础外设调试(含源码)
前言
大家好,非常感谢电子发烧友与中科昊芯提供的DSC280025C开发板,这是一款DSP的
发表于 07-13 16:07
【中科昊芯Core_DSC280025C开发板试用体验】+2.RAM工程与FLASH工程对比
前言
大家好,非常感谢电子发烧友与中科昊芯提供的DSC280025C开发板,这是一款DSP的
发表于 07-04 10:37
【中科昊芯Core_DSC280025C开发板试用体验】+1.开箱之浮点计算对比
【中科昊芯Core_DSC280025C开发板试用体验】+1.开箱之浮点计算对比
前言
大家好,
发表于 06-29 10:01
中科昊芯DSP产品及公司信息
库和驱动库,帮助用户降低迁移成本,缩短开发周期。同时,公司还推出了多种开发板和核心板,如Core_DSC28027和Start_DSC28034
发表于 04-07 09:16

【中科昊芯Start_DSC28034PNT湖人开发板试用体验】--学写一个PWM
评论