AD7779芯片的驱动方法

由于项目中要对外部传感器进行同步采集,故选用AD7779芯片。AD7779的功能介绍,大家可以看网络上的介绍,不在累述。

同样,也是从网站看资料,具体http://www.analog.com/cn/products/analog-to-digital-converters/standard-adc/precision-adc-20msps/multi-channel-ad-converters/ad7779.html。

包括官方提供的例程。

这里提供一个比较有参考价值的文章https://ez.analog.com/message/282746-ad7779-does-have-a-single-shot-conversion-function。

在网站上看到的一些文章有出入,包括对现象的描述,请大家多测试验证才能下结论。

好了,言归正传,开始介绍:

由于芯片提供端口和SPI两种访问方式,大多是采用SPI的方式,因为采用这种方式可以灵活第配置和操作芯片,我同样也是采用SPI方式操作芯片的,SPI接口函数这里就不写了。

因为官方提供的代码不适合自己工程使用,仅仅对需要的功能函数进行移植,其他的一概删除。

    /*  软件复位 */
    ret |= ad7779_spi_soft_reset( &adc_param );
    
    /* 配置 AD7779的通用寄存器 */
    ret |= ad7779_spi_cfg_dev( &adc_param );
    
    /* 设置AD7779的各通道参数 */
    ret |= ad7779_setup( &adc_param );
    
    /* 检测芯片内部的错误 */
    ret |= ad7779_check_error( &adc_param );
    
    /* 测量 SAR */
    ret |= ad7779_do_single_sar_conv( adc_param );    
    
    /* 检测通道 */    
    ret |= ad7779_check_channel( &adc_param );

   真麻烦,直接复制过来的注释是乱码,还要一点一点修正。

1、今天就讲这个芯片的上电后的工作流程。如同代码所示,要先复位,复位方法比较简单,直接发送64个“1”就行。

2、然后就是同样寄存器的配置,我这里定义通用寄存器就是芯片级的访问,和个通道寄存器分别描述的好。要根据你的基准电压、电源模式、参与速率等分别设置,然后更新下设置,具体方法如下:

ad7779_spi_write_reg(0x64, 0x01);

3、下面就是各通道的参数设置,就是使能,设置各通道的增益、校正相位同步和失调等。

4、设置结束,要看看刚才设置的参数有没有问题啊,于是就检测内部错误,当有错误时不要着急,可能就是你前面设置造成的,修改下设置就行,比如欠压告警,我就因为硬件设计上把AIN-直接和GND连接,但芯片资料上又说,虽说AIN-可以接地,但又不能为地,要比GND高30mV,所以,我就

ad7779_spi_write_reg(0x58, 0xAB);        //关闭欠压检测

我还做了(各通道DSP错误寄存器)

    error1 = ad7779_spi_read_reg(0x54);       
    error2 = ad7779_spi_read_reg(0x55);       
    error3 = ad7779_spi_read_reg(0x56);    
    error4 = ad7779_spi_read_reg(0x57);    
    ret |= error1 || error2 || error3 || error4;

以及(检测通用错误寄存器)

    error1 = ad7779_spi_read_reg(0x59);          
    error2 = ad7779_spi_read_reg(0x5B);      
    error3 = ad7779_spi_read_reg(0x5D);    
    error4 = ad7779_spi_read_reg(0x5E);    
    error5 = ad7779_spi_read_reg(0x5F);    
    ret |= error1 || error2 || error3 || error4 || error5;

检测还是很有必要的,可以发现一些硬件上的问题(或不是问题的问题)。

5、没有问题了,再试试你的SAR,就是芯片第63Pin和64Pin的AUXAIN+,AUXAIN-。

在这里可以检测大多数的芯片状态,并验证你的方法是否正确,从资料上可以看出,SAR通道是何内部其他8个AD通道独立的,所以,可以简单第接几个不同的电压值来测试你的硬件、软件的设计。

6、一切都没有问题了,就可以开始试试你的8个通道的AD值,我的方法很简单,就是

    data_code[0] = spi_get_data_from_dev(&hdr[0]) & 0x00FFFFFF;
    data_code[1] = spi_get_data_from_dev(&hdr[1]) & 0x00FFFFFF;
    data_code[2] = spi_get_data_from_dev(&hdr[2]) & 0x00FFFFFF;
    data_code[3] = spi_get_data_from_dev(&hdr[3]) & 0x00FFFFFF;
    data_code[4] = spi_get_data_from_dev(&hdr[4]) & 0x00FFFFFF;
    data_code[5] = spi_get_data_from_dev(&hdr[5]) & 0x00FFFFFF;
    data_code[6] = spi_get_data_from_dev(&hdr[6]) & 0x00FFFFFF;
    data_code[7] = spi_get_data_from_dev(&hdr[7]) & 0x00FFFFFF;

8个通道的数据就上来了。


上述6步就是芯片的基本步骤,官方提供的代码过于繁琐,我修改了几乎全部的代码,我本想是直接使用的,但在嵌入式平台上跑还是要精简的好。

若要还说点什么,那就是代码编译的技巧问题,这个因人而异,不能一概而论。今天的文章就算第一部分吧,后面会陆续补上。

若有疑问,可以留言,大家共同进步,谢谢。






你可能感兴趣的:(AD7779芯片的驱动方法)