电商网站建设比较好的,杭州seo关键词优化哪家好,北京品牌网站设计,怎么注册公司支付宝文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换#xff0c;非扫描模式连续转换#xff0c;非扫描模式单次转换#xff0c;扫描模式连续转换#xff0c;扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路… 文章目录 ADC模数转换器ADC简介逐次逼近型ADCSTM32的ADCADC基本结构输入通道转换模式单次转换非扫描模式连续转换非扫描模式单次转换扫描模式连续转换扫描模式 触发控制数据对齐转换时间校准硬件电路电位器产生可调电压的电路传感器输出电压的电路电压转换电路 ADC模数转换器
ADC简介 有ADC也有DAC数字模拟转换器使用DAC可以将数字变量转化为模拟电压与PWM相比较PWM也有DAC的功能同时PWM只有完全导通和完全断开两种状态没有功率损耗在直流电机调速这种大功率的应用场景使用PWM来等效模拟量比DAC更好。DAC的应用主要在波形生成比如信号发生器、音频解码芯片等。 AD转换需要花一小段时间1us表示从AD转换开始到产生结果需要1us对应AD转换的频率就是1MHz是STM32ADC的最快转换频率。 两个内部信号源是内部温度传感器和内部参考电压温度传感器可以测CPU温度内部参考电压是1.2V左右的基准电压不随外部供电电压变化而变化如果芯片的供电不是标准3.3V测量外部引脚的电压可能不对这时可以读基准电压进行校准。 普通的AD转换流程是启动一次转换读一次值再启动再读值但STM32的ADC可以列一个组一次性启动一个组连续转换多个值并且有两个组一个用于常规使用的规则组一个用于突发事件的注入组。 ADC一般可以用于测量光线强度、温度这些值并且经常有需求如果高于某个阈值或低于某个阈值执行一些操作判断高于或低于可以用模拟看门狗来自动执行模拟看门狗可以监测指定的某些通道当高于或低于它设定的阈值时申请中断就可以在中断函数里执行相应的操作这样就不用不断手动读值再if判断了。
逐次逼近型ADC 地址锁存和译码的作用是想选中哪一路就把通道号放在ADDA、ADDB、ADDC这三个脚上然后给一个锁存信号上面对应的通路开关就自动拨好了。 之后看电压比较器它可以判断两个输入信号电压的大小关系输出一个高低电平指示谁大谁小两个输入端一个是待测电压另一个是DAC的电压输出端DAC内部是使用加权电阻网络来实现的转换当输入一个未知编码的电压和一个DAC输出的已知编码的电压两个同时输出到电压比较器进行大小判断如果DAC输出的电压比较小就增大DAC数据直到DAC输出的电压和外部通道输入的电压近似相等这样DAC输入的数据就是外部电压的编码数据了。电压调节的过程就是逐次逼近SAR来完成的通常用二分法进行寻找电压比如这里八位DAC编码0-255第一次比较给255的一半128如果DAC电压大了第二次比较给128的一半64…对于8位ADC依次判断8次就能找到未知电压的编码对于12位的ADC判断12次。这就是逐次逼近的过程。 EOC是End of Convert转换结束信号START是开始转换给一个输入脉冲开始转换CLOCK是ADC时钟因为ADC内部是一步一步进行判断的需要时钟进行推动VREF和VREF-s是DAC的参考电压DAC的参考电压也决定了ADC的输入范围所以也是ADC参考电压
STM32的ADC 规则通道组最多选16个通道但是规则通道取出结果时前15个数据会被覆盖掉依次只能留一个数据需要配合DMA进行数据转运。注入通道最多选4个通道而且有四个数据寄存器不用担心数据覆盖
左下角是触发转换的部分也就是START信号开始转换。对于STM32的ADC触发转换的信号有两种一种是软件触发在程序中手动调用一条代码启动转换另一种是硬件触发就是左下角这些触发源主要来自于定时器有定时器的各个通道还有TRGO定时器主模式的输出定时器可以通向ADC、DAC这些外设用于触发转换因为ADC经常需要过一个固定时间段转换一次比如每隔1ms转换一次如果正常用定时器每隔1ms申请一次中断会频繁进中断对程序有影响像这种需要频繁进中断并且在中断只完成了简单工作的情况用硬件进行支持比如这里给TIM3定1ms时间并且把TIM3的更新事件选择为TRGO输出然后在ADC选择开始触发信号为TIM3的TRGOTrigger Output这样TIM3的更新事件就能通过硬件自动触发ADC转换这就是定时器触发的作用。 V R E F V_{REF} VREF和 V R E F − V_{REF-} VREF−是ADC的参考电压决定了ADC输入电压的范围下面VDDA和VSSA是ADC的供电引脚一般情况下 V R E F V_{REF} VREF接VDDA但我们学的这款芯片没有在内部已经和VDDA连接在一起了VDDA接3.3V 、VSSA接GND所以ADC的输入电压范围就是0-3.3V。 右边的ADCCLK是ADC的时钟也就是上面的CLOCK用于驱动内部逐次比较的时钟来源于以ADC预分频器来源与APB2时钟。
模拟看门狗里面可以存一个阈值高限和阈值低限如果启动了模拟看门狗并且指定了看门的通道那这个看门狗就会关注它看门的通道一旦超过阈值范围就是申请看门狗的中断最后通向NVIC。对于规则组和注入组而言转换完成后也会有一个EOC转换完成的信号EOC是规则组的完成信号JEOC是注入组完成的信号这两个信号会在状态寄存器里置一个标志位读取标志位就能知道是不是转换结束了同时这两个标志位也可以去NVIC申请中断如果开启了NVIC对应的通道它们就会触发中断
ADC基本结构 输入通道 ADC12_IN0的意思是ADC1和ADC2和IN0都是在PA0上下面全是ADC12说明ADC1和ADC2的引脚全都是相同的作用是双ADC模式ADC1和ADC2一起工作他俩可以配合组成同步模式、交叉模式等交叉模式就是ADC1和ADC2交叉对一个通道进行采样进一步提高采样率ADC1和ADC2也可以分开使用分别对不同的引脚进行采样
转换模式
单次转换非扫描模式 非扫描模式下只有序列一的通道有效触发转换ADC就会对通道2进行模数转换过一小段时间转换完成结构放在数据寄存器同时给EOC标志位置置1判断EOC标志位来决定什么时候读数据寄存器。如果想要再一次转换就需要再触发一次如果想换一个通道转换转换之前把第一个位置的通道2改成其他通道然后再启动转换
连续转换非扫描模式 非扫描模式还是只用序列1但连续转换转换结束后不会停止而是立刻开启下一轮转换一直持续下去这样只需要一开始触发一次之后就可以一直转换了。这个模式的好处是开始转换之后不需要等待一段时间因为一直在转换想要读AD值的时候直接从数据寄存器读就是了。
单次转换扫描模式 单次转换没触发一次转换结束后停下来。扫描模式会用到“菜单列表”可以在菜单里点菜第一个菜是通道2第二个菜是通道5…初始化结构体力多了一个通道数目参数告诉主机用到了几个序列比如指定通道数目为7就只看前7个位置每次触发后依次对前7个位置进行AD转换转换结果都放在数据寄存器里为了防止数据被覆盖需要用DMA及时将数据挪走。7个通道转换完成之后产生EOC信号转换结束然后再触发下次开始新一轮转换。
连续转换扫描模式
一次转换后立刻开始下一次的转换。另外注意扫描模式的情况下还有一种模式是间断模式它的作用是在扫描的过程中每隔几个转换就暂停一次需要再次触发才能继续
触发控制 具体是引脚还是定时器需要用AFIO重映射来确定。软件控制位是我们之前说的软件触发这些触发信号可以通过设置右边寄存器来选择
数据对齐 数据右对齐高位补0数据左对齐低位补0。一般用数据右对齐因为右对齐直接读出寄存器的值就是转换结果如果选择左对齐直接读得到的数据会比实际的大因为数据左对齐实际上是把数据左移了四次相当于把结果乘以16。左对齐的作用是如果不想要很高的分辨率可以选择左对齐再把数据的高8位取出这样就舍去了后四位的精度12位的ADC退化为8位ADC。
转换时间 为什么需要采样和保持 AD转换就是后面的量化编码需要一小段时间如果这一小段时间里输入的电压还在不断变化就无法定位输入电压到底在哪所以在量化编码之前设置一个采样开关先打开采样开关收集外部的电压比如可以用一个小容量的电容存储一下电压存储好之后断开采样开关再进行后面的AD转换。这样在量化编码的期间电压始终保持不变这样才能精确定位未知电压的位置这就是采样保持电路采样保持的过程中需要闭合采样开关过一段时间再断开。 采样时间是采样保持花费的时间可以在程序中配置采样时间越大越能避免毛刺信号的干扰不过转换时间也会相应延长12.5个ADC周期是量化编码花费的时间因为是12位ADC所以花费12个周期ADC周期就是从RCC分频过来的ADCCLK最大是14MHz下面是最快1us时间计算来源。
校准 校准过程是固定的只需要在ADC初始化的最后加几条代码就行了。
硬件电路 电位器产生可调电压的电路
电位器产生一个可调的电压电位器两个固定端一个接3.3V一个接GND中间滑动端电压在这之间一般接KΩ级的电阻比如这里10k的电阻这就是电位器产生可调电压的电路。
传感器输出电压的电路
中间是传感器输出电压的电路一般像光敏电阻、热敏电阻、红外接收器、麦克风等都可等效为一个可变电阻电阻阻值没法直接测量通过和一个固定电阻串联分压来得到一个反应电阻值电压的电路传感器阻值变小下拉作用变强输出端电压就下降…固定电阻一般选和传感器阻值相近的电阻这样可以得到一个位于中间电压区域比较好的输出。
电压转换电路
使用电阻进行分压上面阻值17K下面33K加一起50K根据分压公式中间电压是VIN/50K*33K最后得到的电压范围就是0-3.3V就可以进入ADC转换了如果电压再高不建议使用这个电路高电压采集最好使用专门的采集芯片比如隔离放大器等等做好高低电压的隔离保证电路安全