A:anolog模拟的 D:digital数字的
AD模拟转数字,DA数字转模拟
生活中的基本都是模拟量,如温度,可以是10℃,10.1℃等
手机的背光亮度自动调节,拿到太阳光下,亮度会增亮,拿到暗的地方光线会减暗,是因为,手机上有一个感光头,采集环境光的亮度,采集到的的是模拟量,经过内部的AD转换器,把模拟量转换成数字量给CPU,CPU通过亮度值再输出一个数字量,输出的数字量再转换为模拟量去控制背光屏的电压,手机后面有一个背光板,手机液晶屏自身是不发光的,为什么能看到字?是因为手机屏上有背光,很多LED灯组成的还有背光板导光片等,LED灯的亮度决定了屏幕的亮度,光线强的时候,要把亮度调高,先通过感光元件返回的模拟量,转化为数字量,通过这个数字量控制LED背光亮度,背光亮度是一个电压,电压大,会变亮,就是把数字量又输出出去,控制灯的亮度。
所以手机自动调节用了AD和DA。还有重力感应、打电话时靠近面部息屏等等,以及烟雾传感器,压力传感器等。
光线不充足下,发出声音,灯会被打开,在下面有孔的铁罩内,有一个咪头(咪头,是将声音信号转换为电信号的能量转换器件,是和喇叭正好相反的一个器件(电→声)。是声音设备的两个终端,咪头是输入,喇叭是输出。)模块,能检测到震动或声音,这些都是模拟量,通过这个模块,通过内部的电路,把模拟量转换为数字量,去控制灯的开关,同时在红罩内,内有光敏电阻,开发板上也有,当光线充足,无论发出多大声音,灯是不会亮的,只有光线暗,发出声响,才会亮。它就是靠这声音检测和光线检测结合来控制的。
我们开发板也有AD和DA,我们也可以模拟手机背光,控制LED亮暗。
初学了解技术指标就好,以后设计产品的时候就需要关注ADDA性能了,不同应用场合使用不同的AD。
假设从1变到2,两个相邻数码,那电压需要变化多大呢?假设电压从0.1V变到0.2V,数码就可以从1到2了,如果从0.1边到0.19V,数字量还是1,这就是说之间有0.1V的变化量,有的AD变化0.05V就可以检测到,这就是分辨率,分辨率越高,电压发生一个很小的变化都能识别到。
再例如图中例子,满量程10V,是说能采集的最大电压为10V,从0到10V间发生任何变化,只要在分辨率以内,都可以用一个数字量表示出来,通过这个数字量,通过计算,我们就能知道电压变化了多少。12位的ADC,电压每变化2.4mV,它的数字量就会变化一位。如果是2.4mV,数字量是1,通过这个1,就知道电压是2.4mV,若电压为4.8mV,那么数字量是2,如果变到5.9mV,那么数字量还是2,因为变化量小于2.4mV,所以不会识别到,这就是分辨率的问题。
例如称黄金的称就需要分辨率很高的,每发生几毫克的变化我都需要知道,因为1g几百块是很贵的,所以如果我们要设计一个电子秤,它的用途是称首饰珠宝的,就需要分辨率高的,如果是批发蔬菜的,那么分辨率就可以低些,少那几克也没事,因为AD分辨率越高价格越贵。我们开发板上AD是八位的。满量程是5V。可以算出没变化,0.01953125V就可以检测到。
比如你模拟量能变到0.0000几,小数点后好几位,但数字量就不能做到,因为硬件的局限性。
从左面的图就可以看出,模拟电压从0到1LSB(最小变化量),数字电压始终是0。
偏移误差的图就是上一个图的右边的图像。
上述两个误差都是AD内部的误差,生产工艺决定的,价格不同,误差也不同,价格越贵,误差越低,精度越高。当然也不是价格越高越好,要看用到什么场合。总不能称白菜的称拿一个做导弹的高速AD去做,一个AD就几百块,还需要外部晶振,做出来卖给谁去。
线性度
我们开发板用的是第二种逐次逼近式。
里面有DA转换器、N位寄存器、控制器、比较器、D0~D7数据输出、VIN数据模拟量输出、VREF参考电压。
例如我们开发板,参考电压是5V,八位,首先把8位最高位置1,其它为0,那么参考电压就取了一半,VREF/2,拿到VN这里与VIN比较,假设模拟输入电压是3.75V(要将他转换为数字量),如果模拟输入大,那么比较器会输出1,保存到移位寄存器,然后把次高位置1(就是又取了剩下的2.5V的一半,也就是1.25V),加上前面你的2.5V,就是3.7V5,然后比较器还是输出1,下一次又把下一位也置1,这时肯定模拟输入电压小,比较器就输出0,然后再加一个1,比较器又输出一个0,直到8位,然后就把这个N位寄存器的数字量输出出去,输出到锁存缓冲器,然后输出。
DA:把数字量转换成模拟量
内部采用电阻分压的方式,输出一个数字量,内部有多个开关,控制从哪一个通路走,从不同通路走,通过分压后,电压不一样。
可以输出0~5V的电压。而AD可以检测0~5V的输入电压。
我们用的5516光敏电阻。
通过光敏电阻就能采集到的环境光的亮度,在通过AD,电阻分压的方式,只要电阻值变小,电压就会发生变化。
开发板上也是NTC热敏电阻,比较常用。
音量调节就是用的电位器。
4个模拟输入,就是4个AD,1个输出,即DA。用的I²C总线。
三个地址引脚,和前面的AD24C02,即EEPROM很像,就是在总线上最多运行挂几个,2的3次方=8个。不需要额外的硬件就可以配置它的地址。
自动增量通道,即检测完1通道自动增到2通道进行检测。
量化电压的时候要根据参考电压来,接的是5V,所以最多识别0~5V。
EXT时钟输入选择,配置为内部或者外部,我们配置为内部。
1(通道0):模拟输入0,接了光敏电阻到地,中间接了4.7k电阻到VCC,通过分压的方式。
当光敏电阻阻值越大,模拟输入电压就越大,电阻越小,电压就越小,例如如果拿到强光下时电阻变为0.3k,分压后,模拟输入为0.3V,若光线弱,电阻为4.7k,那么模拟输入为2.5V。有点人会说为什么分压而不直接把光敏和电源还有地连接?当光敏为0.3k时,电流就很大了,功率浪费了很多,而且很多器件承受不了这么大电流,而且光线再强,若为0,那么等于直接电源接地了,输入为5V,发热更严重。而若有4.7k电阻,当光敏为0Ω,电流也才1.06..A,功率就很小了。所以采集电压一般用分压的方式。
2(通道1):热敏,也是采用这种分压方式。
3(通道2):接了10k电位器。
4(通道3):排针引出去。如果要接一些外部器件,有些同学买些模块,模块上除了VCC和GND,还有一个叫DO(数字输出脚),AO(模拟输出脚),DO随便接一个IO口就可以,可以检测到数字量的变化,AO可以用杜邦线接到AIN3这里了。
AOUT数字量转模拟量的输出,
有一个跳线帽,如果把它拔掉,模拟输出可以接到别的地方去,比如我要用一个3.3V电源,我就可以给一个数字量让他输出3.3V电源,通过J6上那个1脚输出到别的地方。
只要功耗不大,都可以采用这种方式。
默认时,AOUT是通过300Ω电阻接到DA指示灯上,数字量变化,输出的模拟电压变化,灯的亮度就不同。
有时候,你采集来的值,8位的,最大256,实际表示0~255,你给他5V,可能不是255,参考电压接了VCC,可能不是标准的5V,有时候你电脑输出5V,但是板子上有用电设备,电压会拉低一点,如4.95等。
A2~A0我们都接了0,所以地址就是0x90+读写位
alldata下载数据手册,或百度找中文。
第二位,模拟输出使能标志脚,如果允许模拟输出要置1。其它为0,那么就是0100 0000
先发地址0x90,再发0x40,就是模拟输出,再发送数字量,就会输出相应的模拟电压。
第3、4位,设置输出方式,单端输入,差分输入。
我们开发板就是采用单端输入,光敏、热敏和AD芯片就很短。我们那些输入信号都接了开发板的地。
差分输入用于长距离传输。
第3、4位为00就是单端输入。
第6位为自动增量标志位,置1,通道自动增量检测,检测完1就检测2...
最后两位是通道选择位,00位0通道,01为1通道,10为2通道,11为3通道。
之后开始编程,逻辑是:起始信号,发送8591地址+读写方向,控制信号(DA输出还是单端输入),做输入之后就读DA的值,做DA输出,发一个数字量,让他转为模拟量输出。