AD7606 STM32F4驱动并添加FFT功能

您所在的位置:网站首页 ad7606校准 AD7606 STM32F4驱动并添加FFT功能

AD7606 STM32F4驱动并添加FFT功能

2023-10-14 19:13| 来源: 网络整理| 查看: 265

AD7606 STM32F4驱动并添加FFT功能 选择AD7606的原因

​ 最近在准备电赛,由于主要做的是信号题部分,所以说对ADC的运用是必不可少的了,stm32f4系列的ADC已经非常强大了,有最小0.71uS的转换时间,可选的6位,8位,10位,12位分辨率,参考电压在2.4-3.3v之间。但是作为一个单极性的ADC,在处理信号的过程中需要有额外的电路来抬升电压等。而对于模拟电路来说,越多的组件就会带来更多的噪声,并且也会给数据的处理带来麻烦,同时12位的分辨率在精度要求高的题目中显得有些不够用。所以我去找了一个16位的双极性的adc–AD7606。

​ 当然有更高精度的ADC,比如TI家的ADS1256、ADI的AD7190都是24位的ADC。但是这些ADC的采样速率都非常低,对于低频的信号采样效果非常好,但是由于我们有做FFT的需求,所以就择中选择的AD7606。

驱动移植 从标准库移植到HAL库

​ 由于之前偷懒使用HAL库对stm32进行开发,所以这次也打算用HAL库进行使用

​ AD7606的板子是在淘宝买的,但是店家的驱动程序是标准库开发的,所以我们要修改到HAL库使用。

​ 有一点很方便的是,原先店家的驱动很大一部分是使用寄存器直接操作的,所以我只需要将delay这个函数改成HAL_delay就可以了。

从F1移植到F4

​ 店家给的是STM32F103的驱动,但是我们有做FFT的需求,所以自然是自带FPU的F4系列更合胃口。

​ 前面说到了店家大多数是用寄存器进行操作的,我要修改的也就是寄存器的部分了。

​ 主要是F4和F1在设置引脚高低电平时的不同。

​ F1设置GPIO高低电平的操作是这样的

#define LED_PIN GPIO_PIN_4 //定义GPIO引脚 #define LED_PORT GPIOA #define SET_LOW() LEN_PORT->BRR = LED_PIN //设置低电平 #define SET_HIGH() LED_PORT->BSRR = LED_PIN //设置高电平

​ 这样,如果我们想要对LED进行操作,只需要调用

SET_LOW(); SET_HIGH();

​ 这两个函数就可以了,这种方式的调用也比用函数更加快捷。

​ 但是,F4的操作就有所不同,F4设置引脚高低是这样的

#define LED_PIN GPIO_PIN_4 //定义GPIO引脚 #define LED_PORT GPIOA #define SET_LOW() LEN_PORT->BSRR = LED_PIN BSRR = LED_PIN //设置高电平

​ 所以我们需要将驱动中的所有操作都改为F4的类型,具体部分如下

#define AD_CS_LOW() AD_CS_GPIO_PORT->BSRR = AD_CS_PIN BSRR = AD_CS_PIN #define AD_RESET_LOW() AD_RESET_GPIO_PORT->BSRR = AD_RESET_PIN BSRR = AD_RESET_PIN #define AD_CONVST_LOW() AD_CONVST_GPIO_PORT->BSRR = AD_CONVST_PIN BSRR = AD_CONVST_PIN #define AD_RANGE_5V() AD_RANGE_GPIO_PORT->BSRR = AD_RANGE_PIN BSRR = AD_RANGE_PIN #define AD_OS0_0() AD_OS0_GPIO_PORT->BSRR = AD_OS0_PIN BSRR = AD_OS0_PIN #define AD_OS1_0() AD_OS1_GPIO_PORT->BSRR = AD_OS1_PIN BSRR = AD_OS1_PIN #define AD_OS2_0() AD_OS2_GPIO_PORT->BSRR = AD_OS2_PIN BSRR = AD_OS2_PIN #define AD_MISO_LOW() AD_SPI_MISO_GPIO_PORT->BSRR = AD_SPI_MISO_PIN BSRR = AD_SPI_MISO_PIN #define AD_SCK_LOW() AD_SPI_SCK_GPIO_PORT->BSRR = AD_SPI_SCK_PIN BSRR = AD_SPI_SCK_PIN 总结

​ 至此,对驱动的修改就完成了,总的来说,AD7606的驱动修改还算轻松,没有很多的坑,操作也非常方便。相比较AD7606,AD9910的坑要大的多,整了半天才搞明白为什么错了,后面文章也会介绍AD9910的驱动移植。

​ 能使用ADC只是第一步,对采集到的数据进行处理才是关键,后面也会有一片专门的文章介绍如何对AD7606采集到的数据用FFT来进行分析,欢迎大家连续关注啦。

​ 如果有写的不好的地方或者其他问题,欢迎在评论区指正

​ 谢谢观看~

具体的代码我放在了自己的github上,有兴趣的同学可以去下载看看,这个工程里面包括了之后会有的AD9910驱动的移植和FFT处理数据的部分。 工程源码 github



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3