一、前言
PWM(脉宽调制)是现代电力电子系统的基础控制技术。在电机控制或者电源驱动领域,大部分算法的最终出口是占空比的计算。在系统架构设计中,PWM的性能和分辨率是评估主控芯片性能的重要指标。
中科昊芯的HX2000系列DSP专为电机控制和开关电源行业设计,该系列芯片特色之一就是功能专业、模块化设计、容易上手的ePWM外设。
我们以HXS320F28027为例:
· 该款芯片ePWM模块由4个PWM子模块组成;
· 除PWM1外,各PWM子模块完全相同;
· PWM子模块由8个功能模块组成,用户可以根据需要使能,关闭或PASSBY相关模块,如死区,斩波,故障保护,ADC采样触发,以及模拟比较器联动等等;
· 借助主频的提升,PWM分辨率为国际友商的2倍。
下面我们做一个简单的PWM例程,演示该款DSP芯片的性能。
二、程序说明
GPIO0和GPIO1配置为PWM功能输出口。配置ePWM1模块,令PWM1周期=50us,PWM1A(GPIO0)占空比在100%-0%之间递减;PWM1B(GPIO1)输出恒定为50%。
三、效果演示
四、例程代码- /*
- * PWM.c
- *
- * Created on: 2021年10月25日
- * Author: daieq
- */
- #include "dsc_config.h"
- #include <syscalls.h>
- #include "IQmathLib.h"
- Uint16 Value_pwm1_cmpa = 0;
- int main(void)
- {
- InitSysCtrl();
- InitEPwmGpio();
- EALLOW;
- SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
- EPwm1Regs.TBPRD = 6000;
- EPwm1Regs.TBCTL.bit.FREE_SOFT = 3;
- EPwm1Regs.TBCTL.bit.CLKDIV = 0;
- EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;
- EPwm1Regs.TBCTL.bit.CTRMODE = 2; // up&down mode
- EPwm1Regs.CMPA.half.CMPA = 0;
- EPwm1Regs.CMPB = 3000;
- EPwm1Regs.AQCTLA.bit.CAU = 2; //set
- EPwm1Regs.AQCTLA.bit.CAD = 1; //clear
- EPwm1Regs.AQCTLB.bit.CBU = 2;//set
- EPwm1Regs.AQCTLB.bit.CBD = 1; //clear
- SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
- EDIS;
- while(1){
- DELAY_US(10000);
- Value_pwm1_cmpa++;
- if(Value_pwm1_cmpa>5999){
- Value_pwm1_cmpa = 0;
- }
- EPwm1Regs.CMPA.half.CMPA = Value_pwm1_cmpa;
- }
- }
作者:昊芯 https://www.bilibili.com/read/cv13773237?spm_id_from=333.999.0.0 出处:bilibili
|