就叫十二叭 2023-09-26 10:53 采纳率: 0%
浏览 66

ad7689驱动程序

STM32使用硬件spi驱动ad7689时,发现返回的ad值与实际值不一致,而且这个ad值是会随着我调整电压而改变,电压给的越大这个返回的ad值就越与实际值符合,电压给得越小返回的ad值与实际值相差越大,很奇怪。
一开始以为是我设置的spi波特率导致采样过快导致读下一个通道的采集电压值的时候可能是上一个通道还没有滤波完的数据,但切换波特兰从256到2都是过一遍,没能解决问题,还是存在一样的错误。
这是我写的AD7689的驱动的配置

#define AD7689_RB        1       //不回读CFG寄存器配置内容
#define AD7689_SEQ        0       //禁止序列器
#define AD7689_REF        0       //内部基准电压源REF = 2.5V
#define AD7689_BW        1         //全带宽低通滤波器
#define AD7689_INCC        7       //单级性,以GND为参考
#define AD7689_CFG      1       //覆盖寄存器内容

例如:通道0    0xf104(左移两位,末尾补零)

时序如下

    for(i=0;i<3;i++)
    {
        AD7689_CNV_SET_H();   //CNV = 1;
    delay_us(6);
    AD7689_CNV_SET_L();   //CNV = 0;
    delay_us(6);
    AD7689_CNV_SET_H();   //CNV = 1;
    delay_us(6);
    AD7689_CNV_SET_L();   //CNV = 0;
    delay_us(1);

        HAL_SPI_TransmitReceive(&hspi3,buf.TStr,pRxdata,2,10);

    delay_us(2);
    AD7689_CLK_SET_L(); 
    delay_us(2); 
    AD7689_CNV_SET_H();
        }

看了网上相关例程,没有什么错误的地方阿,就是返回的ad值不对
麻烦帮忙解答疑问,怎么解决

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-27 09:31
    关注

    该回复引自免费微信小程序-皆我百晓生:


    根据您提供的信息,可能有几个原因导致AD7689返回的AD值与实际值不一致:

    1. 电压参考源设置不正确:AD7689的参考电压源REF需要正确设置为2.5V。请确保REF引脚连接到正确的电压源,并且REF寄存器的配置值为0。

    2. SPI通信设置不正确:请确保SPI通信的时钟频率和模式与AD7689的要求匹配。可以参考AD7689的数据手册来确认正确的SPI通信设置。

    3. 采样时序不正确:AD7689的采样时序需要按照其要求进行设置。请确保在进行转换之前,先将CNV引脚拉高,然后再拉低,以启动转换。在转换完成之后,需要等待一段时间再读取转换结果。

    4. 硬件问题:可能存在硬件连接问题或者电源噪声等干扰导致AD7689的读取不准确。请检查硬件连接是否正确,尤其是引脚连接和电源供应。

    建议您逐一排查以上可能的原因,并根据实际情况进行调试和修改。如果问题仍然存在,建议您参考AD7689的数据手册,查找更详细的配置和使用说明,或者咨询AD7689的技术支持团队以获取更专业的帮助。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日

悬赏问题

  • ¥30 WPF如何实现动态Y轴
  • ¥15 关于遇到一个python,django,redis,uwsgi,nginx搭的一个企业微信修改AD密码的平台的问题!
  • ¥15 读取parquet文件某一列的数据但是输出是整个列名和格式
  • ¥15 机动目标 制导律建模问题
  • ¥100 求Java socks 转发实现Demo
  • ¥20 随身WiFi移动网络访问不了
  • ¥50 RAD_XE11.3获取android11手机的IMEI码
  • ¥15 linux的gcc命令报错
  • ¥20 如何再GIS用海岸线建立缓冲区
  • ¥15 codeblock遇到问题了,求帮助😭