This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
我们希望就与下面的 E2E 主题相关的此咨询寻求您的帮助。
e2e.ti.com/.../launchxl-f280049c-launchpad-for-foc-application
您好 Danilo、
我们的专家将在星期一之前就此问题与您进行讨论。
让我们看看两个不同的问题:
下面 的问题是、您是否正在尝试生成设定数量的 PWM 脉冲?
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm ]对于我的控制环路、我必须使用确定 ePWM 信号数量来驱动步进电机。2.a 您是否尝试查看此函数中的数学运算是如何工作的?
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm "]Delay_US (a) F28x_usDelay ((( long double) A * 1000.0L)/(long double) cpu_rate)- 9.0L)/ 5.0L
此函数 F28x_usDelay 以汇编语言编写、并计算了由 SW 开销引起的所有延迟。 这就是9和5的确定方式。 软件文件中对此进行了简短的描述。
我将让 罗燕明 回答您的电机控制问题。
您使用的是什么算法和示例代码? 为什么您需要知道 用于驱动步进电机的 EPWM 信号数量?
通常、我们使用固定的 PWM 频率来实现电机驱动、包括 步进电机、ePWM 信号的数量将根据电机的运行速度而变化。
您可以参考 controlSUIT 中的步进电机示例代码、尽管该示例基于 F2803x。
C:\ti\controlSUITE\development_kits\DRV8412-C2-Kit_v131\Stepper
您好、Yanming、
请参阅以下客户的回复。
您是否使用固定频率 PWM? PWM 的占空比是多少? 是否会根据控制环路更改占空比? PWM 输出是否用于步进电机电源模块的 FET 栅极驱动器?
您可以参考 C2000Ware 中的示例 ex2、3、11或13来设置周期寄存器或比较寄存器、以实现所需的 EPWM 信号频率和占空比。
C:\ti\c2000\C2000Ware_ \driverlib\f28004x\examples\ePWM
您好、Yanming、
根据我们的客户、
对于我的项目、PWM 信号用于更改电机中的电气位置。 PWM 输出 不 用于步进电机电源模块的 FET 栅极驱动器、相应的功能由驱动器板实现。 我使用占空比为50的固定频率 PWM、这在控制环路中不会改变。
C2000中的 ePWM 模式已配置、它现在可以输出固定频率的 PWM 信号。
我已经阅读了所有示例代码,还阅读了应用报告《使用 TMS320F2837x 的三相永磁同步电机的传感磁场定向控制》。 但是、我使用的 FOC 环路是不同的、因为不同的硬件。
我已经尝试了很多方法、但仍然找不到用于生成设定数量的 PWM 信号的算法。
理想情况下、CPU 运行一个定时器代码、并且 PWM 信号的数量与时间周期成正比。
我已经尝试将代码 “DELAY_US(A)” 用作计时器来生成 PWM 信号,但 A 必须是一个常数,但 PWM 信号的数量不是恒定的,该值将在[0,31]中变化。
如果 a 是变量、则代码 DELAY_US 不可用。
此致、
Danilo
客户是否有任何示例波形来显示他们需要什么? 它们可以直接使能 ePWM 中断来计数数字、然后关闭/打开输出、从而生成精确 的 PWM 信号数量。
您好、Yanming、
以下是我们客户的评论。
感谢您的快速回复。
图片是我请求的 PWM 信号。 PWM 信号的数量是关键、并且不是恒定的。
通过启用/禁用 ePWM 时钟来关闭/打开 PWM 输出、对吧?
好的、我将再次尝试 ePWM 中断。 但是、如何计算数字呢? 我找不到这样的代码。 在示例代码中、ePWM 中断函数实现占空比的变化。
此致、
Danilo
您可以查看上面提到的示例。 您可以计算 PWM 信号的数量、在 ISR 中打开/关闭 PWM 输出。 您可以通过将周期值(TBPRD)的一半(如 CMPA/B 的一半)设置为 CMPA/B 来将 PWM 占空比固定为50%、而不会再次更改。
C:\ti\c2000\C2000Ware_ \driverlib\f28004x\examples\ePWM
您好、Yanming、
我收到了我们客户的另一个跟进询问。
我认为没有必要使用 CLB。 所需的 PWM 应易于由 ePWM 模块直接生成。
是的、如果您希望 CLB 能够生成更灵活的波形、则可以使用 CLB。 您可以在 C2000Ware for CLB 中找到一些示例、其中包括 PWM 增强功能。
您好、Yanming、
无需为触发区启用任何中断、只需使用以下代码即可禁用 PWM 输出
EALLOW;
EPwm2Regs.TZFRC.bit.OST = 1;
EDIS;
然后使用以下代码在需要 PWM 输出时再次启用 PWM 输出。
EALLOW;
EPwm2Regs.TZCLR.bit.CBC = 1;
EPwm2Regs.TZCLR.bit.INT = 1;
EDIS;
或者、您无需启用/禁用 PWM 输出、只需设置 EPwm2Regs.CMPA.half-CMPA > EPwm2Regs.TBPRD 以强制 PWM 输出为高电平/低 电平、然后将 EPwm2Regs.CMPA.half CMPA 设置为活动值以启用 PWM 输出。
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4222874 #4222874"]您可以根据获取所需的 PWM 输出脉冲来更改计数阈值。
您好、Yanming、
请参阅以下客户的回复。
感谢您的帮助、这样我就可以成功使用 ePWM 模式创建特定数量的 PWM 信号。
现在、我想使用一 个中断 epwm2_ISR 来生成 PWM 信号、使用另一个更高的中断、例如 epwm2_tz_ISR 或 timer0_ISR 来执行控制计算。
我已经阅读了中断嵌套指南和示例代码:swpriortized_interrupts_cpu01。
首先、CPU 应输入中断3.2 epwm2_isr;它运行一些代码、然后输入更高的中断2.2 epwm2_tz_isr。
我认为我应该在“main 函数”中设置中断3.2,然后在其中修改中断2.2
我对该代码有一些疑问
如果您有一些详细的示例代码、这将非常好。
此致、
Danilo
您好、Yanming、
根据我们的客户、
最后、我完成了控制环路。 无需使用中断嵌套。
现在、我将运行一些测试、我需要程序记录或下载一些状态变量、当程序运行时、状态变量会随时间的推移而绘制。
CCS 中是否有组件可实现该任务?
我已在下面的 E2E 链接中发布此附加查询。
e2e.ti.com/.../launchxl-f280049c-record-or-download-some-state-variables
此致、
Danilo
IER |=M_in3 ->这将启用当前中断 通道、硬件 在 接收中断时默认禁用该中断通道。 IER &=M_in3禁用 用户配置的优先级低于当前中断的所有中断
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686"]要输入中断2,我认为此行应该是 IER |=M_IN2, 而不是3
如果 您正确配置了优先级、所提供的代码段将确保所有具有更高优先级的中断能够嵌套低优先级的中断。 用户只需确保使用正确的宏即可。 对于中断 x.y、使用宏 Mintx、M_INTx、MGX_y、宏的定义 方式使所有较低优先级的中断 都被禁用。
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686]]在我看来,在“EINT”之后,程序应输入更高的中断2.2,之后,程序将生成中断2,这意味着我的代码应插入到“//在此处插入 ISR 代码…”区域中。 是这样吗?[/引述]是的、如果在 EINT 之后有一个挂起的2.2中断、它将自动分支到 INT2.2 ISR。 在 INT3.2 ISR 中、您应该只有用于处理 INT3.2的代码
[引用 userid="432284" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1133158/launchxl-f280049c-epwm/4224686 #4224686"]是否需要最后两行?仅用于演示目的。 这使得用户能够查看中断的处理顺序
此致、
Veena