江科大STM32学习——ADC模块

ADC介绍:

  • ADCAnalog-Digital Converter)模拟-数字转换器.
  • ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁
  • 12逐次逼近型ADC(分辨率0-40951us转换时间(开始到产生结果)
  • 输入电压范围0~3.3V转换结果范围0~4095(电压和转换结果对应着线性关系)
  • 18个输入通道,可测量16个外部(GPIO口)和2个内部信号源(内部温度传感器、内部参考电压)(1.2V左右,不随外部电压变化)
  • 规则组注入组两个转换单元(一次性启动一个组,一个组一个组的转换)
  • 模拟看门狗自动监测输入电压范围(可以测量温度,光线等,达到阈值,执行操作)
  • STM32F103C8T6 ADC资源:ADC1ADC210个外部输入通道(最多外部10个引脚输入)

逐次逼近型ADC

        通道选择开关:可以接入多路信号输入进行转换,不必设计多个ADC转换器,通过三路地址锁存和译码进行选择。选中对应通道进行转换即可

        输入端一端是DAC输出已知编码的电压,另一端是未知的电压。同时输入电压比较器进行比较,逐次二分法逼近。最后进行输出。

        clock时钟驱动,EOC:end of convert转换结束信号,start:开始信号。Vref+ ,Vref-是DAC的参考电压。(给一个数据255,是对应3.3v还是5v由参考电压决定,也决定了ADC的输入范围,也是ADC的参考电压   vcc,gnd供电,一般和参考电压一起连接。

Stm32ADC外设

  1. 16路输入,2路内部输入,通过多路开关进行选择
  2. 普通模式:输入数据,进行转换输出
  3. Stm32采用组模式,一次处理一组数据,分为规则通道和注入通道
  4. 规则通道一次可以处理16通道数据,然而数据只能保存一通道,会被覆盖,需要配合DMA使用快速转存数据
  5. 注入通道可以选择4通道数据,同时也能保存住数据。
  6. 触发Start:

    1软件触发:编写代码进行触发

    2硬件触发:主要来自定时器,TRGO,也可以选择外部中断引脚来触发转换

  7. 供电时钟部分:

    VDDA,Vssa:内部模拟电路电源

    ADC预分频器来自RCC_APB2

    完成后:

    EOC可以触发中断。

    可以部署模拟看门狗监视转换结果的范围,超出可以申请中断

  8. 3工作流程图:

  9. 转换模式:分单次转换、连续转换和扫描模式和非扫描模式。

  10. 转换模式:

  11. 通过序列1进行转换,输入通道数,触发,输出结果,EOC置1,表示转换完成

    非扫描模式:仅用第一个

    单次转换:仅一次一次来

  12. 引脚对应图:

  13. 数据对齐:

    ADC是12位的,转换结果就是12位的数据。数据寄存器是16位的,需要对齐数据。

    常用数据右对齐。左对齐将数据放大了。可以降低数据分辨率

  14. 转换时间:

  • AD转换的步骤:采样,保持,量化,编码
  • STM32 ADC的总转换时间为:
  •     TCONV = 采样时间(采样保持花费时间) + 12.5个ADC周期(ADCCLK,最大14mhz)

  • 例如:当ADCCLK=14MHz,采样时间为1.5ADC周期
  •     TCONV = 1.5 + 12.5 = 14个ADC周期 = 1μs

    校准:

  • ADC有一个内置自校准模式。校准可大幅减小因内部电容器组的变化而造成的准精度误差。校准期间,在每个电容器上都会计算出一个误差修正码(数字值),这个码用于消除在随后的转换中每个电容器上产生的误差
  • 建议在每次上电后执行一次校准
  • 启动校准前, ADC必须处于关电状态超过至少两个ADC时钟周期
  • 通过代码进行配置即可
  1. 运行流程:

    1开启GPIO,AD时钟,配置AD的时钟。

    2配置GPIO模拟输入

    3配置ADC模块:配置通道,初始化。

    4其他需求:中断、看门狗

    5开启ADC

    6对ADC进行校准while等待

    6编写程序触发转换1ADC_SoftwareStartConvCmd

    2获取标志位状态,利用while等待

    3取结果(会自动清除标志位)

    (连续转换不需要在程序中触发转换,在init中触发一次即可,也不需要获取标志位,直接取结果就行。

    使用单通道实现多次扫描:在软件触发程序手动更改通道) 

  2. 相关库函数:

    RCC_ADCCLKConfig:

    ADC_DeInit

    ADC_Init

    ADC_StructInit

    ADC_Cmd

    ADC_DMACmd:使用DMA输出数据时需要用这个开启

    ADC_ITConfig:通往NVIC

    ADC_SoftwareStartConvCmd:软件触发

    ADC_GetFlagStatus:检查EOC标志位是否置1了,检查转换是否结束

    ADC_RegularChannelConfig:配置通道

           

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值