adc : analog digital converter : 模拟信号转换成数字信号
变化的电压信号,,, 转换成数字信号

12位,,逐次逼近型adc
采样深度:用多少位2进制来表示采样转换结果
12位二进制数 表示 采样的转换结果,,,
一般adc,,都是10位,12为,,一些高端的adc是用的14位,16位
逐次逼近型:

逐次逼近型: 里面有比较器,,, 从最高的一位开始,,依次往后加,,类似天平慢慢增加砝码
采样保持电路:
adc多路复用 : 只使用一个adc,,同时去转换多个模拟输入

adc1对应的引脚



常规序列: 后面开关,采样的闭合时间,,,,,,,,,
regular sequence
常规序列: 依次往后执行,,往后闭合开关,采样
外部触发一次之后,, 常规序列就会被一次采样一遍

注入序列:

结果寄存器
通道更少,,,注入序列数字为4,,,4个通道,, 每一个通道有一个单独的寄存器,,,
常规序列只有一个结果寄存器、
注入序列优先级比 常规序列高

常规序列: regular channel group
电位器,光敏电阻,,温度,,电压检测
注入序列 :injected channel group
电机控制 : pwm某时刻,,精确采样电流
电机,数字电源,高频控制
采样时间
转换时间

adc时钟频率,,要小于 14MHz... 这是stm32F1系列,对adc时钟的要求,,
adc内部不是瞬间转换的,,,
它内部有: 采样保持电路,比较器,,SAR逐次逼近逻辑,,这些都需要时间稳定,,
如果adc时钟太快,,
采样时间 = cycles × 时钟周期
采样时间是55.5个时钟周期,,,
教程里面说的us,,是根据一个固定的时钟周期,,计算出来的
12MHz ===》 4.6us ===》 6分频 ,,, 72/6
转换时间

转换时间一共要计算12个bit位,,每一个bit位需要消耗一个时间周期
总时间 = 采样时间 + 12.5 cycles
SAR ADC 逐次逼近型ADC,,内部不是一下子算出结果,,而是一位一位比较
0.5个周期: 启动比较器,锁存结果,SAR状态切换,,数据同步等
信号源内阻:

内阻越大,充电时间越长,,采样时间越长

·光敏传感器:
转换时间 12.5cycle
采样时间 10.24cycle
常规序列的单通道转换 : 就是只测一个通道,,,
常规序列
注入序列
控制采样开关,闭合的顺序和闭合的时间



eoc: end of convert 转换完成,,, 常规序列转换完成之后,标志位为1
JEOC: inject end of convert ,,, 注入序列转换完成,,标志位为1
DR :data register
JDR : inject data register

一般使用右对齐,,,右对齐好算
adc的参数:
-
连续模式 continue mode : adc转换完了一次后,会自动再次开始转换,,不用你手动触发,,,采完一次,,立即开始下一次
想实时监测,,比如电位器,电压,波形,传感器
-
对齐方式
默认取右对齐,,有时候只想取高8为,,可以设置为左对齐
-
扫描模式 :scan mode : adc会自动按顺序转换多个通道,,,不开扫描模式,,,adc只会转换一个通道,,, 开启扫描模式会一个一个检查
-
自动注入 auto injected
注入组: injected group
常规组转换完成后,,,自动触发 注入组转换,,,即regular完成,,,自动开始injected
如果不开启自动注入,,regular和injected 完全独立,,,自动注入,,一般 电击FOC才大量使用
-
外部触发信号 : external trigger
由外部事件来启动adc转换,,,而不是cpu手动启动
- 普通方式: 软件触发,,,, cpu手动让adc开始
- 外部触发 : adc不再自己开始,,而是等待某个事件,,比如:定时器,,pwm,,exti,,TIM_CC,TIM_TRGO
比如,定时固定拍照
校准,, adc会自己测量内部误差,,自动补偿
,,官方推荐,,上电后校准一次
、
芯片里面只能存01的数字量,,不能直接存浮点数的电压,,adc会自动转换成 01数字量,,,,可以根据01的数字量还原多少电压