这是DS上的描述
void Calibration_1259(void)
{ Shield_SamplingInterrupt(); // ÆÁ±ÎÖжÏ
/*Set the gate control mode (PULSE bit = 0)*/
ADC_StartConv(); /*Start the ADS1259 conversions*/
DAC_Write(0x8000); /*Apply the appropriate input to the ADS1259 (zero)输出0V*/
delay_ms(20); /*Allow time for the input to completely settle*/
ADC_WR_CMD(OFSCAL_1259); /*Send the OFSCAL command, as appropriate*/
while(ADC_DRDY == 1);
ADC_StopConv();
delay_ms(10);
ADC_StartConv(); /*Start the ADS1259 conversions*/
DAC_Write(0xFFFF); /*Apply the appropriate input to the ADS1259 (full-scale)输出2.5V*/
delay_ms(10); /*Allow time for the input to completely settle*/
ADC_WR_CMD(GANCAL_1259); /*Send the OFSCAL command, as appropriate*/
while(ADC_DRDY == 1);
ADC_StopConv();
Open_SamplingInterrupt();
}
这是我根据数据手册描述写的校准程序。
校准后的读到的值完全不对。
望TI工程师指导
Martin:
你的系统是还有一个DAC的输出给ADS1259?
在你的程序中没看到设置 PLUSE 位; 没看到你在给ADS1259输入并等该输入稳定后读取ADS1259的转换结果; 没看到设置OFSCAL寄存器设置的具体值是什么!
建议先了解一下ADC校准的一般流程,可以参考文档SPRAAD8A:http://www.ti.com/sitesearch/docs/universalsearch.tsp?searchTerm=SPRAAD8A#linkId=1&src=top
Zhang Xavier:
回复 Martin:
是的,我的系统还有一个DAC8832;
PLUSE无论是默认值还是在我的初始化程序中都为0;
DA输出电压后,等待20ms 足够电路电压稳定了。
发送校准cmd之后AD自动校准,OFC FSC 6个寄存器自动保存了校准之后的值,为什么主机还要获取转换结果呢?转换结果的值又有什么用呢?
这个片子应该不用靠主机校准的吧。
另外,上面的链接我也看了 。
我认为AD校准其实就是2点校准。
还有满量程校准的时候不是准确的2.5V 或者-2.5V,这个 有影响吗
Martin:
回复 Zhang Xavier:
如果是用的是芯片自动校准,那么校准的是芯片的,非系统的。
这种情况在校准过程中主机不需要获取转换结果。
gain error校准的时候,输入需要是准确的满量程!不然的话芯片认为你是满量程输入,实际采集结果并非满量程,那么校准后就会导致有增益误差
Zhang Xavier:
回复 Martin:
感谢你的帮助,目前如果只用offset校准的时候,结果正常。如果加上gain校准,结果出现很偏差,比如-1.2V得到的转换结果是-2.4V左右。
我的满量程确实不是准确的2.5V,大概有4mV的误差,但是我想结果应该不会有这么大的偏差。
ADS1259是有极性的AD,测量范围是-2.5V~+2.5V,gain校准的时候输出满量程是两者任意取一个吗?我总觉得有些问题。