TMS320F28069的EPWM模块同步设置

DSP28335时钟配置 一、控制外设时钟的寄存器有以下几个: PCLKCR0(外设时钟寄存器0):作用于上图标黄外设,所有时钟默认不开启 注:这里需要注意TBCLKSYNC这个寄存器,他是让ePWM模块时钟同步,且当检测到TBCLK的上升沿时,同步开启。另一个需要注意的是,及时这个寄存器没有使能ePWM,如果PCLKCR1使能了一样有效。 对于使能ePWM推荐做法: • Enable ePWM module clocks in the PCLKCR1 register. • Set TBCLKSYNC to 0. • Confi. 阅读详情
AI摘要

本文详细介绍了在TMS320F28069芯片中如何通过配置寄存器实现PWM模块间的同步。包括时钟同步、相位同步的方法,以及软件强制同步脉冲的应用,提供了具体的代码实例。

TMS320F28069的EPWM模块内有8个PWM模块,即PWM1,PWM2,...PWM8,如何把根据需要把这几个PWM模块同步起来呢?

1.每个PWM模块内一个TIME-BASE子模块,故首先需要把每个TIME-BASE子模块的时钟TBCLK同步起来。

根据技术参考手册可查知,同步TBCLK的操作如下:

代码如下:

​   EALLOW;
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
   EDIS;
   InitEPwm1Example();    
   InitEPwm2Example();
   EALLOW;
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
   EDIS;
​

2.除了需要TBCLK时钟同步之外,还需要对PWM的相位进行同步,在28069中各个PWM模块使用的是同步信号来进行同步

上图表明,各个PWM模块之间同步信号的传递,芯片已经通过EPWMxSYNCI与EPWMxSYNCO这二个接口已经连接好了,我们只需要通过寄存器来选择这二个接口的信号即可。从图中可知PWM1模块的EPWMxSYNCI为外部IO信号,这用于二片28069芯片之间的PWM同步。如果只是同一芯片内PWM模块之间的同步,故不需要外部IO信号。

每个EPWM模块的同步输入信号可以有三种:1、EPWMxSYNCI    2、软件强制同步脉冲  3、数字比较事件同步脉冲

其中EPWM1有点特殊,它的EPWMxSYNCI是来自于外部的IO,而其它的EPWM模块的EPWMxSYNCI来自于上一个EPWM模块的EPWMxSYNCO输出信号,即EPWM5模块的EPWMxSYNCI信号来自于 EPWM4模块的EPWMxSYNCO输出信号

每一个PWM模块可以通过配置接收或忽略这个同步输入信号 ,如果EPWM模块的TBCTL[PHSEN]=0,则表示该EPWM模块不接收上一个EPWM模块的同步信号;如果EPWM模块的TBCTL[PHSEN]=1,则当EPWM模块接收到同步信号时,TBPHS的内容自动加载到TBCTR寄存器中,达到与上一个EPWM模块同步的效果。

每一个EPWM模块的同步输出信号(即下一个EPWM模块的EPWMxSYNCI的输入信号)可以通过寄存器TBCTL[SYNCOSEL]来进行选择

现对各个值进行说明:

00 表示EPWM模块的同步输出信号与该模块的同步输入信号相同

01 表示EPWM模块的同步输出信号是该模块的计数器值等于0

10 表示EPWM模块的同步输出信号是该模块的计数器值等于CMPB

11 表示EPWM模块不产生同步输出信号 

如果用户想要实现如下功能:EPWM1模块在CTR=ZERO时同步EPWM2,EPWM3,EPWM4模块,则EPWM1的同步输出信号可以选择CTR=ZERO,则EPWM2的同步输入信号为EPWM1的CTR=ZERO,另外设置EPWM2的同步输出信号设置为00,则EPWM3的同步输入信号也为EPWM1的CTR=ZERO,再设置EPWM3的同步输出信号设置为00,则EPWM4的同步输入信号也为EPWM1的CTR=ZERO; 

上文提到,每一个EPWM模块的同步输入信号有三种:1、EPWMxSYNCI  2、软件强制同步脉冲  3、数字比较事件同步脉冲

但是EPWM模块如何选择自己的同步输入信号呢?假如EPWM3与EPWM4需要进行同步,EPWM3与EPWM2不进行同步信号,

则可以这样设置:由于EPWM3模块的EPWMxSYNCI接口不需要收到任何信号,可以在EPWM2中的TBCTL[SYNCOSEL]设置成11,则不输出同步输出信号给EPWM3。

软件强制同步脉冲信号 ,在EPWM模块中软件强制制步信号与EPWMxSYNCI是或的关系,可以通过EPWM模块内的TBCTL[SWFSYNC]来进行控制,当该位置1时,该模块就会自己产生一个同步脉冲信号给自己使用,而不需要上一个模块的EPWMxSYNCI的同步信号,这就提供了一个在PWM中断程序中,当检测到某个条件满足,需要同步多个EPWM模块时,只需要把TBCTL[SWFSYNC]置位即可。例如:EPWM3,EPWM4,EPWM5是同步模块,当EPWM3的计数器达到某一个值时,可以在EPWM3中断中置位TBCTL[SWFSYNC],则可以马上同步EPWM3,EPWM4,EPWM5;

下面的代码是EPWM1与EPWM2同步,EPWM3与EPWM4同步,EPWM2与EPWM3之间没有同步关系,

其中EPWM1的周期为0x1000,EPWM2的周期为0x2000,EPWM3的周期为0x1010,EPWM2的周期为0x1020,

EPWM1的同步输出信号为CTR=ZERO,EPWM3的同步输出信号为CTR=ZERO;

EPWM1,EPWM2,EPWM3,EPWM4产生中断的条件是各自的计数器值达到TBPRD,分别使用EPwm1TimerIntCount,EPwm2TimerIntCount,EPwm3TimerIntCount,EPwm4TimerIntCount各自表示产生中断的个数;

从代码我们可以分别,当EPWM1到达0x1000产生中断,计数器清零并发送同步信号给EPWM2 ,EPWM2的计数器也清零,故EPWM2的计数器永远不可能到达0x2000,故EPWM2的中断次数为 0;由于EPWM3与EPWM1之间不存在同步信号 ,故EPWM3不受影响,当EPWM3的计数器值达到0x1010时产生中断,计数器清零并发送同步信号给EPWM4,EPWM4的计数器也清零,故EPWM4的计数器永远不可能达到0x1010,故EPWM4的中断次数也为0;

   EALLOW;
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;      // Stop all the TB clocks
   EDIS;
   // Setup Sync
   EPwm1Regs.TBCTL.bit.SWFSYNC = TB_DISABLE;  
   EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;  
   EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; 
   EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;  
   EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; 
   // Allow each timer to be sync'ed
   EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
   EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;
   EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
   EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE;

   EPwm1Regs.TBPHS.half.TBPHS = 0;
   EPwm2Regs.TBPHS.half.TBPHS = 0;
   EPwm3Regs.TBPHS.half.TBPHS = 0;
   EPwm4Regs.TBPHS.half.TBPHS = 0;

   EPwm1Regs.TBPRD = 0x1000;
   EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;    // Count up
   EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;     // Select INT on Zero event
   EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE;  // Enable INT
   EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;           // Generate INT on 1st event

   EPwm2Regs.TBPRD = 0x2000;
   EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;     // Count up
   EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;      // Enable INT on Zero event
   EPwm2Regs.ETSEL.bit.INTEN = PWM2_INT_ENABLE;   // Enable INT
   EPwm2Regs.ETPS.bit.INTPRD = ET_1ST;            // Generate INT on 2nd event

   EPwm3Regs.TBPRD = 0x1010;
   EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;     // Count up
   EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;      // Enable INT on Zero event
   EPwm3Regs.ETSEL.bit.INTEN = PWM3_INT_ENABLE;   // Enable INT
   EPwm3Regs.ETPS.bit.INTPRD = ET_1ST;            // Generate INT on 3rd event
   EPwm4Regs.TBPRD = 0x1020;
   EPwm4Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;     // Count up
   EPwm4Regs.ETSEL.bit.INTSEL = ET_CTR_PRD;      // Enable INT on Zero event
   EPwm4Regs.ETSEL.bit.INTEN = PWM4_INT_ENABLE;   // Enable INT
   EPwm4Regs.ETPS.bit.INTPRD = ET_1ST;            // Generate INT on 1st event
   EALLOW;
   SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;         // Start all the timers synced
   EDIS;

经过实验可得,确实EPWM1与EPWM3产生中断,EPWM2与EPWM4不产生中断,结果如下:

 

如果想要EPWM1同步EPWM2,EPWM3,EPWM4,当EPWM1计数器值为0时,发送同步信号 给EPWM2,EPWM3,EPWM4,此时EPWM2,EPWM3,EPWM4的计数器也为0,由于EPWM1的周期为0x1000是最小的,故EPWM2,EPWM3,EPWM4永远不可能达到它们各自设置的周期值,故永远不会产生中断。代码上只需要把EPWM2,EPWM3的同步输出信号设置为同步输入信号,即EPWM2,EPWM3,EPWM4的同步输入信号都为EPWM1的CTR=ZERO; 

   // Setup Sync
   EPwm1Regs.TBCTL.bit.SWFSYNC = TB_DISABLE;  
   EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; 
   EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;  // Pass through
   EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;  // Pass through
   EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE;  

经过实验可知,确实只有EPWM1产生中断,EPWM2,EPWM3,EPWM4不产生中断

 

 

 

 

 

F28335 ePWM模块的相位TBPHS 参考文档:TIdeEPWM官方手册 《TMS320x2833x, 2823x Enhanced Pulse Width Modulator (ePWM) ModuleReference Guide》 一、代码如下: //PWM1模块给PWM2提供同步脉冲 // EPWM Module 1 configEPwm1Regs.TBPRD = 450; // Period = 900 TBCLK counts (增减模式下,周期是2倍的TBCLK ... 阅读详情

相关推荐

TI_DSP_F2808学习笔记3: ePWM

共有6组ePWM,每一组 ePWM 模块都包含以下 7 个模块:时基模块 TB、计数比较模块 CC、动作模块 AQ、死区产生模块DB、PWM 斩波模块 PC、错误联防模块 TZ、时间触发模块 ET。

Leo@Apas 1958

DSPF28069——时钟记录5

1、外设时钟控制寄存器PCLKCR0、PCLKCR1、PCLKCR2、PLCLKCR3 特殊的寄存器TBCLKSYNC:(时基时钟同步寄存器) 0:每个启用的ePWM模块中的TBCLK(时基时钟)都将停止。 (默认)。 但是,如果在PCLKCR1寄存器中设置了ePWM时钟使能位,则即使TBCLKSYNC为0,ePWM模块仍将由SYSCLKOUT提供时钟。 1:所有启用的...

weixin_41949409的博客 1914

TMS320F2806x CLA实战:从零构建ADC采样与ePWM实时控制系统(基于F28069)

本文详细介绍了TMS320F2806x CLA在实时控制系统中的应用,从ADC采样到ePWM输出的全流程实现。通过CLA与主CPU的协同工作,显著提升系统响应速度,适用于电机控制、数字电源等场景。重点解析了硬件配置、内存分配及性能优化技巧,并分享实际项目案例。

weixin_30785593的博客 618

DSP28335配置输出两路互补的带死区的PWM

(1)定时器时间基准TBCLK=SYSCLKOUT/(HSPCLKDIV*CLKDIV)=150/(2*1)=75MHZ。(8)死区原理:先断后通,故配置EPWMA上升沿延时,EPWMB下降沿延时。(4)选择上下计数模式:2*TBPRD/(75*10^6)=1/Fpwm。(5)当pwm频率设置为10KHZ时,由上式计算得TBPRD=3750。(9)死区时间计算:上升沿延时时间DBRED,下降沿延时时间DBFED。(3)“上下计数模式”的周期为“向上”或“向下”计数模式的2倍。2、EPWM原理(精简)

qq_49071486的博客 9582

【轮式平衡机器人】——TMS320F28069片内外设之ePWM

一个ePWM模块包括:时基模块、计数器比较模块、比较方式预设模块、死区模块、斩波模块、事件触发模块、行程区模块7个模块。ePWM模块在电机控制、电源管理和其他需要精确时间控制的应用中非常有用!

weixin_51658186的博客 2083

【轮式平衡机器人】——TMS320F28069片内外设之eCAP

TMS320F28069微控制器通常包含多个eCAP模块,每个模块可以独立配置和操作。这使得用户能够同时捕获和测量多个输入信号的事件。时间戳可以用于计算事件之间的时间间隔,从而确定输入信号的频率、周期或其他相关参数。灵活性。

weixin_51658186的博客 2181

DSP TMS320F2803x、TMS320F2806x CLA开发笔记(代码基于TMS320F28069 详解)

• 时钟速率与主 CPU 一致 (SYSCLKOUT)。• 一个独立的架构使得 CLA 能够独立于主 C28x CPU 之外进行算法执行。– 完整的总线架构:• 程序地址总线和程序数据总线• 数据地址总线、 数据读取总线、 和数据写入总线– 独立的 8 级管道。

Dasen 6770

【轮式平衡机器人】——TMS320F28069片内外设之ADC

步骤:采样、保持、量化、编码将采样电平(模拟值)转换为数字值的方法:直接比较型(并行ADC、逐次逼近型ADC);间接比较型(双积分型ADC)关键技术指标:分辨率、转换速率、量化误差、偏移误差、满刻度误差、线性度。其他技术指标:绝对精度、相对精度、微分非线性、单调性和无错码、总谐波失真和积分非线性。

weixin_51658186的博客 2427

DIY伺服驱动器方案:基于TMS320F28069的设计与实现

通过本次基于TMS320F28069的伺服驱动器方案设计,我不仅深入理解了伺服控制的原理和实现方法,还积累了丰富的硬件设计和软件开发经验。增加更多功能:例如多轴控制、网络通信功能等。优化控制算法:尝试引入更先进的控制算法,如模糊控制或自适应控制。提升硬件性能:采用更高性能的控制器和更先进的功率器件,进一步提升系统的性能和效率。希望这套方案能够为更多热爱DIY的朋友们提供参考,也欢迎大家一起交流和探讨!

AADNsLUt的博客 1402

TMS320F28069 DSP的ePWM模块配置与LCD1602可调频率输出实战

PWM(脉宽调制)是电机控制、开关电源和逆变器中的核心技术,通过调节占空比和频率来控制功率输出。在数字信号处理器(DSP)平台上,ePWM模块提供了高精度、可灵活配置的波形生成能力,其核心原理基于时基计数器、周期寄存器(TBPRD)、比较寄存器(CMPA/B)和动作限定器(AQCTLA/B)的协同工作。实际工程中,频率和占空比的动态调节需要关注影子加载、分频系数选择以及中断同步,否则可能出现波形异常或频率偏差。典型应用场景包括可调电源、电机调速和人机交互控制面板。本文以TMS320F28069为例,系统讲解

weixin_29171087的博客 169

TMS320F28069 ePWM频率调节:影子寄存器与同步机制详解

PWM频率调节是嵌入式实时控制的基础能力,其本质并非简单修改周期寄存器,而是涉及硬件计数器、影子寄存器加载时机与同步事件触发的协同机制。在DSP如TMS320F28069中,TBPRD作为影子寄存器,仅在TBCTR归零或SYNCIN上升沿等确定性时刻生效,确保多路PWM相位对齐与控制时序可预测。该机制支撑电机驱动、数字电源等高可靠性场景所需的微秒级确定性调度与抗抖动能力。理解影子寄存器行为与同步触发链,是实现安全变频、避免直通短路和纹波放大的关键技术前提。

weixin_28721917的博客 194

DSP TMS320F2803x、TMS320F2806x ePWM开发笔记(代码基于TMS320F28069)

【代码】DSP TMS320F2803x、TMS320F2806x ePWM开发笔记(代码基于TMS320F28069)

Dasen 2140

TMS320F28069 EPWM频率在线调节与LCD实时显示闭环设计

PWM频率调节是嵌入式实时控制的基础能力,其本质是时钟分频、计数器周期(TBPRD)配置与输出波形稳定性之间的精密协同。在C2000系列如TMS320F28069中,EPWM模块依赖SYSCLKOUT和TBCTL分频链路,任意一级配置偏差(如误选HSPCLK或忽略CLKDIV)都会导致实际频率偏离理论值;而TBPRD动态更新若未启用影子加载(TB_SHADOW)与SWFSYNC同步机制,将引发PWM毛刺与输出跳变。结合LCD人机交互时,更需解耦实时路径——将按键消抖、频率映射、字符串刷新等非确定性操作移出E

weixin_28273593的博客 189

AI智能棋盘依托TI TMS320F28069处理实时棋局状态

本文探讨TMS320F28069在AI智能棋盘中的应用,如何通过高速ADC、低延迟中断和实时处理能力实现对落子动作的精准捕捉与快速响应,构建稳定可靠的边缘智能系统。

weixin_36427956的博客 801

TMS320F28069 ePWM硬件时序深度解析:影子加载与三重时间域

PWM(脉宽调制)是电机控制、数字电源等实时系统的核心技术,其本质是通过精确控制高/低电平持续时间来调节功率。在C2000系列DSP如TMS320F28069中,ePWM并非软件可随意干预的外设,而是具备独立硬件状态机的协处理器。它严格依赖TBCLK节拍,在计数器(Time-Base)、比较事件(Counter-Compare)和动作限定器(Action Qualifier)三重嵌套时间域协同下运行。其中影子加载机制(Shadow Load)确保TBPRD/CMPA等关键寄存器仅在TBCTR==0等安全边界

weixin_29195615的博客 295

不用Root也能抓包?Android高版本HTTPS抓包的3种替代方案(含Charles技巧)

本文针对Android高版本HTTPS抓包难题,提供了三种无需Root权限的实战解决方案:利用VirtualXposed等虚拟沙盒环境、配置Postern等系统级代理工具,以及通过修改应用源码或网络安全配置。文章还详细解析了Charles抓包工具在非Root环境下的高级配置与排错技巧,帮助开发者在遵守安全规范的前提下,有效进行网络调试与监控。

http9protocoller的博客 647
上一篇: ISE14.7打开出现_pn.exe停止工作问题的解决方案
马中马
博客等级 码龄18年 112粉丝 26原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值