由于项目中要对外部传感器进行同步采集,故选用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);以及(检测通用错误寄存器)
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;8个通道的数据就上来了。
上述6步就是芯片的基本步骤,官方提供的代码过于繁琐,我修改了几乎全部的代码,我本想是直接使用的,但在嵌入式平台上跑还是要精简的好。
若要还说点什么,那就是代码编译的技巧问题,这个因人而异,不能一概而论。今天的文章就算第一部分吧,后面会陆续补上。
若有疑问,可以留言,大家共同进步,谢谢。