STM32
直播中

陆军航空兵

8年用户 787经验值
私信 关注
[问答]

请问STM32+STM32CubeMX如何调试AD7606?

请问STM32+STM32CubeMX如何调试AD7606?

回帖(1)

李巍

2021-11-23 11:28:37
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就被驱动起来了,需要注意的是,上电或者复位后,最好空读几次数据,防止读出的第一个采样值紊乱的可能。
下图为将采集到的双通道正弦波数组绘图后的结果,可以看出经过过采样后,波形非常稳定,基本没有噪声。


举报

更多回帖

发帖
×
20
完善资料,
赚取积分