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.

[参考译文] CCS/TMS320F28379D:如何在 F28379D 中链接"IQmathTables"以便在程序中生成正弦 PWM?

Guru**** 2031750 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/568344/ccs-tms320f28379d-how-can-i-link-iqmathtables-in-f28379d-for-sine-pwm-generation-in-my-program

器件型号:TMS320F28379D

工具/软件:Code Composer Studio

#include "F28x_Project.h"//设备头文件和示例 include 文件
#include "math.h"
#include "IQmathLib.h"


extern void InitSysCtrl(void);
extern void InitPieVectTable (void);
extern void InitPieCtrl (void);

中断空 ePWM1A_COMPARE_ISR (空);
#pragma DATA_SECTION (sine_table、"IQmathTables");
_iq30 sine_table[512];


void main (void)


InitSysCtrl();
InitPieCtrl();// PIE 表的基本设置
InitPieVectTable();//将默认 ISR 复制到 PIE


EALLOW;
PieVectTable.EPWM1_INT =&ePWM1A_COMPARE_ISR;
WdRegs.WDCR.ALL = 0x00AF;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 1;// ePWM1A
GpioCtrlRegs.GPAPUD.bit.GPIO0 = 0;//启用上拉
EDIS;


EPwm1Regs.TBCTL.ALL = 0;//默认值
EPwm1Regs.TBCTL.bit.CLKDIV = 0;// CLKDIV = 1;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0;// HSPCLKDIV = 1
EPwm1Regs.TBCTL.bit.CTRMODE = 2;//向上/向下计数模式
EPwm1Regs.AQCTLA.ALL = 0x0006;// ZRO=set;PRD=clear
EPwm1Regs.TBPRD = 2250;// 500kHz PWM 频率
// TBPRD = FCPU /(2 * fpwm * CLKDIV * HSPCLKDIV)
// TBPRB = 90MHz /(2 * 500kHz * 1 * 1)
EPwm1Regs.CMPA.bit.CMPA = 1125;//初始占空比50%
EPwm1Regs.AQCTLA.ALL = 0x0060;
// CMPA up =设置;CMPA down =清除
EPwm1Regs.ETSEL.ALL = 0;
EPwm1Regs.ETSEL.bit.INTEN = 1;//启用 ePWM1 int
EPwm1Regs.ETSEL.bit.INTSEL = 5;// CMPA 向下匹配
EPwm1Regs.ETPS.bit.INTPRD = 1;//第一个事件
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;// ePWM1

IER |= 4;//启用 INT3
EINT;//全局 int 启用

while (1)

EALLOW;
WdRegs.WDKEY。ALL = 0x55;//服务密钥#1
WdRegs.WDKEY。ALL = 0xAA;//服务密钥#2
EDIS;


中断空 ePWM1A_COMPARE_ISR (空)

静态无符号 int 索引= 0;
EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD -_IQsat (_IQ30mpy ((sine_table[index]+_IQ30 (0.9999)))/2、EPwm1Regs.TBPRD)、EPwm1Regs.TBPRD、0);

如果(index++>511)索引=0;
EPwm1Regs.ETCLR.bit.INT = 1;//清除 ePWM1中断标志
PieCtrlRegs.PIEACk.all = 4;// PIE 组3的 ACK

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    IQMath 库的.lib IQsinTable 中已有一个正弦表。 您可以通过声明来访问它

    extern iq30 IQsincTable[];

    文件中。 您不必使用 pragma 放置它、它已放置在"IQmathTables"部分中

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Vishal。

    我将执行您的建议。

    我在构建过程中遇到了一些错误、但我解决了这个问题、以便成功构建。
    但是、它没有正常运行、所以除了这个"IQmathTables"问题之外、这个代码中的一切都是正常的还是不正确的? 如果可能、您是否可以进行检查?
    我想使用此代码来生成 SPWM。