历史上的今天
返回首页

历史上的今天

今天是:2024年09月11日(星期三)

正在发生

2019年09月11日 | STM32CubeMx-ADC

2019-09-11 来源:eefocus

本章通过两个例程介绍STM32的模数转换器(ADC),第一个通过ADC采集内部温度传感器通道电压,然后得出MCU内部温度。第二个通过DMA的方式采集两个ADC通道电压。


1.ADC


本章程序在串口printf工程的基础上修改,复制串口printf的工程,修改文件夹名。击xxx.ioc打开STM32cubeMX的工程文件重新配置。ADC1外设选择温度传感器通道。

ADC1配置如下,选择默认设置。其Date Alignment设置为数据右对齐; 采样时间 239.5周期。对于每个要转换的通道,采样时间建议尽量长一点,以获得较高的准确度,但是这样会降低 ADC 的转换速率。 ADC 的转换时间可以由以下公式计算:


Tcovn=采样时间+12.5 个周期


其中: Tcovn 为总转换时间,采样时间是根据每个通道的 SMP 位的设置来决定的。例如,


当 ADCCLK=14Mhz 的时候,并设置 1.5 个周期的采样时间,则得到:  TCONV = 1.5 + 12.5 = 14周期 = 14×(1 / (14 × 1000000)) = 1μs。


生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。


在stm32f1xx_hal_adc.h头文件中可以找到如下ADC操作函数。和串口一样,ADC也可以通过三种方式控制。

在main()函数前面声明变量保存AD采集的值

在main()函数while(1)循环里面添加函数声明变量保存AD采集的值

在adc.c还要添加ADC校准

HAL_ADC_GetValue(&hadc1);读取ADC转换数据,数据为12位。查看数据手册可知,寄存器为16位存储转换数据,数据右对齐,则转换的数据范围为0~2^12-1,即0~4095.

AD_Value*3300/4096为将转换后的数据转化为电压,单位为mV,参考电压为3.3V。查询数据手册可以电压和温度的关系。经过计算公式装换后等到MCU内部温度值。


编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示MCU温度。


2.ADC_DMA


前面介绍了通过ADC轮询的方式采集单通道的数据。现在介绍一下通过DMA方式采集多通道的数据。


复制串口printf工程的工程,修改文件夹名。点击xxx.ioc打开STM32cubeMX的工程文件重新配置。使用PA6,PA7管脚作为ADC1的输入管脚。


ADC1配置:使能扫描转换模式(Scan Conversion Mode),使能连续转换模式(Continuous Conversion Mode),使能DMA连续请求。ADC规则组选择转换通道数为2(Number Of Conversion)。其他为默认设置。


添加DMA设置,设置为连续传输模式,数据长度为字

生成报告以及代码,编译程序。在adc.c文件中可以看到ADC初始化函数。


在main函数前面添加变量。其中ADC_Value作为转换数据缓存数组,ad1,ad2存储PA6,PA7的电压值。

在while(1)前面以DMA方式开启ADC装换。HAL_ADC_Start_DMA()函数第二个参数为数据存储起始地址,第三个参数为DMA传输数据的长度。


由于DMA采用了连续传输的模式,ADC采集到的数据会不断传到到存储器中(此处即为数组ADC_Value)。ADC采集的数据从ADC_Value[0]一直存储到ADC_Value[99],然后采集到的数据又重新存储到ADC_Value[0],一直到ADC_Value[99]。所以ADC_Value数组里面的数据会不断被刷新。这个过程中是通过DMA控制的,不需要CPU参与。我们只需读取ADC_Value里面的数据即可得到ADC采集到的数据。


      其中ADC_Value[0]为通道6(PA6)采集的数据,ADC_Value[1]为通道7(PA7)采集的数据,ADC_Value[2]为通道6采集的数据,如此类推。数组偶数下标的数据为通道6采集数据,数组奇数下标的数据为通道7采集数据。


在while(1)循环中添加应用程序,将采集的数据装换为电压值并输出。


程序中将数组偶数下标数据加起来求平均值,实现均值滤波的功能,再将数据转换为电压值,即为PA6管脚的电压值。同理对数组奇数下标数据处理得到PA7管脚的电压值。


编译程序并下载到开发板。打开串口调试助手。设置波特率为115200。串口助手上会显示采集到的电压值,使用杜邦线连接开发板上的3.3v和GND引脚测试。


推荐阅读

史海拾趣

Allied Wire & Cable Inc公司的发展小趣事

面对日益严峻的环境问题,Allied公司积极承担社会责任,致力于可持续发展。公司注重环保生产,采用环保材料和工艺,减少对环境的影响。同时,公司还关注未来发展趋势,制定了一系列战略规划,包括加大研发投入、拓展新兴市场、提升品牌影响力等,为公司的未来发展奠定了坚实的基础。

这些故事基于Allied Wire & Cable Inc公司的历史和发展情况构建,旨在展现其在电子行业中的成长和进步。如需更详细的信息,建议查阅公司的官方网站或相关新闻报道。

Caltron Devices Ltd公司的发展小趣事

为了进一步提升公司的竞争力和影响力,Caltron Devices Ltd公司积极实施国际化战略。公司加强与国外同行的交流与合作,引进先进的技术和管理经验,不断提升自身的创新能力。同时,Caltron还积极参加国际电子展会和论坛,展示公司的最新产品和技术成果,成功打开了全球市场的大门。

Amprobe公司的发展小趣事

在电子市场竞争日益激烈的背景下,Caltron Devices Ltd公司始终坚持品质至上的原则。公司建立了严格的质量管理体系,从原材料的采购到生产过程的控制,再到产品的出厂检验,每一个环节都严格把关。正是这种对品质的执着追求,使得Caltron的产品在市场上获得了良好的口碑,赢得了客户的信赖。

Desco Tools公司的发展小趣事

随着技术的不断进步,Desco Tools公司不断进行技术创新和产品升级。公司投入大量研发资源,开发出了更加高效、可靠的防静电工具,如新型防静电工作服、无尘室专用工具等。这些产品不仅满足了市场对防静电工具日益增长的需求,还进一步巩固了公司在该领域的领先地位。

ebm-papst公司的发展小趣事

在巩固欧洲市场的基础上,ebm-papst不断拓展全球市场,特别是亚洲市场。近年来,公司在亚洲市场的营收增长率一直保持在较高水平。为了进一步拓展亚洲市场,ebm-papst加大了在中国的产能建设,陆续在上海、西安等地进行扩建和新建产能。这些措施使得ebm-papst能够更好地满足亚洲市场的需求,并为其在全球市场的进一步发展奠定了坚实基础。

上海国芯(Gcore)公司的发展小趣事
根据应用场景选择合适的报警装置,如蜂鸣器、LED灯或继电器等。

问答坊 | AI 解惑

44B0X中文资料.大家支持下

44B0X中文资料.大家支持下…

查看全部问答>

PCB上的模拟地和数字地有什么区别

各位兄台,咨询个问题,PCB上的模拟地和数字地有什么区别?模拟地和数字地接到哪里去?信号地是不是也有讲究…

查看全部问答>

关于eboot的依赖lib的编译

小弟在编译EBOOT的时候发现fulllibc.lib这个库一直找不到在哪里编译出来, 有人试过,依次的编译eboot的所需要的库吗?…

查看全部问答>

VC2005做的pocket pc程序怎么能让界面不在自动全屏?

用vs.net2005中的C++做的pocketpc程序运行后界面总是自动全屏化,该怎么解决?…

查看全部问答>

51单片机串口发送问题

为什么我这样不能发?那个TI不处理我至少应该收到一个啊?                              for(m=0;m…

查看全部问答>

用分立元器件怎样做射频卡?

各位大牛好,我最近参加了学校的电子设计竞赛,做的题目是《RFID打卡器和射频卡设计》,题目要求射频卡不能直接用现成的卡,像Mifare 1k(s50)这样的。从拿到题目到现在几天了,我都没搞懂怎样用分立元件做射频卡 ,恳求大侠们指点一下 。…

查看全部问答>

哪位大侠可以给我完整深入的说一下TMS320F2812,我的毕业设计要用到

哪位大侠可以给我完整深入的说一下TMS320F2812,我的毕业设计做的就是DSP,因为没学过,所以现在用就很吃力。 希望那个大哥大姐帮我一下,越详细越好,一些硬件结构,外部电路,寄存器设置等等,谢谢了。…

查看全部问答>

MDK环境下编译LM3S8962程序出现RL-ARM is not allowed with this license

.\\Obj\\Memory.axf: Error: L9937E: RL-ARM is not allowed with this license, 该问题是没有支持Real-Time OS功能,需要在license中加入这个,如下图所示,就可以正常编译了 [ 本帖最后由 hansonhe 于 2012-3-20 14:06 编辑 ]…

查看全部问答>

STM32由入门到精通2012年3月版

STM32由入门到精通2012年3月版,很值得看看!!!! …

查看全部问答>