五、物联网的落脚点—— ADC

前言

学已至此,stm32 引脚的基本使用只剩下了本期主角 ADC 即模数转换器,即将连续变化的模拟信号转换为离散的数字信号的器件,可以说是真实世界与在数字世界中沟通的桥梁。

ADC 最早用于对无线信号向数字信号转换。如电视信号,长短播电台发射接收等。

总之为什么 ADC 如此重要实际物联网的概念的落脚点正是各个独立的设备通过如温度、湿度等传感器对信息进行采集并加以处理,最终进行传播。

需要了解的几个概念:

分辨率 :变现了信号的分辨能力,一般有8位、10位、12位、16位,位数越多,表示分辨率越高,当然恢复模拟信号时也会更精确。

精度 :模拟值和真实值之间的最大误差值。

转换速率 :数字量与模拟量之间转换的时间。

本篇博客设计一个简单测量电压实验,认识 ADC 的基本使用。

实验内容ADC 中断方式采集底版上的电压值转换为数字量。

1、查底板原理图

可以看到连接的引脚为 PC3 ,因此需要查找 PC3 对应的 ADC 编号

2、查 stm32 数据手册

使用 ADC 1、2 或者 3 的 13号输入都可以完成要求

继续查看有关 ADC 特征的描述,可以知道在 3.3 V 时,最大频率为 36 MHz 而稳定采样频率为 30 MHz

3、配置

如上文查找选择配置勾选 ADC1IN13

考虑时钟频率进行如下计算:

转换时间(TCONV)=采样时间(TSMPL)+逐次逼近时间(TSAR) 
单ADC最大转换速率为2.4 MSPS

PCLK2=90MHz

ADC_Clock=90/分频系数

采样时间:至少位3个clock

最终使得 12 bit 最低转换速率满足 (90MHz / 分频系数) / (12+3) < 2.4MHz 

即分频系数 > 2.5 因此配置分频系数为 4

具体更改如图所示:注意开启连续采样,否则采样一次将会结束采样工作

其余参数:根据需求自行调整即可如 DMA 方式采集信息、多通道采样时的转换通道数量以及顺序等,本文不做进一步描述,简单了解 ADC 的使用,采样逻辑自行设计,即可触类旁通嘛!

开启 ADC 中断后,配置完生成代码

4、应用代码编写

main.c 中:

添加 ADC 转换值的全局变量

实现 ADC 的中断回调函数,即每当 ADC 完成采集即会调用该函数,因此在此处获取采集值即可(另外有另一种采集思路,即不使用中断方式时可以轮询方式采集,轮询是否采样完成采样完成即可输出,再进行下一次采样)

void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* AdcHandle)
{
	ADC_ConvValue= HAL_ADC_GetValue(AdcHandle);
}

循环中增加打印操作显示采集到的信息,4096为12位采样,即2的12次方

	  printf("ADC value=%.03f V \n\r",ADC_ConvValue/4096.0 *3.3);
	  HAL_Delay(500);

adc.c 中:

开启 ADC 中断采集

编写完成下载测试,正常运行采集任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DarianT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值