资讯详情

STM32固件库(标准外设库)入门学习 第七章 ADC数模转换(二)

STM入门学习32固件库(标准外设库) 第七章 ADC数模转换(2)


文章目录

  • STM入门学习32固件库(标准外设库) 第七章 ADC数模转换(2)
  • 前言
  • 一、硬件电路
  • 二、AD单通道
    • 1 ADC常用函数分析
    • 2 第一步开启RCC时钟
    • 3 第二步配置GPIO
    • 4 第三步选择规则组的注入通道
    • 5 第四步是结构体的初始化ADC
    • 6 第五步开启ADC电源
    • 7 第六步对ADC进行校准
    • 8 第七步写一个函数获取ADC结果
    • 9 主函数
  • 三、AD多通道
    • 1 程序分析
  • 总结


前言

本学习教程参考B站江科大自化协会STM32视频,型号为STM32F103C8T6。


一、硬件电路

在这里插入图片描述 左图为电位器产生可调电压的电路;

传感器输出电压的电路包括光敏电阻、热敏电阻、红外接收管、麦克风等。这个电阻N如果电阻值无法测量,则需要与固定电阻串联分压,以获得反应电阻值的电压。传感器N1 N1电阻值变大,下拉作用变弱,输出端受上拉电阻R电压会升高。固定电阻R1可选择类似于传感器电阻值的电路,以便在中间电压区域获得更好的输出。

右图为电压转换电路。例如,我想测量05V的VIN电压,但是ADC只能接收03.3V如果电压,可以建立这样一个简单的转换电路,用电阻分压,上面的电阻是17k,下面电阻33k,共50k,根据分压公式,中间电压就是VIN/50k*33k,电压范围为0~3.3v你可以进去ADC转换。10V也可以采用此电路,但是高电压采集最好使用一些专用的采集芯片,比如隔离放大器等等,做好高低电压的隔离,保证电路安全。

开关(黄色部分),将左通道连接到右规则组列表;

第四步配置ADC转换器,库函数配置结构,包括单次转换或连续转换、扫描或非扫描、通道数量、触发源、数据对齐(左对齐)or右对齐)。要模拟看门狗,会有几个函数配置阈值和检测通道。如果您想打开中断,请使用中断输出控制ITConfig函数打开相应的中断输出,然后在NVIC配置优先级,可触发中断;

第五步调用ADC_Cmd函数,开启ADC。

1 ADC常用函数分析

打开rcc.h文件,拖到最后,配置预分频器函数。APB2的72MHz选择2、4、6、8频,输入到ADCCLK。 打开adc.h文件,拖到最后。 (1)常见的ADC结构初始化配置; (2)给ADC上电; (3)开启DMA如果使用输出信号DMA转运数据时,需要调用此函数; (4)中断输出控制,控制中断能否通过NVIC; (5)复位校准、复位校准、开始校准、开始校准; (6)ADC用于软件触发的函数和触发控制的软件开始转换控制。ADC获取软件开始转换状态,判断转换是否正在进行,但不能判断转换是否结束,函数返回值与转换是否结束无关; (7)判断转换是否结束,获取标志位状态,给出参数EOC标志位,判断EOC标志位置是否为1,置1为转换结束; (8)配置间断模式,第一个函数是每隔几个通道间断一次,第二个函数是否启用间断模式; (9)ADC规则组通道配置,此函数比较重要,作用为给序列的每个位置填写指定的通道,即填写点菜菜单的过程,第三个参数Rank是序列的位置,第四个指定通道的采样时间; (10)ADC外部触发转换控制是否允许外部触发转换; (11)ADC获得转换值更为重要,即获得转换值AD该函数用于转换数据寄存器,读取转换结果; (12)ADC获得双模式转换值,这是双模式转换值ADC模式读取转换结果的函数; (13)这些函数都带来了Injected,这意味着注入组,所以这大量函数是正确的ADC配置注入组; (14)配置模拟看门狗,第一个函数是否使用模拟看门狗,第二个是配置高低阈值,第三个是配置看门通道; (15)ADC温度传感器和内部参考电压控制用于打开两个内部通道。如果使用这两个通道,请调用此函数并打开它们,否则您将无法阅读正确的结果; (16)分别为获取标志位状态、清除标志位、中断状态和中断起位。

2 第一步开启RCC时钟

3 第二步配置GPIO

4 第三步选择规则组的注入通道

5 第四步是结构体的初始化ADC

6 第五步开启ADC电源

7 第六步对ADC进行校准

8 第七步写一个函数获取ADC结果

触发器的原理。如果数据跳跃严重,也可以采用滤波法AD比如平均滤波,读取10个或20个值,取平均值作为滤波AD值。还可以切割分辨率,去除数据尾数,减少数据波动

9 主函数

若修改为连续转换非扫描模式

1 程序分析

多通道需要使用扫描模式,使用列表填写所有四个通道,然后触发转换以实现多通道。但这里涉及到数据覆盖问题,如果你想使用扫描模式来实现多通道,最好与之合作DMA为了实现。可能会有一个问题,就是一个通道转换完成后,为什么要手动转移数据?DMA该方案在运行中存在以下问题:

(1)在扫描模式下,列表启动后,每个单独的通道转换完成后,不会产生任何标志位或触发中断,即不知道通道是否已转换,只有在整个列表转换完成后才会产生一次EOC只有标志位才能触发中断,此时前面的数据已经覆盖丢失; (2)AD转换非常快,转换通道只有几个μs,若不能在几μs转移数据的时间,数据就会丢失。

本节采用单次转换和非扫描模式。只需在每次触发转换前手动更改列表第一位置的通道。 程序修改如下: 所以我们在调用AD_GetValue转换时,只要指定转换通道,返回值就是我们指定通道的结果


总结

AD编写单通道和多通道程序

标签: ad数模转换电位器ad值

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台