文章目录
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的驱动了,下面对这三点进行一一说明。
1、定时器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了。
编程
2、外部中断的捕获
这个比较简单,选择一个引脚,以下图配置为外部中断。
而后到configuration中配置其为降低沿触发便可。
数组
3、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读取。
spa
4、测试
按以上步骤配置后,AD7606就被驱动起来了,须要注意的是,上电或者复位后,最好空读几回数据,防止读出的第一个采样值紊乱的可能。
下图为将采集到的双通道正弦波数组绘图后的结果,能够看出通过过采样后,波形很是稳定,基本没有噪声。
3d