ADC模数转换器(内含:1.实物图+2.ADC简介+3.ADC框图+4.ADC基本结构图+5.输入通道+6.转换模式+7.触发控制+8.数据对齐+9.硬件电路)

简介: ADC模数转换器(内含:1.实物图+2.ADC简介+3.ADC框图+4.ADC基本结构图+5.输入通道+6.转换模式+7.触发控制+8.数据对齐+9.硬件电路)

1.实物图如下:


71f46c872f424fd5a4ae831038f5ed51.png


左侧为电位器,用这个电位器产生0~3.3V连续变化的模拟电压信号。然后接到STM32的PA0口上,之后用STM32内部的ADC读取电压数据,显示在屏幕上。屏幕第一行显示AD转换后的原始数据,第二行是经过处理后的实际电压值。


手动拧电位器,左拧,AD值减少,电压减少;AD值最小为0,电压最小也为0V;右拧,AD值变大,电压增大;AD最大值为4095(2的12次方-1).对应电压3.3V。


GPIO只能读取引脚的电平,结果只能是高电平or低电平。使用ADC后,就可以对高低电平之间任意电压量化,最终用一个变量表示,读取变量,就能得到引脚的具体电压。所以ADC就是电压表,测GPIO的引脚电压,放在变量里。


4c25612c31db496ebd12c7689fd36289.png


外接光敏电阻,热敏电阻和反射红外模块,他们的AO,模拟电压输出端分别接在A1,A2,A3引脚。


遮挡光线,温度升高,手靠近有反光,光敏电阻,热敏电阻和反射红外阻值增大。


2.ADC简介


2a9423d1a34b499096ccbf63cab97f29.png


逐次逼近型ADC


581e561527cc46d18e2b705e0ce7e44d.png


独立的8位逼近型芯片。左上方的IN0~IN7为8为输入通道,通道选择开关选择一路,经过比较器。


选择哪一路,看的是左下方的地址锁存和译码。把通道号给ADDA~ADDC,ALE是锁存信号。


注:ADC0809只有八路选择开关。STM32有18路通道选择开关。


比较器的两个电压分别是,外部通道输入电压(未知),已知DAC输出电压。进行判断,如果DAC输出电压较大,调小DAC数据;如果DAC输出电压较小,增大DAC数据。直到DAC与外部通道输入电压相近。即逐渐逼近SAR(二分法)


3.ADC框图


69f2d0fa19704b31ad0e5793948a7462.png

42793a8ef15a4fe6b5e3e75206e7a177.png


模拟看门狗如上图,模拟看门狗-->注入通道数据寄存器和规则通道数据寄存器。若超过阈值,就申请看门狗事件传递给上方并预警,最终给NVIC的ADD中断。


以下为ADC框图中的16个引脚的具体说明:


ea4f7ca92f664393a3cc3af554c2fc5f.png


16个外部输入引脚,两个内部输入,共18个通道。


注:选择时,较高级,一次性规则通道最多选择16个;注入通道最多选择4个。但是规则通道数据寄存器一次性只能处理一个通道的数据,需要DMA请求来将处理过的请求搬运走。


注入通道数据寄存器可以同时处理4个通道的数据。


以下为ADC框图的START(开始转换信号)具体说明:


5b486ec3b4224713a950618973207e93.png


触发ADC转换的信号有两种:1.软件触发。2.硬件触发(如上图)


不能反复的触发中断,影响系统的操作。如,需要做到:给TIM31定1ms时间,更新事件选择为TRGO输出,ADC选择开始触发信号为TIM3的TRGO。此时,TIM3的更新事件就通过硬件自动触发ADC转换。不需要触发中断了。


4e6dd84c871b42188b68cd1d5bb9b981.png


VREF+,VREF-是ADC的参考电压,决定ADC输入电压的范围。VDDA,VSSA是ADC的供电引脚。一般情况下,VREF+接VDDA;VREF-接VSSA。(也可能在芯片内部就已经接好)


ADCLOCK是CLOCK,是用于驱动内部逐次比较的时钟。


ADC预分频器是来自于RCC的。如下图:


0f618f70529b4e3eb880c478c473fe45.png


注:此处的ADC是72MHz,但是ADCCLOCK最大是14MHz,所以只能选择6分频,8分频。


4.ADC基本结构图(总结/简化上图)


47afbca1851346a083f02930ab5c2ccb.png


5.输入通道(16个外部通道):


a311238b6577420ab25d7113bd12e17c.png


注:ADC1,ADC2引脚基本相同,我们用的芯片没有ADC3,且没有PC0~PC5(通道10~通道15).


ADC参数中有控制转换(单次转换,连续转换),扫描模式(扫描模式还是非扫描模式).


非扫描模式:只能选择一个,只有序列一(里面可写如通道2)起作用,可选择。此时ADC对通道2进行模数转换。转换结果完成后将结果放在数据寄存器里,同时给EOC标志位置1。因此,直接判断EOC标志位,如果转换完了,就读取数据寄存器的结果。(单次转换;可反复操作,但需要等待)若想更换通道,则再启动前就改为通道2。(连续转换:可以自动转换)


注:如果是连续转换,还需要配置参数:通道数目(作用是例如规定7,只看前七个通道,其他的不看)


6.转换模式:


a92414af0fb94d2bbf42669a404204d9.png

30384a5303a54971ab5f43100ba6e115.png

543844c60bf74b8dbbf56d45b26734bd.png

3f1297bc251c48578b53578940494e59.png


7.触发控制:


42b426f49dbb442bb0c435ea14379b09.png


8.数据对齐(12位数据转16位数据):一般选择数据右对齐(直接最高位补4个0),如果选择左对齐,则数据比实际数据大了2的4次方,即16倍。


1b97a0d9a96e43d5b4a73bfba649514f.png


转换时间:


00318f92620b4add916690fda45f32fe.png


采样时间是采样保持花费的时间,在程序中可配置。采样时间越大,毛刺信号(不理想信号)越少。12.5个ADC周期是量化编码花费的时间。


校准:


2fd52d5fb30048688a77c9bd763215bb.png


注:此处只需要记得有校准操作和代码即可,不需要理解。


9.硬件电路:


c8e4e0d0a994484ab9f035f308b5d59b.png


电阻不能太小,否则会费电甚至烧损。


注:想更了解的,可翻看参考手册STM32F10XXX(中文)的第11章节,模拟/数字转换


相关文章
|
编解码
STM32:ADC单通道(内含:1.实物图/接线图+2.代码部分如下+3.AD用到的库函数总结)
STM32:ADC单通道(内含:1.实物图/接线图+2.代码部分如下+3.AD用到的库函数总结)
1282 0
STM32:ADC单通道(内含:1.实物图/接线图+2.代码部分如下+3.AD用到的库函数总结)
|
传感器 监控
基于STM32的智能交通灯控制系统设计与实现
基于STM32的智能交通灯控制系统设计与实现
1758 0
|
2月前
|
人工智能 安全 JavaScript
OpenClaw爆火背后的"夺命坑":小白入坑前必看的保姆级劝退指南
OpenClaw爆火背后暗藏三大致命风险:高危提示词注入(成功率超91%)、低门槛恶意插件泛滥、本地网关暴力破解漏洞(平均98秒破密)。Gartner称其风险不可接受,Cisco直呼“安全噩梦”。小白慎入!建议暂避,待生态成熟。
350 4
|
传感器 物联网 5G
物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
物联网的一个重要的特点是接入了网络,因此这些设备才能将传感器采集的数据上传到云平台,然后根据平台对数据的分析做出反应。而这种接入网络的技术,就是通信技术,是物联网的基础之一。通信的方式可以分为有线和无线两种方式,因为有线通信的成本较高,无线通信技术在物联网中应用比较广泛。
1147 1
|
存储 Java 编译器
🔍深入Android底层,揭秘JVM与ART的奥秘,性能优化新视角!🔬
【7月更文挑战第28天】在Android开发中,掌握底层机制至关重要。从Dalvik到ART, Android通过采用AOT编译在应用安装时预编译字节码至机器码,显著提升了执行效率。ART还优化了垃圾回收,减少内存占用及停顿。为了优化性能,可减少DEX文件数量、优化代码结构利用内联等技术、合理管理内存避免泄漏,并使用ART提供的调试工具。
546 7
|
存储 关系型数据库 MySQL
double ,FLOAT还是double(m,n)--深入解析MySQL数据库中双精度浮点数的使用
本文探讨了在MySQL中使用`float`和`double`时指定精度和刻度的影响。对于`float`,指定精度会影响存储大小:0-23位使用4字节单精度存储,24-53位使用8字节双精度存储。而对于`double`,指定精度和刻度对存储空间没有影响,但可以限制数值的输入范围,提高数据的规范性和业务意义。从性能角度看,`float`和`double`的区别不大,但在存储空间和数据输入方面,指定精度和刻度有助于优化和约束。
2220 5
|
机器学习/深度学习 PyTorch 算法框架/工具
彻底告别微调噩梦:手把手教你击退灾难性遗忘,让模型记忆永不褪色的秘密武器!
【10月更文挑战第5天】深度学习中,模型微调虽能提升性能,但也常导致灾难性遗忘,即学习新任务时遗忘旧知识。本文介绍几种有效解决方案,重点讲解弹性权重巩固(EWC)方法,通过在损失函数中添加正则项来防止重要权重被更新,保护模型记忆。文中提供了基于PyTorch的代码示例,包括构建神经网络、计算Fisher信息矩阵和带EWC正则化的训练过程。此外,还介绍了其他缓解灾难性遗忘的方法,如LwF、在线记忆回放及多任务学习,以适应不同应用场景。
1965 8
|
SQL JSON 测试技术
Python中的f-string
Python中的f-string
905 2
|
Android开发 UED 开发者
专刊:如何使用网页封装技术将网站转化为移动应用,节省开发成本和时间
【4月更文挑战第27天】本文介绍了如何使用网页封装技术将网站转化为移动应用,节省开发成本和时间。通过选择合适的在线封装工具(如Cordova、Appy Pie、Web2App),用户可遵循简单流程,输入网站URL和APP信息,定制设置后生成APP。优化用户体验包括适应移动设备显示、优化加载速度和添加移动特性。发布前需充分测试,并遵循应用商店的发布规则。网页封装为小型企业和个人开发者提供了快速进入移动市场的途径,但成功APP的关键在于不断优化用户体验。
788 4
|
Linux 编译器 C语言
Linux EXPORT_SYMBOL宏详解
Linux EXPORT_SYMBOL宏详解
Linux EXPORT_SYMBOL宏详解