STM32 AD 采样时间如何确定? 采样率指啥? Datasheet 中采样率fs 的0.5 和1MHz是怎么算出来的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 AD 采样时间如何确定? 采样率指啥? Datasheet 中采样率fs 的0.5 和1MHz是怎么算出来的?相关的知识,希望对你有一定的参考价值。
AD 采样时间如何确定? 以脉搏波为例:
脉搏波频率1-25HZ; 根据采样定理:采样频率>2fmax
而STM32 的ADC 时钟频率范围:0.6MHz - 14MHz; 采样时间根据寄存器可设置为:1.5,.....239.5 个时钟周期;
问题:
1、 ADC 采样时间是否固定这几个值?
2、若是这几个值, 根据ADC 的时钟范围,
可算出: 最大的采样时间 = 239.5 *(1 /0.6MHz); 即最小的采样频率=0.6MHz / 239.5 = 250.52Hz ;
对于脉搏波来说,这个采样频率是否合适? (而且上面参数都是在极限条件取值,精度不高?)
此时的总的转换时间 Tconv = (239.5+12.5)*(1/0.6MHz) = 0.0042s = 4.2 ms ; 对于逐次比较式AD(us级)来说是否可惜?
嵌入式STM32+STM32CubeMX调试AD7606记录
文章目录
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就被驱动起来了,需要注意的是,上电或者复位后,最好空读几次数据,防止读出的第一个采样值紊乱的可能。
下图为将采集到的双通道正弦波数组绘图后的结果,可以看出经过过采样后,波形非常稳定,基本没有噪声。
以上是关于STM32 AD 采样时间如何确定? 采样率指啥? Datasheet 中采样率fs 的0.5 和1MHz是怎么算出来的?的主要内容,如果未能解决你的问题,请参考以下文章