ADC是将模拟信号转换为数字信号的意思,这是因为计算机不能处理连续/模拟的信号量,必须将连续的信号量转换为离散的信号量才能正确处理。
ADC的实现方法有很多,但作为程序员,我们不需要过多的深入了解它的硬件实现,只需要能够正确使用即可。
附一个关于转换原理的链接,有兴趣可以看下。
(https://www.sohu.com/a/310750432_467791)
如图所示,一个电阻的一端接地,另一端接3.3V,那么这个电阻某个位置的电压值就在0~3.3V这个范围中,我们就可以使用一个一个ADC转换装置来读取这个位置的电压值,将ADC装置的一端接在电阻上,另一端输出数字量。
对于这个ADC装置,我们主要关心的特性的有三点:
- 转换位数,转换的位数越高,数据就越准确(假设为10位)
- 检测范围,也就是模拟信号输入的最大值(10位时为0b1111111111,如果最大值为3.3V,那么1.65V的AD值就是0b1111111111除以2)
- 采样/转换速度,转换一次需要花费的时间
下图是S3C2440芯片手册中ADC章节的特性描述,可以看到转换位数为10bit,最大转换频率为500K每秒(也就是1/500/1000=2us转换一次),模拟量的输入范围是0~3.3V。
对于程序员来说,我们不关心ADC的内部机制,我们只关心
- 怎么启动ADC;
- 启动后怎么得到数据。
要想知道怎么启动和使用,则需要查看2440的芯片手册。
上图是ADC和触摸屏的接口功能框图,从框图中可以看到,2440支持最多8路ADC转换,通过一个8:1 MUX的多路选择器进行选择,具体选择哪个引脚需要看原理图。
还要设置ADC的工作时钟。
之后就是ADC的相关寄存器的配置,就不一一描述,这里只做总结:
- 设置8:1 MUX,选择要测量哪个引脚
- 设置工作频率
- 启动
- 读状态,判断ADC是否转换成功
- 读数据