1.AD7606模块

淘宝购买的AD7606模块,如下图所示。该模块网上找了很久都没有找到例程。干脆自己写一个。

根据该模块厂家提供的pdf使用说明,可以看到需要将R18电阻拆除,R23焊接1K电阻才能使AD7606工作在并行模式下。这款模块默认是±10V量程,我也将其改为了±5V量程,只需将R17电阻拆除,R22焊接1K电阻即可。如我下面的实物图所示,移动了两个电阻。

下面介绍下该模块的引脚:

BUSY:忙碌线,AD7606在测量时该IO会高电平,测量完毕会低电平,因此接入arduino外部中断下降沿触发即可测量数据。

OS0、OS1、OS2:接000、001……111分别代表1次、2次……64次采样取平均输出,可以不接引脚,默认全低电平,也就是AD7606测量一次AD值后会直接输出,不会取平均再输出。

ST_A、ST_B:分别是1-4和5-8路AD的采样启动引脚,该引脚给上升沿时,即开始测量对应的通道AD,可以将ST_A和ST_B并联在一起,实现8路AD同步采样。

CS:片选位,SPI协议时使用,并行数据传输方案CS只需接地。

RD:给该引脚下降沿时,AD7606会将读好了的8路AD数据并行输出。

DB0~DB15:16位并行数据接口。

RST:复位引脚,模块上电后必须给一个50ns以上高电平脉冲复位,否则测量数据有概率不稳定。

FRST:可不接,信号提示作用。

时序图如下图:

首先arduino给ST_A和ST_B一个上升沿信号,AD7606会将BUSY置高电平,代表正在测量AD。随后arduino检测BUSY的下降沿,下降沿到来时,说明AD测量完毕。此时arduino可以读取AD数据了,arduino给RD引脚一个下降沿信号,随后马上读取DB0~DB15的16位数据保存,该数据为第一通道的AD1数据。读完AD1数据后将RD给回高电平,延时一段时间后RD给下降沿信号,在读取 DB0~DB15的第二通道的AD2数据。以此类推,直至读完8个通道的数据即完成。

2.ArduinoMEGA2560单片机

由于需要16个数据IO和至少6个控制IO,因此arduinoUNO R3单片机IO口不够用了。选用IO口更多的ArduinoMEGA2560。该单片机有4个外部中断,分别是引脚D2、D3、D20、D21,本次例程只用D2引脚——外部中断0。

3.接线:

AD7606——>ArduinoMEGA2560

+3.3V——>+5V(这里特别注意要接入5V供电,保持单片机和模块逻辑电平一致。只有stm32才需要接3.3V供电)

GND——>GND

BUSY——>D2

OS0——>D3(可不接)

OS1——>D4(可不接)

OS2——>D5(可不接)

ST_A、ST_B——>D6(该引脚需要同时接ST_A和ST_B)

CS——>D7(可接GND)

RD——>D8

RST——>D9

DB0——>D22

……此处省略14个接线

DB15——>D37

4.代码

//AD7606并行16位数据传输ArduinoMEGA2560例程
#define BUSY 2 //该接口接arduino外部中断IO,MEGA2560必须为D2、D3、D20、D21其中之一引脚
#define OS0 3 //用于设置采样率
#define OS1 4
#define OS2 5
#define ST_AB 6 //共同接入ST_A和ST_B中,实现1-4和5-8通道同步采样,如只用4个以下通道,可接ST_A或ST_B其中之一。
#define CS 7 //可永久接GND
#define RD 8 //读取控制数据位,下降沿时可读并行数据
#define RST 9 //复位IO
#define DB0 22 //16个数据位
#define DB1 23
#define DB2 24
#define DB3 25
#define DB4 26
#define DB5 27
#define DB6 28
#define DB7 29
#define DB8 30
#define DB9 31
#define DB10 32
#define DB11 33
#define DB12 34
#define DB13 35
#define DB14 36
#define DB15 37
//FRST可不接//8通道AD值,short int是16位数,取值-32768~32768
short int AD[8] = {};void setup() {Serial.begin(9600);pinMode(BUSY,INPUT);attachInterrupt(0,ReadAD7606,FALLING);//pin2pinMode(OS0,OUTPUT);pinMode(OS1,OUTPUT);pinMode(OS2,OUTPUT);pinMode(ST_AB,OUTPUT);pinMode(CS,OUTPUT);pinMode(RD,OUTPUT);pinMode(RST,OUTPUT);digitalWrite(RST,HIGH);delay(1);digitalWrite(RST,LOW);pinMode(DB0,INPUT);pinMode(DB1,INPUT);pinMode(DB2,INPUT);pinMode(DB3,INPUT);pinMode(DB4,INPUT);pinMode(DB5,INPUT);pinMode(DB6,INPUT);pinMode(DB7,INPUT);pinMode(DB8,INPUT);pinMode(DB9,INPUT);pinMode(DB10,INPUT);pinMode(DB11,INPUT);pinMode(DB12,INPUT);pinMode(DB13,INPUT);pinMode(DB14,INPUT);pinMode(DB15,INPUT);digitalWrite(OS0,LOW); //设置为1次平均采样digitalWrite(OS1,LOW);digitalWrite(OS2,LOW);digitalWrite(CS,LOW); //永久低电平digitalWrite(RD,HIGH); //默认高电平,不读数据digitalWrite(ST_AB,HIGH); //默认高电平,上升沿开启测量AD
}void ReadAD7606(void) //读取AD值中断服务函数
{for(int i=0;i<8;i++) //需要更高的采样速度时,此处可以不用for,将for循环里的内容自行复制多7个,改i的值为0到7即可。{digitalWrite(RD,LOW); //拉低RD,开始读数据delayMicroseconds(1);AD[i]=digitalRead(DB15)*32768+digitalRead(DB14)*16384+digitalRead(DB13)*8192+digitalRead(DB12)*4096+digitalRead(DB11)*2048+digitalRead(DB10)*1024+digitalRead(DB9)*512+digitalRead(DB8)*256+digitalRead(DB7)*128+digitalRead(DB6)*64+digitalRead(DB5)*32+digitalRead(DB4)*16+digitalRead(DB3)*8+digitalRead(DB2)*4+digitalRead(DB1)*2+digitalRead(DB0);digitalWrite(RD,HIGH); //第一通道数据读取完毕,拉高RD,随后拉低读第二通道数据delayMicroseconds(1);}
}void loop() {digitalWrite(ST_AB,LOW); //低电平,为上升沿信号做准备delay(1); //200KHZ采样模式下,此处必须大于25ns,ATmega系列单片机时钟速度无法支持该采样速度digitalWrite(ST_AB,HIGH); //产生上升沿,等待BUSY下降沿进入中断读取数据for(int i=0;i<8;i++){Serial.print((float)AD[i]*5.0/32767.0); //-32768~32768对应-5V~5VSerial.print("V,");}Serial.println();delay(100);
}

5、运行结果

按顺序连接好杜邦线后,代码烧录进单片机,随后打开arduinoIDE自带的串口监视器,即可看见发送来的测量数据,频率为一秒一次(可更改loop函数内的delay(1000);来实现更高速度测量)。这里只测试了5V、3.3V和0V的测量结果,数据都比较精准。但条件原因没有测试负压。

该例程仅初步验证,目前没有发现其他问题,有问题可以评论留言哦~

实物接线图

运行结果

ArduinoMEGA2560驱动AD7606模块 八路同步采样AD (16位并行数据传输)相关推荐

  1. AD7606/AD7616使ZYNQ在能源电力领域如虎添翼,可实现16/32/64通道AD同步采样

    1 AD7606/AD7616介绍 AD7606是ADI公司的16位.8通道同步采样AD芯片,并行采样率高达200KSPS(AD7616是16位.16通道.1MSPS).在电力线路测量和保护系统中,需 ...

  2. FPGA采集AD7606全网最细讲解 提供串行和并行2套工程源码和技术支持

    目录 1.前言 2.AD7606数据手册解读 输入信号采集范围 输出模式选择 过采样率设置 3.AD7606串行输出采集 4.AD7606并行输出采集 5.vivado仿真 6.上板调试验证 7.福利 ...

  3. 【STM32F407开发板用户手册】第35章 STM32F407的FSMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F407的FSMC总线应用之驱动A ...

  4. 【STM32F429开发板用户手册】第35章 STM32F429的FMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 第35章       STM32F429的FMC总线应用之驱动AD ...

  5. 【STM32H7教程】第76章 STM32H7的FMC总线应用之驱动AD7606(8通道同步采样, 16bit, 正负10V)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第76章       STM32H7的FMC总线应用之驱动AD ...

  6. 正点原子开发板STM32F407ZG-基于AD7606进行八路数据采集

    购买的AD7606模块 在淘宝上面购买的这款产品,让店家设置的是串行(SPI).模拟梁输入范围是正负10V. 板子背面的焊盘选择 1.原理图 原理图参考安富莱的AD7606的 2.管脚的定义 2.1O ...

  7. STM32CubeMX驱动ADS1118模块

    文章目录 1. 前言 2. ADS1118模块简介 3. 移植源码到工程 4. 驱动源码中函数介绍 4.1 us延时函数 4.2 写入和读取ADS1118配置寄存器 4.3 初始化ADS1118 4. ...

  8. STM32驱动RC522-RFID模块

    简介:STM32F103C8T6驱动RC522-RFID模块源码介绍. 开发平台:KEIL ARM MCU型号:STM32F103C8T6 传感器型号:RC522-RFID 特别提示:驱动内可能使用了 ...

  9. STM32ADC同步采样

    STM32ADC同步采样 本文主要讲解如何实现STM32ADC同步采样. 所需工具: 开发板:STM32F103RCT6 STM32CubeMX IDE: Keil-MDK 模式简介 同步采样可以让两 ...

最新文章

  1. Codeforces Round #447 (Div. 2) B. Ralph And His Magic Field 数学
  2. IBM Installation Manager 工具概述(转)
  3. linux内核syscall_define6,Syscall系统调用Linux内核跟踪
  4. golang json转结构体中嵌套多个数组_ElasticSearch第六篇:复合数据类型-数组,对象...
  5. python 不得不知的第三方库以及常用安装包
  6. JavaScript中字符串去掉特殊字符和转义字符
  7. Angular 依赖的测试和 Fake
  8. homebrew安装
  9. Java实现中英文词典功能
  10. 矩阵分析_二阶矩阵A为酉矩阵的充分必要条件是A为下列三种形式之一
  11. 用计算机解决问题时 首先应该确定程序,算法与程序设计试题带答案
  12. 什么是场景化需求分析法?如何有效使用这个客户需求分析最有效的方法?
  13. ASCII码值是怎么计算的,怎么计算arccos的值
  14. 计算机课程设计心得,课程设计心得体会450字
  15. (二)GNSS定位中的卫星轨道位置计算
  16. 浅析百度有啊生活平台未来发展的八大潜力特征
  17. 小程序跳转到其他小程序
  18. 关于使用xftp上传可读文件夹权限不足的问题
  19. Python|制作汉堡的解题方法
  20. 【报告分享】2021天猫坚果消费趋势报告-CBNData(附下载)

热门文章

  1. 高精度算法详解(蒟蒻,轻喷,欢迎指正)
  2. Win7/Win10安装AutoCAD+CASS
  3. 校园网一号多设备两种方法
  4. CImage修改图片大小
  5. Mac支持NTFS格式硬盘(只需3步),亲测有效!
  6. 神经元网络算法的思想,神经元网络算法有哪些
  7. 广元云计算大数据中心一期项目10月底投用
  8. 提取航拍图像的拍摄日期,中心经纬度,焦距,航拍高度,航向角等系列信息。
  9. 免费API接口,工作常用
  10. python中while continue的用法_Python3 循环语句while/for/break/continue用法