STM32F407控制AD7606 采用HAL库的TIM和SPI

前言

本文介绍基于STM32F407的AD7606 8通道同步采集控制方式,总体思路:PWM驱动AD7606完成模数转换,AD7606转换完成后其BUSY引脚给出下降沿,STM32捕获外部中断并在中断服务程序中调用SPI串口读取AD7606数据,工程采用cubemx完成配置,基于HAL库开发。

一、AD7606模数转换芯片

主要用在电力采集、多相电机控制、仪器仪表等数据采集场景,提供最大200ksps的16bit八通道同步采集能力,双极性模拟输入可达正负10V,具备完整集成的数据采集解决方案,包括模拟输入钳位、1M欧模拟输入阻抗、二阶抗混叠模拟滤波、片内基准源、数字滤波和和过采样等。支持8080并口和SPI串口读取数据。

根据AD7606说明书配置AD7606工作于SPI串口模式,并短接CONVA和CONVB,实现8通道同步转换。

二、控制器和资源分配

主控STM32F407,所需资源如下:

  • 一组串口,Usart1串口(PA9 PA10),打印采集数据
  • 一组SPI,SPI2(MISO PC2 、MOSI PC3、 SCLK PB13),读取AD7606转换数据
  • 一个定时器,TIM3(TIM3_CH1 PA6管脚),产生PWM,控制AD7606转换频率,即采样率
  • 三个GPIO,AD7606Rst(PA1)、AD7606Cs(PA2)、AD7606Irq(PA5)

硬件连线:

  • SCLK --------------------------------------RD
  • MISO --------------------------------------D7
  • AD7606Cs--------------------------------CS
  • AD7606Irq--------------------------------BUSY
  • AD7606Rst-------------------------------RST
  • TIM3_CH1 -------------------------------CONVA

三、cubemx工程配置

3.1 时钟树

配置SYSCLK=168MHz,外设时钟42MHz

3.2 UART1

串口配置不是本文重点,现省略,参考其他资料。

3.3 GPIO

AD7606Rst(PA1)、AD7606Cs(PA2)配置成输出模式,AD7606Irq(PA5)配置成外部中断模式,下降沿触发,并开启全局中断。

3.4 TIM3

配置TIM3为PWM 输出通道1,输出98%占空比的脉冲去驱动AD7606,频率配置为10kHz,(42MHz/42/100 = 10kHz  = 100us),占空比配置设置Pulse为98 (98/100 = 98%, 低电平持续时间2us, 需要大于25ns)和CH Polarity为高电平。根据AD7606的时序要求,配置占空比即可。

3.5 SPI

选择全双工模式,虽然只是用读功能,但是不影响。关闭硬件NSS片选信号,配置SPI数据位16bit,MSBFirst,波特率一般可以大于10MHz,SPI的模式根据AD7606手册应该选择为CPOL=High,CPHA=1Edge。数据量不大,一般不需要使用DMA,不需要用中断。

3.6 生成HAL工程

生成HAL库的开发工程,然后编写AD7606的驱动和数据读取。

四、AD7606应用接口

配置好HAL库工程后,还不能正确读取数据,需要增加AD7606的应用层接口,主要包括AD7606的初始化、启动、停止、复位和数据读取等。

static void AD7606Reset(void)
{/*! ___|-----|________  >= 50ns */AD7606Rst_Low();AD7606Rst_High();for(int i = 20; i > 0; i--){__NOP();//1000/168 ns = 5.85ns}AD7606Rst_Low();
}void AD7606Init(void)
{AD7606Cs_High();AD7606Reset();
}void AD7606Start(void)
{HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);//启动AD7606转换
}void AD7606Stop(void)
{HAL_TIM_PWM_Stop(&htim3,TIM_CHANNEL_1);//停止AD7606转换AD7606Cs_High();
}void AD7606BusyIrqCallback(uint16_t *ad7606Val,uint8_t ad7606Chl)
{AD7606Cs_Low();HAL_SPI_Receive(&hspi2,(uint8_t *)ad7606Val,ad7606Chl,10000);//AD7606中断中读取AD7606Cs_High();
}void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)//PA5 中断
{if(GPIO_Pin == AD7606Irq_Pin){//read AD7606if(nums < SAMPLING_POINTS){AD7606BusyIrqCallback(ad7606Buff[nums],SAMPLING_CHANNEL);nums++;ad7606SamplingDoneFlag = 0;}else{ad7606SamplingDoneFlag = 1;}}
}

五、效果

由于AD7606返回的数据是二进制补码的形式,还需要转换成10进制,编写了以下接口:

float AD7606ConvValue(uint16_t bin)
{int _val;float adcValue;_val = bin&0x8000 ? (-((~bin+1)&0x7fff)) : bin;adcValue = 5.0*_val/32768.0;return adcValue;
}

上述函数接口是以AD7606片内2.5V基准电压源为例,设定的采样范围为正负5V,其他基准电压源和正负10V采样范围可以针对修改即可。

最终的采样结果如下,可以看到AD7606使用了过采样技术,干扰很小。

补充一个工程下载仓库:https://gitee.com/eiri_jackmaster/ad7606_freertos_stm32f407

https://gitee.com/eiri_jackmaster/ad7606_stm32f407/tree/master

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/404882.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(转)二分图最大匹配的König定理及其证明

出处:http://www.matrix67.com/blog/archives/116 二分图最大匹配的Knig定理及其证明 如果你看不清楚第二个字母&#xff0c;下面有一个大号字体版本&#xff1a;二分图最大匹配的Knig定理及其证明 本文将是这一系列里最短的一篇&#xff0c;因为我只打算把Knig定理证了&…

如何使用struts2对集合参数进行验证

上一节介绍了struts2可以支持批量表单参数提交&#xff0c;那么提交到后台时如何利用strust2的validation框架对这个集合做验证&#xff1f; struts2提供了一个vistor校验器&#xff0c;可以实现这个需求 还是采用上一节中批量添加书籍的例子 1.jsp文件 <% taglib prefix&qu…

[Axure教程]0001.新手入门基础

Axure RP是一个专业的快速原型设计工具。Axure&#xff08;发音&#xff1a;Ack-sure&#xff09;&#xff0c;代表美国Axure公司&#xff1b;RP则是Rapid Prototyping&#xff08;快速原型&#xff09;的缩写。Axure RP已被一些大公司采用。Axure RP的使用者主要包括商业分析师…

【评论】GNU/Linux下有多少是GNU的?

导读&#xff1a;一个葡萄牙的学生写了一篇文章 《How much GNU is there in GNU/Linux?》由酷壳网的陈皓整理编译为《GNU/Linux下有多少是GNU的》。这篇文章主要分布了今年4月份的Ubuntu Natty的Linux分发包。其主要是用代码行来做的分析&#xff0c;用两个饼图对比分析。内容…

Linux下scp命令的用法

scp 对拷文件夹 和 文件夹下的所有文件 对拷文件并重命名 对拷文件夹 (包括文件夹本身) scp -r /home/wwwroot/www/charts/util root192.168.1.65:/home/wwwroot/limesurvey_back/scp 对拷文件夹下所有文件 (不包括文件夹本身) scp /home/wwwroot/www/charts/util/* root19…

研究者展示黑客通过GPU绕过防毒软件查杀的方法

Slashdot网站近日刊登了一篇研究文章称黑客可以通过特殊手段利用电脑中的GPU来躲避杀毒软件的清查。在这份PDF文档中&#xff0c;研究者展示了黑 客如何 利用GPU来躲避杀毒软件查杀的方法&#xff0c;作者还表示类似的技巧还有可能会发展升级为更加复杂的攻击手段&#xff0c;如…

javascript笔记:javascript的前世,至于今生嘛地球人都知道了哈

&#xff08;引子&#xff1a;javascript其实是个私生子&#xff09;我在上一篇博文最后说道&#xff0c;想写一篇关于javascript基础语法的文章&#xff0c;原因是我在读很多优秀的javascript源码时候常常被javascript诡异的语法搞的精疲力尽&#xff0c;所以时不时的加固java…

STM32F4 使用STLink 和 EventRecoder 调试运行时间

最近使用STM32F407的DSP库&#xff0c;测试了一下浮点数1024个点的FFT计算时间&#xff0c;采用EventRecoder计时间&#xff0c;记录如下。 1、在Compiler中添加EventRecorder 组件&#xff0c;CMSIS的版本5.4。 2、main.C增加头文件&#xff1a;#include "EventRecorder…

Keil5 EventRecorder 的STDOUT输出丢包率较大现象

采用STLINK EventRecorder 对printf进行重定义&#xff0c;在连续发送数据时&#xff0c;存在较大的丢包情况。因此&#xff0c;调试小数据量时可以采用这种方法&#xff0c;大数据量的时候还是直接用UART 进行输出。

Etherchannel的配置 三层

三层以太网通道 interface FastEthernet0/19 no switchport no ip address channel-protocol lacp channel-group 30 mode active ! interface FastEthernet0/20 no switchport no ip address channel-protocol lacp channel-group 30 mode active interface Port-chan…

CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法

一、问题 如题&#xff0c;CubeMx 生成的FreeRTOS 代码在ARM compiler6 编译__forceinline 报错的解决方法。 二、解决方法 第一种方法&#xff0c;将编译器换回default compiler version 5。 第二种方法&#xff0c;更换freeRTOS移植源码文件。 将FreeRTOS源码xxx\FreeRTOS…

解决centos KDE命令提示符和文字不紧贴的问题

注意此时cd后面是没有空格的但此时却显示像有空格的一样&#xff0c;要解决这个问题就需要修改PS1 在自己的home的目录下更改.bashrc 例如root就在/root下 PS1"\e[1;32m\u\e[m\e[1;33m\e[m\e[1;35m\h\e[m:\w\$ "转载于:https://www.cnblogs.com/597845634ds/p/490557…

UPS电源远程关机

UPS电源的APC软件是个单机PowerChute Business Edition 的&#xff0c;一个UPS电源上也不是一台服务器&#xff0c;如何在停电的时候把其它服务器也关了&#xff0c;难不成再去买网络版。Windows从xp以上就可以远程关机了&#xff0c;shutdown命令。PowerChute是以系统服务在后…

安卓dalvik和art区别

Dalvik模式像是一台折叠自行车&#xff0c;每次骑之前都要组装后才能上路。而ART模式就是一个已经装好的自行车&#xff0c;直接就能上车走人。所以ART模式在效率上肯定是要好于Dalvik。 通过以上这种表格&#xff0c;我们可以直白的看出&#xff0c;全新的ART模式具备用RAM内存…

STM32 FreeRTOS USART DMA空闲中断和消息队列的使用

&#xff08;后文有修改&#xff09; 一、思路 USARTDMA空闲中断发生后&#xff0c;将接收到的DMA消息用消息队列发出去xQueueSendToFrontFromISR&#xff0c;FreeRTOS创建一个独立的任务一直等待接受消息队列。 DMA中断可以被FreeRTOS管理。 二、CubeMx配置驱动 2.1 USAR…

Samba服务全攻略

From: http://redking.blog.51cto.com/27212/120934 1 Samba原理 1.1 Samba概述 接触Linux我们听的最多的就是Samba服务&#xff0c;为什么Samba应用这么广泛哈~&#xff0c;原因是Samba最先在Linux和Windows两个平台之间架起了一座桥梁哈&#xff0c;正是由于Samba的出现&am…

FPGA+NIOS2 Verilog+C 实现一个计算器

用FPGA生成一个32位的MCU软核&#xff0c;生产相应的管脚和资源&#xff0c;在MCU里边用C完成计算器的逻辑和LCD1602、矩阵键盘的编写。2016年的古老存货。 一、硬件和开发环境 FPGA&#xff1a;EP4CE6E22C8 LCD1206液晶&#xff0c;4X4矩阵键盘。quartus 13project_FPGA_NO1…