STM32————ADC单通道与多通道的模数转换器

今天学习ADC的数模转换器的内容,首先是使用单通道进行转换电压值

代码如下:首先是开启时钟,尤其是增加了ADC的时钟,之后需要GPIO的初始化、ADC的规则组通道配置以及ADC的初始化、开启使能,最后进行ADC的校准。

以下是模数转换的函数

可以将输出值转换为电压值,ADC单通道的结果如下所示:

将电位器左转,输出电压值减小

电位器左转

电压值右转,输出电压值增大

电位器右转

接下来是理论部分:

ADC为12位,范围是0~2^12-1(4095),内部信号源分为温度传感器(可以测量CPU的温度)和一个内部1.2V的基准电压(当外部电压的引脚不标准时,可采用此电压进行校正)

常规使用的规则组,突发事件的注入组。

ADC可测量光线强度、温度,可使用模拟看门口功能实现

首先了解以下ADC芯片:

芯片共有8个通道,首先选择一路将数据传递到比较器,之后与DAC值通过逐次逼近SAR采用二分法进行比较值,如果DAC值大于数据,调小DAC,反之调大,直到DAC与传输的数据近似相等,此时DAC的输入数据就是外部输入的未知电压的编码数据,

如下所示:因为ADC芯片一共8个通道,所以一共0~255的范围,一次一次与未知数据比较,譬如,第一次比较给DAC输入255一半128与未知数据进行比较看是大是小,如果大,就继续给DAC输入126一半64,判断8次就可以找到未知的编码数据,以此类推找到近似值。

了解STM32的ADC:

主要是规则通道一次性最多可以有16个通道,譬如这个转换系统相当于点菜,普通是点一道上一道菜,但是规则通道相当于是一个菜单,可以一次性上16道,但是在规则通道数据寄存器相当于一个只能放下一道菜的桌子,相当于有新的菜上来时前面的就会被覆盖,因此需要结合DMA数据转运小助手将每次上来的菜立马端走防止被覆盖。而注入通道相当于VIP,一次性最多上4道且前面的数据不会被后来的数据覆盖。

STM32的ADC一共有16个GPIO口+一个温度传感器口+内部基准电压口,一共18个输入口。

ADC的时钟最大允许14MHz,因此后续选择6/8分频才能满足要求。

整体如下所示:

ADC中一共有4种转换模式:

首先是单次转换、非扫描模式,主要是首先选择需要转换的通道,之后触发开始转换,只有序列的第一行有效,之后当数据传入到数据寄存器时,给EOC置1,如果想再次转换,需要再次触发然后进行转换。

之后是连续转换、非扫描模式

开始转换后不需要多次触发,只需要触发开始的一次即可,他会不断将数放到数据寄存器。

之后是单次转换、扫描模式

这时用到了菜单列表,依次进行转换,使用到了DMA将数据及时挪走防止覆盖。

菜单中的通道数可以重复,转换之后EOC为1,表示数据转换完

最后是连续转换,扫描模式

一般选用右对齐,输出值就是实际值

左对齐用于当你不需要高分辨率时,可以取出前8位,将12位ADC转换为8位ADC,舍弃后4位的精度。

因为ADC是12位所以加12.5个ADC周期(0.5做一些别的事)

接下来是多通道的实现,采用三种传感器,主要通过将输入数据改为自己写入通道数,即实现用单次转换,非扫描模式实现多通道的ADC转换。

主函数:

结果如下:分别是各个通道的电压值变换

A01

A02

A03

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hssfscv

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

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

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

打赏作者

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

抵扣说明:

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

余额充值