关于TLC2543诡异问题,代码内附
不太会论坛贴图,所以截图和代码我放在后面附件压缩包内了
小弟最近在利用ATmega16L和TLC2543做模拟量数据采集问题。遇到TLC2543读数(dataout,以下简写SDO)不稳定的问题,在最近一周想尽了各种办法,问题仍是存在。初步断定是时序问题,可以就是无法解决,我把示波器的波形截图及代码粘贴如下,还望各位高人不吝指教。
- 硬件连接
除SDO引脚外,TLC2543各引脚直接接单片机,中间没有任何电路。单片机电源和2543电源接12VDC经过7805转换后的5V。tlc2543的REF+、REF-与单片机电源接在一次(暂时没有基准电源芯片,个人觉得这个应该不会是影响后面数据不准的原因,因为数据不是不稳定,而且有点诡异,具体怎么诡异详见第3条)
- 时序
小弟示波器只有两路,所以分别接入观察,SDI为1011,读取测试Vref/2的值。下图为片选信号。2543最大4Mhz,测试时特意降低clk频率。
- 数据SDO问题。
问题描述:
【测试方法】我在AI0和AI1通道上分别接了1.6V和3.3V的电压监测点(通过电阻分压,即5V通过3个电阻,这两个监测点取电阻上的信号)。然后我程序首先读取通道0的数据三次(第一次读出的抛弃,是上一个通道的值),每次间隔约500ms。然后延迟1S左右同样读取通道1的数据三次,每次间隔约500ms。全部读取完后发送给串口(串口程序已经在产品上应用过,没有任何问题),串口发送完毕后再开始循环读取这两个通道的值一次,读完后再通过串口发送,如此循环。
【诡异现象】
通过串口监测发现,有时通道0和1的值基本相同,通过其他电压测试发现,目前得出如下结论:
AI测试电压在0~2.5V之间时SDO读数为0x000~FFF之间变换,电压在2.5V~5V之间读数又从0x000~FFF之间变换。但并不是每次都这样,偶尔有几次又会正常,即2.5V以下为0~0x800之间,2.5V以上为0x800到0xFFF。
我把TLC的datasheet(英文)和时序图看了多几遍,也没有发现问题。在网上搜下,发现也有人出现这种情况,说是时序问题,不过没有说解决方法。还恳请高人不吝指点,我都快疯了,这一个星期就在不停的试试试试试试试试试试~~下图为3某次1.6V的测试电压时SDO波形图。
unsigned int read2543(unsigned char ch)
{
unsigned int ad;
unsigned char i;
unsigned char j;
unsigned char port;
port=ch; //ch为10进制通道号
ad=0;
//Tlc_clk_low;//clk置为低电平
//delay(3);
Tlc_cs_low;//cs置为低电平
port<<=4;
for(i=0;i<12;i++)
{
delay(3);
If(Tlc_sdo==0)
{
}
else
{
ad|=0x01;
}
if ((port&0x80)==0)//load SDI
{Tlc_sdi_low;}
else
{Tlc_sdi_hi;}
delay(10);
Tlc_clk_hi;
delay(30);
Tlc_clk_low;
port<<=1;
ad<<=1;
delay(30);
}
delay(1);
Tlc_cs_hi;
delay(3);
// Tlc_cs_hi;
ad>>=1;
return(ad);
}
Hi xia wang,
你描述的状况有些让我困惑,建议你先在示波器上观察波形而非单片机中直接采数以判断问题来源,并做如下实验,
1.在SDI为1011,1100和1101时查看SDO输出波形是否正确;
2.如正确,再尝试采集通道数据。如不正确,建议直接上传原理图,检查电源或者原理图连接问题,也可替换一块芯片再次测试。
3.如在示波器中可以通过波形检测,则再检查代码问题
你描述的状况有些让我困惑,建议你先在示波器上观察波形而非单片机中直接采数以判断问题来源,并做如下实验,
1.在SDI为1011,1100和1101时查看SDO输出波形是否正确;
->SDI为1011,1100和1101时SDO波形正常,目前采集通道值也正常,只是偶尔偏差比较大,约0.2V。采用波形观察时通过波形计算的值与单片机的读数完全一致,我们测试了好几种值,发现波形与读数都一致。但是我奇怪的是,原来我CLK频率较低,EOC的波形与CLK一模一样。提高CLK频率后,效果反而好多了。目前还没有搞清楚是怎么回事
2.如正确,再尝试采集通道数据。如不正确,建议直接上传原理图,检查电源或者原理图连接问题,也可替换一块芯片再次测试。
->原理图见附件,2543芯片和单片机我都已经更换过。
3.如在示波器中可以通过波形检测,则再检查代码问题
->经过提高CLK频率后,读出的数据中已经很少出现偏差值,通过示波器的波形分析发现单片机采集数据与波形一致,但由于大批量数据波形分析不太现实,因此今天还在采用单片机读数传到计算机进行分析。AI1通道只用,其他通道接地,发现在AI1脚对地接个小电容,在30000次测试中,只有500多次偏离超过0.1V,这500次中最大值最小值偏差超过0.2V。电路图见附件。请帮我分析下电路是否有不对的地方?
偏差值较高说明电路噪声较大,你在管脚处添加了小电容使得偏差值变小就是一种通过添加低通滤波器来抑制噪声的方式,如果噪声性能依然无法令你满意,可以选用更大的电容,以及在信号通路上串接电阻。关于如何减小SAR ADC的噪声,你可以参考这份应用笔记 http://www.ti.com/lit/an/slaa571/slaa571.pdf
另外本ADC是单端采集数据的,因此难以避免收到各种环境噪声干扰,你也可以靠多次采集得的数据取其均值来抑制噪声。