ADS1258 24BitAD用法详解使用心得和程序

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

鉴于ADS1258 的资料很少,只有个CPLD控制ADS1258的例子,而且有些地方也不太详细,初次接触这款芯片的还是有些问题。ADS1258又没有中文资料,有些读者阅读也会有些障碍。之前在用ADS1258的时候,我也有很多疑问,发到网上也没有得到回复,总的来说用的人不多,资料也很少。后来也有很多朋友加我QQ,询问相关的问题。所以打算把我的调试经验和程序拿出来与大家分享,如果能帮到大家也就不枉码这么多字了。

总的来说,英文资料上写的还是很详细的,但是我觉得还是有些问题没有重点说明。还有就是新手不要老是指望有中文资料让你舒舒服服的看。有些资料只有英文的,那就需要你得具有一定的英语阅读能力了。

ADS1258的参数这些我就不说了,自己查资料。我主要说明这几个部分,这几个部分也有些重叠的地方:

一、资料上值得注意的几个地方。

二、我的调试过程中遇到的问题。

三、已经通过了调试的程序代码。

四、总结。

一、资料上值得注意的几个地方

1、AD1258上电后到底正常状态是怎样的?

因为是调试,所以首先要确定你AD是否在正常工作。

AD1258上电后,不需要你配置,也能工作,因为它有一个默认的配置,所以根据这个默认配置所表现的状态就能判断是否是正常的。

正常的状态是这样的:一、上电后,AD_DRDY是有波形的,是自动扫描模式,并且是最大采样率(23K)。你用示波器测AD_DRDY就能看出来。二、时钟输出口也是有波形的。

如果不是这样,看你AD_RESET连上并且控制好了没有,电源接对没有,时钟信号正常没有等等,排查,直到正常。

数据手册上的参考电路AD_RESET 是没有连接的,因为它是用的软件复位,但是作为调试来说这样很不好!强烈建议一定要接上,控制它复位。

下面这图的英文要仔细读懂。

2、资料上AD1258的内部结构图,这个图最好看明白。对于你理解他的差分,单端连接有帮助。我这截图可能不太清楚,你们可以找数据手册上的图看。

3、时钟电路部分容易接错的地方!

看见下图没有,注意!一般晶振旁的电容都是共地的,而这里却是共A VSS,也就是模拟电源负端。有时候容易按习惯画法,看也不看参考电路,就画错了,调试通不过,耽误时间。

4、关于单端输入和差分输入,自动扫描模式,固定扫描模式,配置等。

自动扫描模式:可以采用16个单端输入,或者8对差分输入,当然,你也可以只设置一个通道,不过速度无变化。最大速度23K。

固定扫描模式:速度可以达到很高,125K。只能设置一个差分或者单端通道。你想如果可以设置多个通道了,那不是成了自动扫描模式了?

单端输入:就是所有通道有个公共端COM,见内部结构图。最大可以用16个通道。

差分输入:就是把2路AIN,作为一路差分信号。

固定扫描模式的配置寄存器中,如下图,只有AINP 0~3 AINN 0~3,这里大家理解可能会有点偏差。后面的P 是差分信号的正极的意思,N就是负极的意思。这个图是什么意思呢?我们知道这个是配置哪路输入作为固定扫描通道的,你可以配置差分,也可以配置单端输入。那为什么只有4位呢?是不是只能配置AIN0~4 这几个输入通道?不是的。这里配置采用的是2进制码来确定你想要配置的通道的。

如你要配置AIN3作为差分正,AIN4作为差分负。你要这样配置:

3的二进制码是0011,4的二进制码是0100 3是正也就是P 4是负也就是N 整个配置字节就是:

00110100 也就是0x34

单端如何配置的我就不说了。

二、我的调试过程中遇到的问题

1、一开始看手册,参考图上没有接RESET,我们也没有接,结果后面调试的时候,根本不知道SPI通信没有,因为你SPI没通信,就没法发送指令,没法控制,没法复位,连正不正常都不知道。只有先确保AD 复位工作了之后,再去找SPI通信的原因,这样就明确了方向。

2、另一个同事设计这个板子的时候,晶振电容共地了,没仔细看参考图。还有2.5V电源,和参考电源不要搞混了。不要把参考2.5V,用在电源上,也不要把电源给参考2.5V。

3、AD采样最好采用我这样的方法,因为其他方法我没调正常。还有注意读取速度的问题,也就是你单片机读取AD的速度,要大于你AD采样的速度,不然就会数据丢失。调试后期,加上一个信号,看测出来是不是这么多,有点偏差算正常,因为电源精度可能不够,高精度的AD是能反应这个变化的。

三、已经通过了调试的程序代码:

原程序有些部分如DMA 蓝牙什么的,不便于大家阅读,删除了。这个程序也不是拿给大家直接就编译OK的,只能是作为参考,我想是足够了。看过资料的人,点拨一下就明白的,没看过的,还需仔细看看。

这是一个ADS1258 初始化的程序,采用一个一个配置寄存器,当然你也可以连续配置。

这个程序的硬件连接说明:

1、单片机IO口控制AD_RESET复位(强烈建议接上,便于调试,投产的时候可以不接,用命令来复位,IO口不紧张的话一定要接上)。

2、采用AD_DRDY 接入单片机外部中断口(需配置单片机),AD_DRDY来的时候,下降沿在单片机上产生中断信号,在中断处理程序中读取数据。

void ADS1258_INIT(void)

{

AD_CS = 0;

AD_CS = 1; // RESET SPI

halWait(30); // 不是必须

AD_CS = 0; // RESET SPI

AD_START = 0; // STOP converter

halWait(20);

AD_RESET = 1;

halWait(2);

AD_RESET = 0;

halWait(2);

AD_RESET = 1;

halWait(2);

// 70 02 00 00 00 FF FF 00 FF FF 8B

//配置信息,具体作用参照手册,我这人很懒,就不写了。

Uart0Send(0x60);

Uart0Send(0x00);//BIT3:CLKENB BIT1:STAT BYPAS FIX-CHANNEL

Uart0Send(0x61);

Uart0Send(0x02);//0x00:1.9K SPS standby 0x02:31.2K

Uart0Send(0x62);

Uart0Send(0x00);

Uart0Send(0x63);

Uart0Send(0x00);

Uart0Send(0x64);

Uart0Send(0x01);

Uart0Send(0x65);

Uart0Send(0x00);

Uart0Send(0x66);

Uart0Send(0x00);

Uart0Send(0x67);

Uart0Send(0x00);//GPIO output test

Uart0Send(0x68);

Uart0Send(0xFF);

Uart0Send(0x69);

Uart0Send(0x8B);

AD_START = 1;

}

//单片机中断处理程序

/////////////////////////////外部中断/////////////////////////////////////////

//P1_2 外部中断读取AD 数据

相关文档
最新文档