完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
AD7606是16位多通道同步采样芯片,可以处理±10V和±5V的真双极性输入信号,并最大支持200kSPS的吞吐速率采样,特别适合于电力系统中正弦波电压电流的采样。
别看AD7606是64-LQFP的封装,多达64脚,但其配置、使用非常方便。AD7606不用通过读写寄存器进行工作状态的配置,直接通过外部引脚的上下拉来进行配置,一般工程应用中主要涉及以下几个配置: 1.基准源选择; 2.并行、串行通讯选择; 3.测量范围选择; 4.过采样选择。 由于项目中并不需要高达200kSPS的采样率,故选择了一定倍数的过采样、串行通讯方式(其实就是AD7606所谓从机的SPI通讯)。以上4个配置全都是通过控制AD7606的外部引脚高低电平来实现的,因此可以在画板时通过上下拉定死,也可以在画板时将相应的配置引脚连接单片机的GPIO口,从而可以根据实际使用需要进行灵活配置。 关于以上四个配置,AD7606数据手册上已经做了明确说明,在此不做赘述: 无论使用过固定电平的方式,还是单片机GPIO口控制电平的方式配置好AD7606的工作状态后,就可以编程驱动其进行采样的。由于其工作模式为拉低CONVST引脚,转换期间BUSY引脚置高,转换完成后BUSY引脚拉低,此时可以通过串口从AD7606中读取转换结果,时序图如下所示: 因此,一种合理的驱动方式为:通过定时器产生一定频率、一定占空比的PWM来驱动CONVST引脚进行稳定的周期转换,并将BUSY引脚连接至单片机的一个外部下降沿中断,在中断中进行串口读数据。 那么对于单片机,需要用到3个基本外设: 1.定时器; 2.外部中断; 3.SPI 对于STM32系列的单片机,通过STM32CubeMX配置好这几个外设后,就可以完成AD7606的驱动了,下面对这三点进行一一说明。 一、定时器PWM的产生 比如我需要6400SPS的采样率,即一秒采样6400次,那么我需要产生6400Hz的PWM信号,而占空比的设置要结合AD7606手册中的t2来设置。 理想中产生的PWM波形应该像下图一样,一开始为高电平,定时器计数达到比较值后反转为低电平,而这个窄窄的低电平就是AD7606的转换开始信号,其低电平时间要大于25ns。 因此,在STM32CubeMX中选一个定时器,并将其中一个通道配置为PWM模式,如下图 然后对PWM的频率及占空比进行设置,如下图所示。由于我在时钟树设置时设置了160MHz的主频,那么挂载在AHB1上的TIM3默认运行主频为80MHz。故在第一个红框处进行100分频后,设置向上计数125次为一个PWM周期,那么其频率就是80MHz/100/125=6400Hz。 而对于占空比,通过下边红框进行设置,设置为124,且极性为高电平。124从何而来?刚刚已经配置了PWM的频率为6400Hz了,那么其周期为1/6400=156.25us,而这156.25us又被分成了刚刚配置的125个小段,那么当占空比设置为124时,将有124个小段输出高电平,最后一个小段极性反转成低电平。其低电平时间即为156.25us/125=1.25us,满足手册中大于25ns的要求。这样一来,该引脚就可以按输出上图所示的PWM了。 二、外部中断的捕获 这个比较简单,选择一个引脚,如下图配置为外部中断。 然后到configuration中配置其为下降沿触发即可。 三、SPI SPI的配置也较为简单,需要注意四点: 1.SPI的工作模式; 2.数据大小; 3.时钟信号速率; 4.结合AD7606手册中的时序。 如图配置SPI2,使用软片选,即随便选一个GPIO口为推挽输出作为CS引脚,在需要SPI通讯前进行下拉,通讯完进行上拉即可。 在configuration中做如下配置。因为AD7606一次传输16位数据,且高位在前,故配置为16bits、MSB; 同时,根据下图所示的串行读取数据操作可看出,SPI的SCLK工作在空间高电平,在sclk第一个边沿读取数据的模式,故配置CPOL为high,CPHA为1 Edge。 至于Baud Rate,此处也不能乱配置,要根据AD7606手册中的说明配置,不得高于手册中各驱动电压下的最大速率即可。 另一个需要注意的点是t18,以为拉低CS后不能马上进行SPI读取,需要等待以下时间后才可以。对于160MHz主频来说,一个时钟周期为1/160MHz=6.25ns,故在拉低CS后,需要__NOP() 5~6次后方可进行SPI读取。 四、测试 按以上步骤配置后,AD7606就被驱动起来了,需要注意的是,上电或者复位后,最好空读几次数据,防止读出的第一个采样值紊乱的可能。 下图为将采集到的双通道正弦波数组绘图后的结果,可以看出经过过采样后,波形非常稳定,基本没有噪声。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1820 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1634 浏览 1 评论
1104 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
740 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1692 浏览 2 评论
1951浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
757浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
587浏览 3评论
606浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
572浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-31 07:40 , Processed in 1.041868 second(s), Total 46, Slave 41 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号