利用28335的epwm产生spwm波的总结

本文详细介绍了如何利用28335 DSP的ePWM模块产生SPWM波,包括时间基准、计数器比较、动作限定、死区控制和PWM斩波等关键步骤。通过配置TB、CC、AQ、DB和ET模块,实现倍频SPWM波的生成,并讨论了同步、死区时间设置和错误控制等细节。

一、SPWM设计简介

设计的内容是产生倍频的SPWM波,也即是用的是同一个调制波,两个桥臂上的载波相差180度。产生spwm时,利用TB产生载波,也即是三角波。(计数方式采用增减模式即可),CC中放的是要比较的数值,当TB中的值等于CC中的值就可产生相应的动作。此动作可由AQ进行设定。当达到一定条件的时候也可以触发中断。我采用的是规则采样法,所以一个载波周期后产生中断,在此中断内修改比较寄存器的值。      

二、ePWM概要                        

28335有多个epwm模块,每个epwm模块可以产生2个波。这是28335的epwm模块的结构图及外部连接图。



其中EPWMxSYNCI为时间基准同步输入,用来将时间基准计数器和ePWM模块同步。对于第一个ePWM模块,该信号来自外部引脚,而其他模块该信号来自其他ePWM模块。

EPWMxSYNCO为时间基准同步输出。

三、ePWM各子模块讲解


ePWM模块总共有7个模块:

3.1时间基准模块   ----------TB    

为输出PWM产生时钟基准TBCLK,配置PWM的时钟基准计数器TBCTR,设置计数器的计数模式,配置硬件或软件同步时钟基准计数器,确定ePWM同步信号输出源;

TBCTL(控制寄存器)配置定时器的时钟、计数模式、同步模式

TBSTS(状态寄存器)

TBPHSHR(高速PWM用)

TBPHS(相位寄存器)计数器的起始计数位置,例如寄存器为0x0100则计数器从0x0100开始计数

### DSP28335 SPWM 形生成代码示例 对于 TI 的 DSP28335 芯片,SPWM(正弦脉宽调制)形可以通过 ePWM 模块实现。具体来说,可以利用 TBCTR 作为载信号,并通过 CMPA 不断更新其值来形成调制[^2]。 下面是一个简单的 C 语言代码片段,用于在 DSP28335 上生成单相 SPWM : ```c #include "DSP2833x_Device.h" // Device Headerfile and Examples Include File void InitEPwm1Example(void); float sine_table[200]; // 正弦表数组定义, 需要预先计算并填充此表格 // 初始化 EPWM1 模块配置函数 void InitEPwm1Gpio(void){ EALLOW; GpioCtrlRegs.GPAMUX1.bit.EPWM1A = 1; // 将 GPIO 设置为 EPWM1A 功能 EDIS; } void InitEPwm1Example(){ EPwm1Regs.TBCTL.bit.CTRMODE=TB_COUNT_UPDOWN; // 计数模式设为上下计数 EPwm1Regs.TBPRD=30000-1; // 周期寄存器设置 (调整频率) EPwm1Regs.AQCTLA.bit.ZRO=3; // 在零比较时清零动作 EPwm1Regs.AQCTLA.bit.PRD=2; // 在周期结束时置位动作 EPwm1Regs.CMPA.HALFCYCLE=sine_table[0]*100; // 初始 CMPA 寄存器加载第一个正弦值 } ``` 为了完成完整的三相 SPWM 控制,在上述基础上还需要扩展到其他两个 PWM 输出通道,并引入相应的相位差处理逻辑以满足每相之间保持 120 度电角度的要求[^1]。 此外,实际应用中通常会有一个预构建好的正弦查找表 `sine_table[]` 来存储不同采样点上的理想正弦数值,这些数据会在定时中断服务程序里被循环读取并写入对应的 CMPA/CMPB 寄存器中去动态改变占空比,进而产生近似的正弦输出形式。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值