請各位幫我看看為什麼我的graph觀察的波行不管怎麼設置都是錯誤的
我用訊號產生器產生一個0~1.5V左右的100HZ的弦波,但CCS上顯示的都是錯誤波形
是哪裡設置錯了嗎?
我的斷點設在這
按網上的各種設置方法設了都沒用
附上代碼
#include <math.h>
#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File
#include "DSP2833x_Examples.h" // DSP2833x Examples Include File
#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz
#define ADC_CKPS 0x1 // ADC module clock = HSPCLK/2*ADC_CKPS = 25.0MHz/(1*2) = 12.5MHz
interrupt void cpu_timer0_isr(void);//定時采樣時間20kHz
void AD_read();//采樣值讀取
void InitAdc_configuration();
/*********采樣參數************/
float Iload_U=0.0,Iload_V=0.0,Iload_W=0.0;
float If_U=0.0,If_V=0.0,If_W=0.0;
float Vs_U=0.0,Vs_V=0.0,Vs_W=0.0;
float IC_U=0.0,IC_V=0.0,IC_W=0.0;
float ss=0.0,cc=0.0;
float IC_1=0.0,IC_2=0.0,IC_3=0.0;
float Vdc_temp=0.0,Vdc=0.0,Vdc1=0.0;
float Vx,Verror0,Verror;
void main(void)
{
InitSysCtrl();
InitCpuTimers();
#if (CPU_FRQ_150MHZ)
// Configure CPU-Timer 0,
//T=50us,fs=20k,
//CPU Timer0定時器週期寄存器值為7500
ConfigCpuTimer(&CpuTimer0, 150, 50);
#endif
#if (CPU_FRQ_100MHZ)
ConfigCpuTimer(&CpuTimer0, 100, 50);
#endif
InitAdc();
//Configure adc
InitAdc_configuration();
DINT;//禁用全局中斷
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;
PieVectTable.EPWM1_INT = &EPWM1_INT_ISR;
EDIS;
InitEPwm();
IER |= M_INT3;
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;//使能PIE級中斷,即Epwm1的事件中斷
EALLOW;
PieVectTable.TINT0=&cpu_timer0_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
// Enable Timer0 INT1 which is connected to Timer0 INT:
IER |= M_INT1;
// Enable CPU INT3 which is connected to TZ INT:
IER |= M_INT2;
// Enable TZ INTn in the PIE: Group 2 interrupt 1-3
//Rewrite by CCL Enable INT0
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
EnableInterrupts();
CpuTimer0Regs.TCR.bit.TSS=0;//start cputimer0
EINT;
ERTM;
for(;;)
{
;
}
}
void InitAdc_configuration()
{
AdcRegs.ADCTRL1.bit.ACQ_PS=15;
AdcRegs.ADCTRL1.bit.CONT_RUN=0;
AdcRegs.ADCTRL1.bit.SEQ_OVRD=0;
AdcRegs.ADCTRL1.bit.SEQ_CASC=1;
AdcRegs.ADCTRL1.bit.CPS=0;
AdcRegs.ADCTRL3.bit.ADCCLKPS=ADC_CKPS ;
AdcRegs.ADCTRL3.bit.SMODE_SEL=0;
AdcRegs.ADCMAXCONV.bit.MAX_CONV1=9;
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x8;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x9;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0xA;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x1;
AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x2;
AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x3;
AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x4;
AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x5;
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCST.bit.INT_SEQ2_CLR=1;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
AdcRegs.ADCTRL2.bit.RST_SEQ1=0;
AdcRegs.ADCTRL2.bit.RST_SEQ2=0;
AdcRegs.ADCTRL2.all = 0x2000;
void AD_read()
{
If_U=(1.702-(AdcRegs.ADCRESULT3>>4)*0.0007326)*53.1;
If_V=(1.689-(AdcRegs.ADCRESULT4>>4)*0.0007326)*53.5;
If_W=(1.682-(AdcRegs.ADCRESULT5>>4)*0.0007326)*52;
AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1;
}
//
interrupt void cpu_timer0_isr(void)
{
IFR=0x0000;
PieCtrlRegs.PIEIFR3.all=0;
PieCtrlRegs.PIEACK.all=0xffff;
AD_read();
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
EINT;
}