本章通过两个例程介绍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引脚测试。
上一篇:STM32学习---GPIO和按键(流水灯学习)
下一篇:STM32Cube-直接存储器访问(DMA)
推荐阅读最新更新时间:2024-11-13 15:10
设计资源 培训 开发板 精华推荐
- 使用 ROHM Semiconductor 的 BD49E27G-TR 的参考设计
- 用于开/关控制应用的 AM2G-0509DZ ±9V 2 瓦 DC-DC 转换器的典型应用
- TLE 4295 低压稳压器的典型应用
- NCP110AFCT180T2GEVB:NCP110 WLCSP4 评估板
- 流水旋转灯
- stm32最小核心板
- AD9214-65PCB,用于 10 位、65/80/105 MSPS 3 V A/D 转换器的评估套件
- LTC3221-5 演示板,微功率稳压电荷泵 DC/DC 转换器
- 使用 Diodes Incorporated 的 AZ7042ZTR-E1 的参考设计
- FA-128_CC253x,用于 CC253x 系列低功耗 802.15.4 LR-WPAN 无线应用的外部振荡电路