📄 网络adc____001.txt
字号:
tms320f2812进行AD的交流采样,输入波形是从信号发生器产生,50HZ正弦波,然后经过信号调理和电平抬高,使的输入到DSP的信号为0--3V,然后在进行DSP采样;可是采样的总是不正确;通过CCS软件的graph窗口观察time-frequence 的波形图形发现波形这个问题困饶我好久了,希望哪个做过AD交流采样的大哥给点建议吧;万分感谢:老是有问题;
本程序中用了定时器1的周期中断触发AD转换;且周期为100us;
//##################################################################################################
//###############################################电压电流采样控制生成PWM波形########################
//############################################## ########################
//##################################################################################################
//################################################ 作者:zswqq #########################
//################################################ 2007-8-8 #############################
#include "DA.h"
#include "DSP28_Device.h"
interrupt void ad(void);
interrupt void T1INT_isr(void);
Uint32 k;
Uint32 Loopcount;
Uint32 ConversionCount;
Uint32 RESULTA0[800];
Uint32 RESULTB0[800];
Uint32 comp;
float comp_ok1[4];
int const sina[]={0x0400,0x0420,0x0440,0x0460,0x0480,0x04A0,0x04BF,0x04DF,0x04FE,
0x051D,0x053C,0x055A,0x0578,0x0596,0x05B3,0x05D0,0x05ED,0x0609,0x0624,0x063F,0x0659,
0x0673,0x068C,0x06A5,0x06BC,0x06D4,0x06EA,0x0700,0x0715,0x0729,0x073C,0x074E,0x0760,
0x0771,0x0781,0x0790,0x079E,0x07AB,0x07B8,0x07C3,0x07CD,0x07D7,0x07DF,0x07E7,0x07ED,
0x07F3,0x07F7,0x07FB,0x07FD,0x07FF,0x0800,0x07FF,0x07FD,0x07FB,0x07F7,0x07F3,0x07ED,
0x07E7,0x07DF,0x07D7,0x07CD,0x07C3,0x07B8,0x07AB,0x079E,0x0790,0x0781,0x0771,0x0760,
0x074E,0x073C,0x0729,0x0715,0x0700,0x06EA,0x06D4,0x06BC,0x06A5,0x068C,0x0673,0x0659,
0x063F,0x0624,0x0609,0x05ED,0x05D0,0x05B3,0x0596,0x0578,0x055A,0x053C,0x051D,0x04FE,
0x04DF,0x04BF,0x04A0,0x0480,0x0460,0x0440,0x0420,0x0400,0x03E0,0x03C0,0x03A0,0x0380,
0x0360,0x0341,0x0321,0x0302,0x02E3,0x02C4,0x02A6,0x0288,0x026A,0x024D,0x0230,0x0213,
0x01F7,0x01DC,0x01C1,0x01A7,0x018D,0x0174,0x015B,0x0144,0x012C,0x0116,0x0100,0x00EB,
0x00D7,0x00C4,0x00B2,0x00A0,0x008F,0x007F,0x0070,0x0062,0x0055,0x0048,0x003D,0x0033,
0x0029,0x0021,0x0019,0x0013,0x000D,0x0009,0x0005,0x0003,0x0001,0x0000,0x0001,0x0003,
0x0005,0x0009,0x000D,0x0013,0x0019,0x0021,0x0029,0x0033,0x003D,0x0048,0x0055,0x0062,
0x0070,0x007F,0x008F,0x00A0,0x00B2,0x00C4,0x00D7,0x00EB,0x0100,0x0116,0x012C,0x0144,
0x015B,0x0174,0x018D,0x01A7,0x01C1,0x01DC,0x01F7,0x0213,0x0230,0x024D,0x026A,0x0288,
0x02A6,0x02C4,0x02E3,0x0302,0x0321,0x0341,0x0360,0x0380,0x03A0,0x03C0,0x03E0};
// Prototype statements for functions found within this file.
void main(void)
{
InitSysCtrl();
EALLOW;
GpioMuxRegs.GPAMUX.all=0x00FF;
GpioMuxRegs.GPADIR.all=0x00FF;
//GpioMuxRegs.GPBMUX.all=0x00FF;
EDIS;
DINT;
IER = 0x0000;
IFR = 0x0000;
InitPieCtrl();
InitPieVectTable();
InitAdc();
k=0;
EALLOW; // This is needed to write to EALLOW protected registers
PieVectTable.ADCINT=&ad;
PieVectTable.T1PINT=&T1INT_isr;
EDIS; // This is needed to disable write to EALLOW protected registers
PieCtrl.PIEIER1.bit.INTx6=1;
PieCtrl.PIEIER2.bit.INTx4=1;
// Enable INT14 which is connected to CPU-Timer 2:
IER|= M_INT1|M_INT2;
//KickDog();--
// Enable global Interrupts and higher priority real-time debug events:
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
/*while(AdcRegs.ADC_ST_FLAG.bit.SEQ1_BSY==0)
{
AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;
}//从空闲模式启动SEQ1;*/
Loopcount=0;
ConversionCount=0;
//配置事件管理器EVA;
// EvaRegs.T1CMPR=0x0d2f;
// EvaRegs.T1PR=0x0ea6; ;
// EvaRegs.GPTCONA.bit.T1TOADC=1;//采用定时器中断采样;
// EvaRegs.T1CON.all=0x1042;
EvaRegs.T1PR=0x0ea6; //7266
EvaRegs.T1CMPR=0x0d2f; //6457
EvaRegs.EVAIMRA.bit.T1PINT=1;
EvaRegs.EVAIFRA.bit.T1PINT=1;
EvaRegs.GPTCONA.bit.T1TOADC=1;//采用定时器中断采样;
EvaRegs.CMPR1=0x0c00; //6000
EvaRegs.CMPR2=0x1400; //12000
// EvaRegs.CMPR3=0x00cf; //317
EvaRegs.T1CON.all=0x1042;
EvaRegs.ACTR.all=0x0666;
EvaRegs.DBTCONA.all=0x0000;
EvaRegs.T1CNT=0;
EvaRegs.COMCONA.all=0xa600;
while(1)
{
KickDog();
Loopcount++;
}
}
interrupt void ad(void)
{
RESULTA0[ConversionCount]=AdcRegs.RESULT0>>2;
RESULTA0[ConversionCount]+=AdcRegs.RESULT2>>2;
RESULTA0[ConversionCount]+=AdcRegs.RESULT4>>2;
RESULTA0[ConversionCount]+=AdcRegs.RESULT6>>2;
RESULTA0[ConversionCount]+=AdcRegs.RESULT8>>2;
// RESULTB0[ConversionCount]+=AdcRegs.RESULT10>>2;
// RESULTA0[ConversionCount]+=AdcRegs.RESULT12>>2;
// RESULTB0[ConversionCount]+=AdcRegs.RESULT14>>2;
RESULTA0[ConversionCount]+=RESULTA0[ConversionCount]/4;
* DA_PORT0 =RESULTA0[ConversionCount];
// comp_ok1[ConversionCount]=((float)RESULTA0[ConversionCount])*3.0/65520.0;
// comp_ok2[ConversionCount]=((float)RESULTB0[ConversionCount])*3.0/65520.0;
if(ConversionCount==799)
{
ConversionCount=0;
}
else ConversionCount++;
AdcRegs.ADCTRL2.bit.RST_SEQ1=1;
AdcRegs.ADC_ST_FLAG.bit.INT_SEQ1_CLR=1;
PieCtrl.PIEACK.all=PIEACK_GROUP1;
return;
}
interrupt void T1INT_isr(void)
{
/* int flag;
flag=EvaRegs.EVAIFRA.all&0x0080;
if(flag!=0x0080)
{
EINT;
return;
}
// EvaRegs.GPTCONA.all=0x2856;
*/
if (k==799)
k=0;
else k++;
// paramit_PI.realtime_u=RESULTA0[ConversionCount];//输出电压采样;
comp=RESULTA0[ConversionCount];//输出电流采样;
// pid_control(¶mit_PI);//电压外环pi调节
EvaRegs.CMPR1=comp;
EvaRegs.CMPR2=comp;
EvaRegs.EVAIMRA.bit.T1PINT=1;
EvaRegs.EVAIFRA.all=BIT7;
PieCtrl.PIEACK.all=PIEACK_GROUP2;
}
//===========================================================================
// No more.
//===========================================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -