芯片:MSP430FR6972
问题描述:
我使用的是ADC+TIM的采样方式,采样间隔约1ms,每次开启采样时,最开始的数据一直不准(大约有80多个不准点,之后就好了),所以请教一下这是什么原因呢?
/* 采样定时器配置 */
void TimerA1_Init(void)
{
TA1CCTL0 = CCIE;
TA1CCR0 = 32; /* 0.9-1ms */
TA1CTL = TASSEL__ACLK | MC__UP; /* ACLK, UP mode */
}
/* ADC配置 */
void MSP_ADC_Config(void)
{
/* 打开相应电源 */
PowerSwitch(VDD_ADC,ENABLE);
PowerSwitch(ADC_BAT,ENABLE);
/* 开启内部参考,Vref=2.5V */
while(REFCTL0 & REFGENBUSY);
REFCTL0 |= REFVSEL_2 | REFON;
/* 开启ADC并设置采样时间 */
ADC12CTL0 = ADC12ON | ADC12SHT0_2 | ADC12MSC;
/* ADC12SC触发采样,序列通道采样, SMCLK/4 */ ADC12CTL1 = ADC12SHP |ADC12SHS_0 | ADC12CONSEQ_1 | ADC12SSEL_3 | ADC12PDIV_1;
/* ADC通道配置: ADC_I->CH0, ADC_BAT->CH13 */
ADC12MCTL0 = ADC12VRSEL_1 | ADC12INCH_0;
ADC12MCTL1 = ADC12VRSEL_1 | ADC12INCH_13 | ADC12EOS;
ADC12IER0 = ADC12IE1;
/* Wait for reference generator to settle */ while(!(REFCTL0 & REFGENRDY)); ADC12CTL0 |= ADC12ENC;
TimerA1_Init();
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer1_A0_ISR(void)
{
ADC12CTL0 |= ADC12SC;
}
#pragma vector=ADC12_VECTOR
__interrupt void MSP_ADC_ISR(void)
{
if(ADC12IV & ADC12IV_ADC12IFG1)
{
Device_Status.Cur_Sampval[Device_Status.Sample_Num++]=ADC12MEM0;
Device_Status.Status_Info.Bat_Vol_B=ADC12MEM1;
/*
这里预留电池低电压处理程序
*/
if(Device_Status.Sample_Num == 20)
{
Device_Status.Full_Buff_Node=0;
Indicator_Task.Handle_Count += 1;
Indicator_Task.Cur_Handle_Flag=1;
#if USE_LP
LPM3_EXIT;
#endif }
else if(Device_Status.Sample_Num >= 40)
{
Device_Status.Sample_Num=0;
Device_Status.Full_Buff_Node=1;
Indicator_Task.Handle_Count += 1;
Indicator_Task.Cur_Handle_Flag=1;
#if USE_LP
LPM3_EXIT;
#endif }
} ADC12IV=0;
}
Susan Yang:
每次都会出现 开始的80多个不准点?有没有适当延长采样间隔?电池的电压是否稳定?
目前没有这个板子,我回头拿MSP430FR5969试一下
JIUGEN LI:
回复 Susan Yang:
嗯,每次开始采集的数据都不准确,采样间隔我没试过,因为这个采集配置以前用过所以我就直接拿来用了,只是以前没注意到这个情况,昨天调试才发现的所以想找找原因,我等会把这几个情况检查一下。
JIUGEN LI:
回复 JIUGEN LI:
80多个点我是估计的(起码有60多个),因为我一个周波20个点每次采集出来计算的RMS总是前几个周波值不对。我的截图没出现是因为暂停了仿真导致数据不是连续的。
JIUGEN LI:
回复 灰小子:
有可能,因为信号的有无是我用PC控制的,可能一开始就是不稳定的。电源我就不知道如何衡量了,参考电压使用的是REF3312应该比较稳定
JIUGEN LI:
回复 Susan Yang:
姐,我知道为什么不准了,是因为我开始采样时需要打开一个MOS管给运放部分电路供电,但是打开后的一段时间电源会出现一个尖峰,然后关电源的时候会出现一个下冲波形,导致采样不准确。现在不清楚MOS管开启和关闭为什么会那样,也不知道如何解决。
JIUGEN LI:
回复 灰小子:
我知道为什么不准了,就是电源的问题,使用时我需要通过一个MOS管来开关运放的电源,当MOS管通断时会使得电源产生一个波动(具体看下面的波形图),但是这个波动不知道如何去解决呀!
xyz549040622:
回复 JIUGEN LI:
开关打开和关闭瞬间本来就是这样,你试试RCD电路。
JIUGEN LI:
回复 xyz549040622:
你好,我这个只是一个简简单单的开关电路,加RCD那不就复杂了,有没有别的简单一点的办法,比如换三极管或者加电容什么的?我这个开关速度没要求。
JIUGEN LI:
回复 xyz549040622:
我刚才仿真加一个RC也有很好的效果