嵌入式硬件之ADC/DAC
嵌入式硬件之ADC/DAC
写在前面
这几天在做一个寒假练项目,其中涉及到了音频的处理,ADC、DAC再次进入到了我的视野,并引起了我新的思考。
1、初次相识
记得去年七月份,本科毕业刚离校,就到研究生学校这边打杂,导师让我参与了一个小项目,那个控制器电路中有一个让我印象很深的的电路——ADC采样电路。
![](https://api2.mubu.com/v3/document_image/a09f9322-d2ac-4e80-a809-e224f461d965-13059727.jpg)
这个电路目的很简单,就是读出P35的AD采样值,借此来估算VDD的大小,进行监测。
它的模拟信号就是电阻两端的电压,数字信号是通过P35读取到的数值,再根据相应的计算公式,就可以得出VDD的大小。
![](https://api2.mubu.com/v3/document_image/8433dda3-7c45-4ace-ba46-41ca060507f0-13059727.jpg)
这里是对模拟信号——电压的数模转换。
其实对于AD转换来讲,大家从小都在接触,比如家家户户都有的水银温度计。
![](https://api2.mubu.com/v3/document_image/5107bb1e-e591-48a2-992c-8c543ccc82b5-13059727.jpg)
利用水银的热涨冷缩原理,把人的体温以具体的数值显示出来。
再比如手机,大家用其播放音乐时,就是把比特流转化成电压信号,再通过扬声器播放出来。
再比如打电话时,不管是你这边听到声音,又或者你的声音被另一方听到,其中都离不开ADC、DAC。
2、为什么要有ADC/DAC?
万事万物的产生都是自有其道理,都有一种内在驱动力在驱动,那么是什么促成了ADC/DAC的出现呢?
大家都知道在我们的日常生活中有一种信号叫——模拟信号。比如上面提到的:温度、电压、电流、声音等。
模拟信号虽然很容易被人类接收,但有很多的缺点,比如很容易被各种“噪声”影响,又比如很难去存储和传输。
而数字信号正好与其相反,不仅能大程度上隔绝外部的干扰,又便于存储。
所以把模拟信号转化为数字信号是为了更好的去处理和存储。
3、ADC模数转换器
ADC——Analog to Digital Converter
![](https://api2.mubu.com/v3/document_image/7838b3c1-2038-4472-ad2d-3a362235452e-13059727.jpg)
只要是转换,就会有损耗,在ADC转换期间,有些模拟信号不可避免的会丢失。
![](https://api2.mubu.com/v3/document_image/5970a3de-0ba3-4f26-8154-b66640a666e5-13059727.jpg)
举例来说0~5V的电压信号,你可以取这个范围的任意一个数值,你可以取到无数个数据,也就是说从理论上来讲,模拟信号的分辨率是无限大的。所以信号的丢失不可避免。
3.1模数转换流程
首先对模拟信号以特定的速率采样;采样之后,对其进行量化;量化后,对其进行二进制编码。
![](https://api2.mubu.com/v3/document_image/25309a15-18b2-41eb-801b-eed7d83cb493-13059727.jpg)
所以你会看到,在芯片技术手册上常有的一句话:我们的处理器ADC是几位几位的。
![](https://api2.mubu.com/v3/document_image/0c76241d-7f93-4c75-b293-f02fc6521575-13059727.jpg)
这里的分辨率用位数来表示,位数越多分辨率越高,以2的n次方倍。
举例来讲,0~1V的电压范围,如果是3位的ADC,那么1除以2的3次方等于0.125V,这就是这个ADC所能达到的精度。
上面那个0.125就表示ADC所能感受到的模拟信号输入的最小变化。
![](https://api2.mubu.com/v3/document_image/8b576d23-f256-4bf9-9abf-b309779ba090-13059727.jpg)
电压值每变化0.125V的数值,如上图橙色那条线,就会上升一个台阶,以此对应一个二进制的数值。
![](https://api2.mubu.com/v3/document_image/cf7915fb-9285-4435-a11c-488d25bb315a-13059727.jpg)
以上便是ADC工作的流程:采样、量化、编码。
4、DAC数模转换器
DAC——Digital to Analog Converter
![](https://api2.mubu.com/v3/document_image/7e147ee1-ce4a-4c2c-b694-b4a29f2b5b46-13059727.jpg)
通过数字比特流来产生模拟信号。
因此对模拟信号重构的精确度取决于DAC的分辨率,12位的要好于3位的。
分辨率、基准电压和重构的时间是DAC的重要参数。
5、如何使用ADC/DAC?
如何使用ADC/DAC?其实很简单。
因为现在大多的处理器都会内置相应的片上ADC/DAC,而且都是通过外部总线与处理器相连的,故外部接口也比较简单,直接连接即可。如下图所示。
![](https://api2.mubu.com/v3/document_image/8b56c40d-6c16-4c62-832a-9f84deda94bc-13059727.jpg)
再配置好相关的寄存器使能,按照芯片技术手册的要求进行软件设计。