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.

[参考译文] TMS320F28379D:正弦波和三角波的 CMPSS 中的误差

Guru**** 2540720 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1378343/tms320f28379d-error-in-cmpss-with-sine-and-triangular-wave

器件型号:TMS320F28379D
Thread 中讨论的其他器件:C2000WARE

工具与软件:

你好。

面对使用 cmpss 获得占空比的问题,我想比较正弦波和三角波并产生占空比,如果正弦波>三角波 PWM 应该是50%其他0使用 cmpss

这是代码,产生正弦波和三角波  ,但不产生占空比,你能告诉我在这个代码中有什么错误吗  

#include "F28x_Project.h"
#include "driverlib.h"
#include "device.h"
#include

#define NUM_SAMPLES 100
#define SINE_FREQUENCY 50
#define Triangal_frequency 25.
#define SAMPLING_RATE 5000
#define DAC_MAX_VALUE 4095
#define PI 3.14159265358979323846

float sine_wave[NUM_SAMPLES];
float Triangal_wave[NUM_SAMPLE];

void DAC_init ();
void DAC_WRITE_DACA (uint16_t 值);
void DAC_WRITE_DACB (uint16_t 值);
void generate_sine_wave();
void generate_detail_wave();
void initEPWM1 (void);
void PinMux_init ();
void CMPSS_init (void);

void main (void)

device_init();
device_initGPIO();
Interrupt_initModule();
interrupt_initVectorTable();
PinMux_init();
SYSCTL_disablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);
initEPWM1();
CMPSS_INIT ();
SYSCTL_enablePeripheral (SYSCTL_PERIPH_CLK_TBCLKSYNC);
EINT;
ERTM;

dac_init();
generate_sine_wave();
generate_detangal_wave();

while (1)

内部 j;
对于(j = 0;j < NUM_SAMPLES;j++)

uint16_t DIGITAL_SINE_VALUE =(uint16_t)(SINE_Wave[j]* DAC_MAX_VALUE/3.3);
uint16_t digital_tripletal_value =(uint16_t)(Triangal_wave[j]* DAC_MAX_VALUE/3.3);

DAC_WRITE_DACA (digital_sine_value);
DAC_WRITE_DACB (DIGITAL_TRIGANCE_VALUE);

如果(Cmpss1Regs.COMPSTS.bit.COMPHSTS == 1){
EPwm1Regs.CMPA.bit.CMPA = EPwm1Regs.TBPRD/2;//设置50%占空比
其他{
EPwm1Regs.CMPA.bit.CMPA = 0;//设置0%占空比
}

DELAY_US (1000000 / SAMPLING_RATE);
}
}
}


void DAC_init()

EALLOW;
//初始化 DAC-A
DacaRegs.DACCTL.bit.DACREFSEL = 1;// Use internal reference (使用内部基准)
DacaRegs.DACCTL.bit.LOADMODE = 1;// Load DACVALS register (从 DACVALS 寄存器加载 DACVALS)
DacaRegs.DACOUTEN.bit.DACOUTEN = 1;// Enable DAC output

//初始化 DAC-B
DacbRegs.DACCTL.bit.DACREFSEL = 1;// Use internal reference (使用内部基准)
DacbRegs.DACCTL.bit.LOADMODE = 1;// Load DACVALS register (从 DACVALS 寄存器加载 DACVALS)
DacbRegs.DACOUTEN.bit.DACOUTEN = 1;// Enable DAC output
EDIS;
}

void DAC_WRITE_DACA (uint16_t 值)

DacaRegs.DACVALS.bit.DACVALS = value;
}

void DAC_WRITE_DACB (uint16_t 值)

DacbRegs.DACVALS.bit.DACVALS = value;
}

void generate_sine_wave()

内部 j;
float time_step = 1.0/SAMPLING_RATE;

对于(j = 0;j < NUM_SAMPLES;j++)

float time = j * time_step;
sine_wave[j]= 1.65 + 1.65 * sin (2 * pi * sine_frequency * time);
}
}

void generate_detail_wave()

内部 j;
浮点周期= 1.0/三角频率;
float time_step = period / NUM_SAMPLES;

对于(j = 0;j < NUM_SAMPLES;j++)

float time = j * time_step;
float phase = fmod (time * Triangal_frequency、1.0);
if (PHASE < 0.5)

Triangal_wave[j]= 1.65 + 1.65 *(2 *相位);//升序部分以1.65V 为中心
}
设计

Triangal_wave[j]= 1.65 + 1.65 *(2 - 2 *相位);//降序部分以1.65V 为中心
}
}
}

void initEPWM1()

EPwm1Regs.TBPRD = 4095;
EPwm1Regs.TBPHS.bit.TBPHS = 0x0000;
EPwm1Regs.TBCTR = 0x0000;

EPwm1Regs.CMPA.bit.CMPA = 2047;

EPwm1Regs.TBCTL.bit.CTRMODE = tb_count_updown;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm1Regs.AQCTLA.bit.CAU = AQ_clear;
EPwm1Regs.AQCTLA.bit.CAD = AQ_SET;

//配置 ePWM1以将 CMPSS 用于跳闸区域
EALLOW;
EPwm1Regs.TZSEL.bit.OSHT1 = 1;//一次性跳闸1
EPwm1Regs.TZCTL.bit.tZA = TZ_FORCE_HI;//在 TRIP A 上强制设置为高电平
EDIS;
}

void PinMux_init()

EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=1;
GpioDataRegs.GPACLEAR.bit.GPIO0=1;
EDIS;
}

void CMPSS_init (void)

EALLOW;

//启用 CMPSS1并将 DAC 设置为负输入
Cmpss1Regs.COMPCTL.bit.COMPDACE = 1;//启用 DAC

//配置比较器负输入(三角波)
Cmpss1Regs.COMPCTL.bit.COMPLSOURCE = 0;//将 DAC 用作比较器负输入
Cmpss1Regs.DACHVALS.bit.DACVAL = 2047;//设置中点(1.65V)

//配置比较器正输入(正弦波)
Cmpss1Regs.COMPCTL.bit.COMPHSOURCE = 1;//将 DAC 用作比较器正输入

//配置比较器的输出
Cmpss1Regs.COMPCTL.bit.COMPHINV = 0;//正常极性
Cmpss1Regs.COMPCTL.bit.CTRIPHSEL = 1;// CTRIPH 为 CTRIPOUT (已过滤)

//配置数字滤波器设置(如果需要)
Cmpss1Regs.COMPHYSCTL.bit.COMPHYS = 0;//无迟滞

//配置 ePWM1以将 CMPSS 用于跳闸区域
EPwm1Regs.TZSEL.bit.OSHT1 = 1;//一次性跳闸1
EPwm1Regs.TZCTL.bit.tZA = TZ_FORCE_HI;//在 TRIP A 上强制设置为高电平

EDIS;
}

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

    您好!

    请允许我明天回复您。

    此致、

    Ben Collier

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

    您好!

    Unknown 说:
    这是代码,产生正弦波和三角波但 不产生占空比 ,你能告诉我在这个代码中出了什么问题吗 ?[/报价]

    我们无法为您调试此代码。 如果您有任何具体问题、我们很乐意回答。  

    我强烈建议您先了解 C2000WARE 中的示例。

    此致、

    Ben Collier