我用ADS1118做采集,输出偶尔跳变,有些时候是在12小时以内跳,有些时候是在48小时以内跳。
采集程序如下:
unsigned char SPI_Read(unsigned char SPI_Cmd)
{
UCB0TXBUF = SPI_Cmd;
while (!(IFG2 & UCB0TXIFG)); // USCI_B0 TX buffer ready?
//IFG2 &= ~UCB0TXIFG;
while (!(IFG2 & UCB0RXIFG)); // USCI_B0 RX buffer ready?
SPI_Data = UCB0RXBUF; // Increment expected slave value
//IFG2 &= ~UCB0RXIFG;
while (UCBUSY & UCB0STAT); // USCI_B0 busy?
return SPI_Data;
}
—————————————————————————————————————-
int main(void)
{
while(1)
{
SLV_Data1 = 0;
SLV_Data2 = 0;
SLV_Data3 = 0;
SLV_Data4 = 0;
P3OUT &= ~BIT7; //CS拉低
SLV_Data1 = SPI_Read(0xBB); //1011 1011
SLV_Data2 = SPI_Read(0x0A); //0000 1010
SLV_Data3 = SPI_Read(0x00); //1011 1011
SLV_Data4 = SPI_Read(0x00); //0000 1010
while(P1IN & BIT6); //DATA OUTPUT AND DATA READY
P3OUT |= BIT7; //CS拉低
}
}
Decapton Wang:
是用作哪种信号的采集?是否可以排除是信号源本身的跳动?具体是从哪个位置开始跳,跳到哪个位置?跳变过程后,能否自动恢复正常?
另,程序可以发到MSP430版面,请那边的专家帮你看一下。
HaiTao Li:
回复 Decapton Wang:
1、电压信号输入,电压信号输出(PWM实现)
2、可以排除信号源本身的问题。
3、可以排除计算过程的问题。
4、每次跳变是输出量程的1%左右,然后立刻恢复。
——————————————————————————————————–
1、问题可能存在于SPI采集部分,所以我把采集部分的代码放上来,请各位看看有没有问题
2、问题可能存在于输出环节,我每次取得采集值并计算出相应的占空比后,就会更新PWM的输出。PWM用TimerA实现的