2026/5/21 11:12:11
网站建设
项目流程
基于开源框架的网站开发,外链链接平台,简历免费在线制作网站,网站开发 360浏览器计数型8位AD转换器仿真实验#xff0c;采用proteus实现#xff0c;版本是proteus8.9#xff0c;能实现基本要求。
有讲解视频电路板上的红绿灯交替亮起#xff0c;调试用的杜邦线在实验桌上缠成一团。我盯着屏幕里跳动的波形#xff0c;突然意识到这个计数型AD转换器就像在…计数型8位AD转换器仿真实验采用proteus实现版本是proteus8.9能实现基本要求。 有讲解视频电路板上的红绿灯交替亮起调试用的杜邦线在实验桌上缠成一团。我盯着屏幕里跳动的波形突然意识到这个计数型AD转换器就像在玩猜数字游戏——只不过这次猜谜的是单片机自己。咱们先聊聊这个AD转换器的原理。它不像逐次逼近型那么聪明反而像个固执的小孩从零开始数数每次加1就跑去问比较器现在电压够了吗当DAC输出的电压刚超过输入电压时计数器立马刹车这时候的计数值就是转换结果。虽然速度慢了点但硬件结构简单得让人感动特别适合给萌新理解AD转换的本质。打开Proteus 8.9先把核心部件拖进工作区AT89C51单片机、DAC0808模数转换芯片、LM393比较器外加几个电阻电容。注意DAC的基准电压要接稳定我这用的是5V电源经两个1kΩ电阻分压得2.5V实际应用建议用TL431这类基准源。比较器的输出接到P3.7口这样单片机就能知道什么时候该停止计数了。别急咱们上代码#include reg51.h sbit COMP P3^7; // 比较器输出接这里 void delay(unsigned int t) { while(t--); } void main() { unsigned char count 0; P1 0x00; // 计数输出端口 P2 0x00; // DAC控制端口 while(1) { for(count0; count255; count) { P2 count; // 往DAC送当前计数值 delay(100); // 等DAC输出电压稳定 if(COMP 0) { // 当比较器翻转时 P1 count; // 锁存当前计数值 break; } } delay(50000); // 间隔一段时间再采样 } }这段代码就像个自动化的猜数机器。每次循环都从0开始往上累加P2口把数字喂给DAC转换成模拟电压。当这个电压超过被测电压时比较器输出低电平程序立马抓住此时的计数值送到P1口显示。那个delay(100)特别重要——DAC转换需要时间要是没这个延时比较器可能读到的是上个周期的电压值。仿真时试着调调输入电压比如输入3V时会显示0x6096的十六进制。这是因为DAC的分辨率是5V/256≈19.5mV3V对应的数字量就是3/0.0195≈154不过实际显示值可能因为比较器阈值有些偏差。这时候可以掏出万用表量量DAC输出确认电压爬坡过程是否均匀。遇到过坑的人都知道比较器偶尔会抽风似的抖动。这时可以在比较器输入端加个0.1uF的滤波电容或者在软件里做多次采样取平均。另外单片机时钟别调太高否则delay函数的等待时间会不够导致采样频率飞起——结果就是数码管显示的数字跳得比DJ打碟还快。最后唠叨一句这种AD转换方式实战中很少用毕竟速度慢得像树懒。但作为理解AD转换原理的实验它比那些SPI接口的ADC芯片更能让人看清模数转换的本质——不就是让计算机学会用数字量丈量模拟世界嘛