【matlab仿真】使用Repeating Sequence模块生成三角载波

需求:生成一个开关频率为16k,峰值为3125的三角载波
在这里插入图片描述
使用Repeating Sequence模块生成三角载波,仿真模型如下:
在这里插入图片描述
参数设置如下:
在这里插入图片描述
前几天一直遇到仿真输出的波形失真,最后按照如上设置,仿真的波形才正常。

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个简单的例子,用于在F28335芯片上使用三角载波生成EPWM波: ```c #include "F2837xS_device.h" #include "F2837xS_Examples.h" void InitEPwm1(void); void InitEPwm2(void); void InitEPwm3(void); void InitEPwmGpio(void); // 定义一个用于三角波生成的计数器 Uint16 epwm_cnt; void main(void) { InitSysCtrl(); // 初始化系统控制模块 InitEPwmGpio(); // 初始化EPWM引脚 InitEPwm1(); // 初始化EPWM1 InitEPwm2(); // 初始化EPWM2 InitEPwm3(); // 初始化EPWM3 // 用于三角波生成的计数器从0开始计数 epwm_cnt = 0; // 开始计数 while(1) { // 计数器的值从0到255 if(epwm_cnt < 255) { epwm_cnt++; } else { epwm_cnt = 0; } } } void InitEPwm1(void) { // 初始化EPWM1 EPwm1Regs.TBPRD = 5999; // 设置周期为5999 EPwm1Regs.TBPHS.bit.TBPHS = 0; // 相位为0 EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 向上向下计数 EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 关闭相位同步 EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 同步信号为计数器清零时 EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // 静态比较 EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // CMPA在计数器清零时被加载 EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm1Regs.AQCTL.bit.CAU = AQ_SET; // 当CMPA小于计数器值时,设置EPWMxA EPwm1Regs.AQCTL.bit.CAD = AQ_CLEAR; EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 使能死区时间 EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 死区时间时高电平有效 EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 死区时间源为DBA EPwm1Regs.DBRED = 50; // 设置上升沿死区时间 EPwm1Regs.DBFED = 50; // 设置下降沿死区时间 EPwm1Regs.CMPA.bit.CMPA = 3000; // 初始化CMPA为3000 EPwm1Regs.ETSEL.bit.SOCAEN = 1; // 使能SOCA EPwm1Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; // SOCA在计数器清零时产生 EPwm1Regs.ETPS.bit.SOCAPRD = ET_1ST; // SOCA每一个事件产生一次 } void InitEPwm2(void) { // 初始化EPWM2 EPwm2Regs.TBPRD = 5999; // 设置周期为5999 EPwm2Regs.TBPHS.bit.TBPHS = 1200; // 相位为1200 EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 向上向下计数 EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 开启相位同步 EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 同步信号来自EPWMxSYNC EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // 静态比较 EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // CMPA在计数器清零时被加载 EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm2Regs.AQCTL.bit.CAU = AQ_CLEAR; // 当CMPA小于计数器值时,清空EPWMxA EPwm2Regs.AQCTL.bit.CAD = AQ_SET; // 当CMPA大于计数器值时,设置EPWMxA EPwm2Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 使能死区时间 EPwm2Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 死区时间时高电平有效 EPwm2Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 死区时间源为DBA EPwm2Regs.DBRED = 50; // 设置上升沿死区时间 EPwm2Regs.DBFED = 50; // 设置下降沿死区时间 EPwm2Regs.CMPA.bit.CMPA = 2500; // 初始化CMPA为2500 EPwm2Regs.ETSEL.bit.SOCAEN = 1; // 使能SOCA EPwm2Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; // SOCA在计数器清零时产生 EPwm2Regs.ETPS.bit.SOCAPRD = ET_1ST; // SOCA每一个事件产生一次 } void InitEPwm3(void) { // 初始化EPWM3 EPwm3Regs.TBPRD = 5999; // 设置周期为5999 EPwm3Regs.TBPHS.bit.TBPHS = 2400; // 相位为2400 EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 向上向下计数 EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 开启相位同步 EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 同步信号来自EPWMxSYNC EPwm3Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; // 静态比较 EPwm3Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm3Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // CMPA在计数器清零时被加载 EPwm3Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; EPwm3Regs.AQCTL.bit.CAU = AQ_SET; // 当CMPA小于计数器值时,设置EPWMxA EPwm3Regs.AQCTL.bit.CAD = AQ_CLEAR; // 当CMPA大于计数器值时,清空EPWMxA EPwm3Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 使能死区时间 EPwm3Regs.DBCTL.bit.POLSEL = DB_ACTV_HIC; // 死区时间时高电平有效 EPwm3Regs.DBCTL.bit.IN_MODE = DBA_ALL; // 死区时间源为DBA EPwm3Regs.DBRED = 50; // 设置上升沿死区时间 EPwm3Regs.DBFED = 50; // 设置下降沿死区时间 EPwm3Regs.CMPA.bit.CMPA = 2000; // 初始化CMPA为2000 EPwm3Regs.ETSEL.bit.SOCAEN = 1; // 使能SOCA EPwm3Regs.ETSEL.bit.SOCASEL = ET_CTR_ZERO; // SOCA在计数器清零时产生 EPwm3Regs.ETPS.bit.SOCAPRD = ET_1ST; // SOCA每一个事件产生一次 } void InitEPwmGpio(void) { // 初始化EPWM引脚 EALLOW; GpioCtrlRegs.GPAPUD.bit.GPIO0 = 1; GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1; GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1; GpioCtrlRegs.GPAPUD.bit.GPIO3 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO6 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO7 = 1; EDIS; } ``` 在这个例子中,我们使用了三个EPWM模块(EPWM1、EPWM2和EPWM3),每个模块都被初始化为三角波模式。在 `main()` 函数中,我们定义了一个 `epwm_cnt` 变量,用于计数器的计数。然后,我们使用一个无限循环来不断地更新计数器的值,从而生成三角波。 在 `InitEPwm1()`、`InitEPwm2()` 和 `InitEPwm3()` 函数中,我们使用了一系列的寄存器设置来初始化每个EPWM模块。这些设置包括周期、相位、计数模式、同步信号、比较模式、死区时间、比较器值等等。我们还使用 `InitEPwmGpio()` 函数来初始化EPWM引脚。 这个例子只是一个简单的示例,你可以根据自己的需求修改EPWM模块设置。同时,你需要了解更多关于F28335芯片和EPWM模块的知识,才能深入理解这个例子。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值