电子制作课程设计
一、设计目的
通过上机操作,掌握利用Proteus ISIS进行电路原理图设计的方法;掌握利用原理图元件库编辑器创建新元件的方法;了解利用Proteus ARES进行印刷电路板图设计的方法;了解利用PCB元件库编辑器创建新的PCB元件的方法;掌握利用Proteus进行模拟电子实验和数字电子仿真实验的方法,利用其中自带的虚拟仪器进行电路的仿真。
学习掌握MCS-51单片机的结构和原理,Keil C51的编程,Keil 和Proteus的联合调试,利用Proteus和Keil C实现AD和DA部分的电子及编程设计。
利用Proteus实现6个电子制作课程设计项目:
●555定时器;
●比例运算放大器;
●波形发生器;
●显示译码器和数码管的应用;
●ADC0808和DAC0832的应用设计
●串/并行数据转换器;
二、设计内容、要求及组织形式
1.555定时器:
①设计原理
NE555触发器内部含有两个电压比较器,一个分
压器,一个RS触发器,一个放电晶体管和一个
功率输出级。
在它的各个引脚功能为:
1脚:接地
2脚:低端触发控制输入端
3脚:输出端
4脚:双稳态触发器复位段。当此端接低电平,
则时基电路不工作,此时不论TR、TH处于何电平,
时基电路输出为“0”,该端不用时应接高电平。
5脚:VC为控制电压端。若此端外接电压,则可改变内部两个比较器的基准电压,当该端不用时,应将该端串入一只0.01μF电容接地,以防引入干扰。
6脚:TH高触发端。
7脚:放电开关端。该端与放电管集电极相连,用做定时器时电容的放电。
8脚:外接电源VCC,双极型时基电路VCC的范围是4.5 ~ 16V,CMOS型时基电路VCC的范围为3 ~ 18V。一般用5V。
A.555定时器外接一个电容充放电电路即可构成一个无稳态多谐振荡器;
在起始状态时,电压比较器C1输出1,C2输出0,Td截止;电容在不断地充电,当充电为2/3Vcc时,C1输出跳为0,RS触发器反转为0,Td饱和导通;电容放电下降为1/3Vcc时,比较器C2输出跳为0,RS触发器翻转为1,Td截止。之后反复循环。
B.555定时器单稳态电路实现;
没有触发信号时电路工作在稳态,当U下降沿到来时,电路被触发,比较器C2输出跳为0,RS触发器被置为1,由稳态翻转到暂稳态,随着C充电过程的进行,C1输出0,RS触发器被复位到0,T饱和导通,暂稳态结束。
C.555定时器救护车变音警笛电路的实现。
左边的555定时器控制振幅,右边的555定时器控制频率,由振幅控制频率,由频率控制声音的高低。
②Proteus绘制电路图
555多谐稳态电路图
示波器波形
555单稳态电路
按钮闭合时得波形图
555警笛电路
③仿真结论
多谐振荡电路的计算
电容C充电时间:Tw1=0.7(R1+R2)C1=0.2303
电容C放电时间:Tw2=0.7R2C=0.329
电路震荡频率:f=1.43/(R1+2R2)C1=1.014
④小结体会
通过对NE555定时器的应用,初步了解了proteus的基本操作,对于555定时器有了更进一步的认识。
2.比例运算放大器
①设计原理
LM324 是四运放集成电路,它采用14 脚双列直插
塑料封装。它的内部包含四组形式完全相同的运算放
大器,除电源共用外,四组运放相互独立。
每一组运算放大器有 5 个引出脚,其中“+”、“-”
为两个信号输入端,“V+”、“V-”为正、负电源端,“Vo”
为输出端。两个信号输入端中,Vi-(-)为反相输入
端,表示运放输出端Vo 的信号与该输入端的相位相
反;Vi+(+)为同相输入端,表示运放输出端Vo 的
信号与该输入端的相位相同。
同相:Au=1+Rf/R1=1+50k/10k=6
反相:Au=-Rf/R1=-50k/10k=-5
②Proteus绘制电路图同向比例运算电路
波形图
反相比例运算电路
波形图
③仿真结论
反相:反相比例放大电路中的反馈组态为电压并联负反馈,集成运放的反相输入端与同相输入端两点的电位不仅相等且都等于零,电路输入电阻不高,输出电阻很低。
同相:同相比例放大电路中的反馈组态为电压串联负反馈,电路的比例系数总是大于或等于1,电路的输入电阻很高,输出电阻很低。
④小结体会
通过对比例运算放大电路的绘制,对比例运算放大电路有了进一步的了解,同时也认识了LM324放大器。
3.波形发生器
①设计原理
RC桥式正弦振荡器
RC串、并联电路构成正反馈支路,同时兼作选频网络,R1、R2、RW及二极管等元件构成负反馈和稳幅环节。调节电位器RW,可以改变负反馈深度,以满足振荡的振幅条件和改善波形。利用两个反向并联二极管D1、D2正向电阻的非线性特性来实现稳幅。D1、D2采用硅管(温度稳定性好),且要求特性匹配,才能保证输出波形正、负半周对称。R3的接入是为了削弱二极管非线性的影响,以改善波形失真
三角波方波发生器
由集成运放构成的方波发生器和三角波发生器,一般均包括比较器和RC积分器两大部分。此电路为由滞回比较器及简单RC积分电路组成的方波—三角波发
生器。它的特点是线路简单,但三角波的线性度较差。主要用于产生方波,或对三角波要求不高的场合。
②Proteus绘制电路图
三角波方波发生器
波形图
RC桥式正弦波震荡
波形图
③仿真结论
D1,D2,R3,R4,RW所组成的电路的总电阻大于R5的2倍的时候,电路才会产生震荡波,调节滑动变阻器从而产生震荡波,然后再调节滑动变阻器,出现正弦波。
RC振荡器的振幅条件:,二极管D1、D2的稳幅作用是为了使振荡电流的
方向保持一致,三角波的输出幅度为Uom=R1/R2Uz,振荡周期为:T=4R1Rv1C/R2;频率f=1/T,三角波的输出幅度与稳压管的Uz以及电阻值之比R1/R2成正比。
④小结体会
通过运用集成运放合成正弦波、方波和三角波的波形。
4.显示译码器和数码管的应用
①设计原理
74LS47是BCD-7段译码器/驱动器,是数字集成电路,用于将BCD码转化成数码块中的数字,然后我们就能看到从0-9的数字。
译码器原理:译码为编码的逆过程。它将编码时赋予代码的含义“翻译”过来。实现译码的逻辑电路成为译码器。译码器输出与输入代码有唯一的对应关系。74LS47是输出低电平有效的七段字形译码器,它在这里与数码管配合使用。(1)LT(——):试灯输入,是为了检查数码管各段是否能正常发光而设置的。当LT(——)=0时,无论输入A3 ,A2 ,A1 ,A0为何种状态,译码器输出均为低电平,若驱动的数码管正常,是显示8。
(2)BI(—):灭灯输入,是为控制多位数码显示的灭灯所设置的。BI(—)=0时。不论LT(——)和输入A3 ,A2 ,A1,A0为何种状态,译码器输出均为高电平,使共阳极数码管熄灭。
(3)RBI(——-):灭零输入,它是为使不希望显示的0熄灭而设定的。当对每一位A3= A2 =A1 =A0=0时,本应显示0,但是在RBI(——-)=0作用下,使译码器输出全为高电平。其结果和加入灭灯信号的结果一样,将0熄灭。
(4)RBO(———):灭零输出,它和灭灯输入BI(—)共用一端,两者配合使用,可以实现多位数码显示的灭零控制。
七段LED数码管:将七个输入分别控制对应的发光二极管亮灭。
②Proteus绘制电路图
译码数码管显示01
显示译码器02
③小结体会
通过本次对显示译码器和数码管的应用,对74LS47有了进一步的认识,知道了其各引脚的功能。
5.ADC0808和DAC0832的应用设计
①设计原理
ADC0808工作原理:
ADC0808集成了一个8位的A/D转换器、一个8路通道和一个兼容控制逻辑的微处理器。其中,8位的A/D转换器采用了连续逼近的转换技术,具有高阻抗稳定的断续比较器特性,包括一个带模拟开关树的256R的分压器和一个逐次逼近寄存器;而由ADC0808中的8路通道,可直接从8个单一模拟信号中获取任何一个作为输入信号。
DAC0832工作原理:
DAC0832是常用的8位电流输出型并行低速数模转换芯片,当需要转换为电压输出时,可外接运算放大器,运放的反馈电阻可通过RFB端引用片内固有电阻,也可外接。内部集成两级输入寄存器,使得数据输入可采用双缓冲、单缓冲或直通方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等) MCS-51单片机基本原理:
单片机是将中央处理器CPU、存储器、输入输出(I/O)接口电路以及定时器/计数器等部件制作在一块集成电路芯片中,构成一个完整的微型计算机——单片微型计算机。
Keil和Proteus联调的方法:
1.先从网上下载Proteus与Keil联调使用的VDM51.dll文件
2.打开Keil文件下的Tools文件,并把TDRV8=BIN\VDM51.DLL(Proteus VSM Monitor-51 Driver")写入Tools。
3.打开Keil软件编写好源程序并生成目标程序。
4.进入Project菜单选择Options for target,弹出对话框,在“调试”项选中U使用Proteus VSM Monitor-51……
5.按“设置”,令端口号为8000.
6.打开proteus,画出相应电路图,在tools菜单中选择use remote
Debug monitor,双击电路中的单片机,在Program file里导入在Keil里生成的目标文件,扩展名为hex。然后在Keil里按下开始调试按钮,进行联调仿真。
②Proteus绘制电路图
ADC0808
DAC0832锯齿波
锯齿波波形
③小结体会
学习和掌握了ADC0808和DAC0832的应用设计,了解了Keil C51类C语言的编程,Keil和Proteus联调的方法。
6.串/并行数据转换器
①设计原理
1.74LS164是8位寄存器,当清除端(CLEAR)为低电平时,输出端(QA-QH)均为低电平。串行数据输入端(A,B)可控制数据。当A、B任意一个为低电平,则禁止新数据输入,在时钟端(CLOCK)脉冲上升沿作用下Q0为低电平。当A、B有一个为高电平,则另一个就允许输入数据,并在CLOCK上升沿作用下决定Q0的状态。
引脚功能:
CLOCK:时钟输入端;CLEAR:同步清除输入端(低电平有效)
2.JK触发器的特性方程为:Qn+1=J/Qn+/KQn
3.74LS194:是一个所存的代码能在移位脉冲的作用下依次移位的寄存器,它是一可以用二进制形式保存数据的双稳器件。既能左移又能右移的寄存器称为双向移位寄存器。
4.74LS161是常用的四位二进制可预置的同步加法计数器,他可以灵活的运用在各种数字电路,以及单片机系统种实现分频器等很多重要的功能。
②Proteus绘制电路图
串并转化
③仿真结论
④小结体会
该电路是由八进制的定时器来控制显示器的刷新时间,由74LS164来进行输入的存储并输出,了解了74LS164的运行原理。
Keil C51类C语言的程序ADC0808编程:
LED_0 EQU 30H ;个位
LED_1 EQU 31H ;十位
LED_2 EQU 32H ;百位
LED_3 EQU 33H ;存放千位段码
ADC EQU 35H
CLOCK BIT P1.4 ;定义0809时钟位
ST BIT P1.5
EOC BIT P1.6
OE BIT P1.7
ORG 00H
SJMP START
ORG 0BH
LJMP INT_T0
ORG 30H
START: MOV LED_0,#00H
MOV LED_1,#00H
MOV LED_2,#00H
MOV DPTR,#TABLE ;段码表首地址
MOV TMOD,#02H
MOV TH0,#245
MOV TL0,#00H
MOV IE,#82H
SETB TR0
WAIT: CLR ST
SETB ST
CLR ST ;启动AD转换
JNB EOC,$ ;等待转换结果
SETB OE
MOV ADC,P2 ;读取AD转换结果
CLR OE
MOV A,ADC ;AD转换结果转换成BCD码
MOV R7,A
MOV LED_3,#00H
MOV LED_2,#00H
MOV A,#00H
LOOP1: ADD A,#20H ;一位二进制码对应20mV电压值DA A
JNC LOOP2
MOV R4,A
INC LED_2
MOV A,LED_2
CJNE A,#0AH,LOOP4
MOV LED_2,#00H
INC LED_3
LOOP4: MOV A,R4
LOOP2: DJNZ R7,LOOP1
ACALL BTOD1
LCALL DISP
SJMP WAIT
ORG 200H
BTOD1: MOV R6,A
ANL A,#0F0H
MOV R5,#4
LOOP3: RR A
DJNZ R5,LOOP3
MOV LED_1,A
MOV A,R6
ANL A,#0FH
MOV LED_0,A
RET
INT_T0: CPL CLOCK ;提供0809时钟信号RETI
DISP: MOV A,LED_0 ;显示子程序
MOVC A,@A+DPTR
CLR P1.3
MOV P0,A
LCALL DELAY
SETB P1.3
MOV A,LED_1
MOVC A,@A+DPTR
CLR P1.2
MOV P0,A
LCALL DELAY
SETB P1.2
MOV A,LED_2
MOVC A,@A+DPTR
CLR P1.1
MOV P0,A
LCALL DELAY
SETB P1.1
MOV A,LED_3
MOVC A,@A+DPTR
CLR P1.0
MOV P0,A
LCALL DELAY
SETB P1.0
RET
DELAY: MOV R6,#10 ;延时5ms
D1: MOV R7,#250
DJNZ R7,$
DJNZ R6,D1
RET
TABLE: DB 3FH,06H,5BH,4FH,66H ;共阴数码管7段值DB 6DH,7DH,07H,7FH,6FH
END
DAC0832的编程:
#include
#define DACR XBYTE[0xfffe]
#define uchar unsigned char
void juchi(uchar sdata,uchar time);
void fangbo(uchar sdata,uchar time);
void sanjiao(uchar sdata,uchar time);
main()
{
while(1){
// juchi(255,100);
// sanjiao(255,100);
fangbo(254,80);//数字不可为255,输出为0 }
}
void juchi(uchar sdata,uchar time)//锯齿
{
uchar i,j;
for(i=0;i<=sdata;i++)
for(j=0;j