为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

数控电压源论文

2017-11-27 50页 doc 504KB 10阅读

用户头像

is_624976

暂无简介

举报
数控电压源论文数控电压源论文 所在单位:华南理工大学自动化学院 09级(2)班 作 者: 武少宇 自动化 09 陈瑞华 自动化 09 张丽香 自动化 09 目录 设计任务简要说明?????????????????????????????????????3 第一章 摘要??????????????????????????????????????????4 第二章 方案论证与比较????????????????????????????????5 第三章 主要电路单元设计??????????????????????????????...
数控电压源论文
数控电压源论文 所在单位:华南理工大学自动化学院 09级(2)班 作 者: 武少宇 自动化 09 陈瑞华 自动化 09 张丽香 自动化 09 任务简要说明?????????????????????????????????????3 第一章 摘要??????????????????????????????????????????4 第二章 论证与比较????????????????????????????????5 第三章 主要电路单元设计??????????????????????????????7 第四章 系统软件设计???????????????????????????????????13 4-1 程序设计思路 4-2 程序设计流程图 第五章 测试、及结果分析???????????????????????????????????????16 第六章 部分芯片资料简介???????????????????????????????17 3-1 AT89S52 3-2 TLC2453 3-3 DAC0832 3-4 NE5534 3-5 UA714 3-6 24C02 3-7 74HC573 3-8 LM-78XX系列 第七章 ,,,制板的一些问题????????????????????????????31 第八章 制作的心得体会?????????????????????????????????????????39 附录??????????????????????????????????????????????????40 参考文献??????????????????????????????????????????????69 2 设计任务简要说明 A题 数控直流稳压电源 一、 设计任务 设计并制作一个直流可调稳压电源。 二、 设计要求 1、基本要求: 1) 当输入交流电压为220v?10%时,输出电压在3-13v可调; 2) 额定电流为0.5A,且纹波不大于10mV; 3) 使用按键设定电压,同时具有常用电平快速切换功能(3v、5v、6v、9v、 12v),设定后按键可锁定,防止误触; 4) 显示设定电压和测量电压,显示精度为0.01v。 2、扩展要求: 1) 输出电压在0-13v可调; 2) 额定电流为1A,且纹波不大于1mV; 3) 掉电后可记忆上次的设定值; 4) 两级过流保护功能,当电流超过额定值的20%达5秒时,电路作断开操作; 当电流超过额定值的50%时,电路立即断开。具有光提示(如LED); 5) 其他创新。 三、 说明 禁止直接使用220v直接电阻分压的作法,注意用电安全。 四、 评分 项 目 满分 设计与总结报告:方案比较、设计与论证,理论分析与计算, 30 电路图及有关设计文件,测试与仪器,测试数据及测试 结果分析。 基本要求 15 完成第(1)项 15 完成第(2)项 15 完成第(3)项 3 15 完成第(4)项 15 完成第(1)项 15 完成第(2)项 10 发挥部分 完成第(3)项 10 完成第(4)项 10 完成第(5)项 第一章 摘要 电源技术尤其是数控电源技术是一门实践性很强的工程技术,服务于各行各 业。电力电子技术是电能的最佳应用技术之一。当今电源技术融合了电气、电子、 系统集成、控制理论、材料等诸多学科领域。随着计算机和通讯技术发展而来的 现代信息技术革命,给电力电子技术提供了广阔的发展前景,同时也给电源提出 了更高的要求。随着数控电源在电子装置中的普遍使用,普通电源在工作时产生 的误差,会影响整个系统的精确度。 数字化智能电源模块是针对传统智能电源模块的不足提出的,数字化能够减少生产过程中的不确定因素和人为参与的环节数,有效地解决电源模块中诸如可靠性、智能化和产品一致性等工程问题,极大地提高生产效率和产品的可靠性。 随着时代的发展,随着人们生活水平的不断提高,数字电子技术已经普及到我们生活,工作,科研,各个领域,,数字化控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的。其中数控制直流稳压电源就是一个很好的典型例子,但人们对它的要求也越来越高,要为现代人工作、科研,生活、提供更好的,更方便的设施就需要从数字电子技术入手,一切向数字化,智能化方向发展。 数控电源技术从80年代至今已经有了长足的发展。但其产品存在数控程度达不到要求、分辨率不高、功率密度比较低、可靠性较差的缺点。因此数控电源主要的发展方向,是针对上述缺点不断加以改善。单片机技术及电压转换模块的出现为精确数控电源的发展提供了有利的条件。通过这次比赛学习的机会,我们提出以AT89S51单片机为控制器,运用数字技术和模拟技术相互装换的概念设计直流数控可调稳压电源。 4 本次我们所设计的数控直流稳压电源与传统的稳压电源相比,具有操作方便,电压稳定度高的特点,其输出电压大小采用数字显示,输出电压的大小调节通过“+”、“-”两键操做,控制可逆计数器分别作加、减计数,可逆计数器的二进制数字输出分两路运行:一路用于驱动数显电路,指示电源输出电压的大小值;另一路进入,,,转换电路,,,,转换器将数字量按比例转换成模拟电压,然后经过射极跟随器控制调整输出级输出所需的稳定电更能方便快捷地时时读出电路电压的变化,具有设计更加地趋向于人性化的特点。 而且,我们的设计基于比赛要求的基础上,扩展了掉电保护的功能,使用24C02锁存数据,便于我们对前次使用电压的了解。电路还设置了两极过流保护的功能,从硬件和软件两方面结合,更加地安全可靠。 第二章 方案论证及比较 2.1 控制器部分 方案一:应用PIC芯片作为控制器。PIC单片机系列是美国微芯公司(Microship)的产品,是当前市场份额增长最快的单片机之一。PIC系列单片机的I/O口是双向的,其输出电路为CMOS互补推挽输出电路。I/O脚增加了用于设置输入或输出状态的方向寄存器(TRISn , 其中n对应各口,如A、B、C、D、E等),从而解决了51系列I/O脚为高电平时同为输入和输出的状态。当置位1时为输入状态,且不管该脚呈高电平或低电平,对外均呈高阻状态;置位0时为输出状态,不管该脚为何种电平,均呈低阻状态,有相当的驱动能力,低电平吸入电流达25mA,高电平输出电流可达20mA。相对于51系列而言,这是一个很大的优点,它可以直接驱动数码管显示且外电路简单。它的A/D为10位,能满足精度要求。具有在线调试及编程(ISP)功能。 方案二:应用AT89S51作为控制器。51系列优点之一是它从内部的硬件到软件有一套完整的按位操作系统,称作位处理器,或布尔处理器。它的处理对象不是字或字节而是位。它不光能对片内某些特殊功能寄存器的某位进行处理,如传送、置位、清零、测试等,还能进行位的逻辑运算,其功能十分完备,使用起来得心应手。51系列的另一个优点是乘法和除法指令,这给编程也带来了便利。而且,51系列的I/O脚的设置 5 和使用非常简单,当该脚作输入脚使用时,只须将该脚设置为高电平(复位时,各I/O口均置高电平)。当该脚作输出脚使用时,则为高电平或低电平均可。低电平时,吸入电流可达20mA,具有一定的驱动能力;而为高电平时,输出电流仅数十μA甚至更小(电流实际上是由脚的上拉电流形成的),基本上没有驱动能力。 PIC芯片的内置很强大,但是一方面它的价格比较昂贵,另一方面,也是由于我们对PIC不大了解,没有试验过,所以,我们选择了51作为我们的控制器。这样一来,我们实现一些功能就必须要加外围电路了。 2.2 显示部分 方案一 :使用LED显示。优点:可是角度宽,价格便宜。缺点:显示的内容少,介面呆板,而且占用较多的IO口资源。 方案二 :使用1602液晶显示器。可视面积大,介面美观,抗干扰能力强,调用 方便简单,而且可以节省软件中断资源,应用串行连接,节省I/O口资源。 这次,我们选用了LED作为我们的显示器。因为1602液晶显示器相对来说比较昂贵,而且我们的显示部分只是显示电压的输出值。用四位数码管就可以实现。但是,使用LED占用了比较多的,,,资源。 2.3 电源部分 方案一:三端固定输出电压式稳压电源78XXXX系列 运用其器件内部电路来实现过压保护、过流保护、过热保护 。这使它的性能很稳定。能够实现1A以上的电流 器件具有良好的温度系数 本产品有多种电压输出值5V~24V,因此产品的应用范围很泛 可以运用本地调节来消除噪声影响,解决了与单点调节相关的分散问题 输出电压误差精度分为?3%和?5% 。 方案二: LM117/LM317 是美国国家半导体公司的三端可调正稳压器集成电路。LM117/LM317 的输出电压范围是1.2V至37V,负载电流最大为1.5A。它的使用非常简单,仅需两个外接电阻来设置输出电压。此外它的线性调整率和负载调整率也比标 准的固定稳压器 6 好。LM117/LM317 内置有过载保护、安全区保护等多种保护电路。通常 LM117/LM317 不需要外接电容,除非输入滤波电容到 LM117/LM317 输入端的连线超过 6 英寸(约 15 厘米)。使用输出电容能改变瞬态响应。调整端使用滤波电容能得到比标准三端稳压器高的多的纹波抑制比。LM117/LM317能够有许多特殊的用法。比如 把调整端悬浮到一个较高的电压上,可以用来调节高达数百伏的电压,只要输入输出压差不超过LM117/LM317的极限就行。当然还要避免输出端短路。还 可以把调整端接到一个可编程电压上,实现可编程的电源输出。 通过比较分析,此次我们选择了78XX系列芯片来实现我们的电源输出。因为78XX系列的芯片能满足我们的四个固定电压的输出。 第三章 主要电路单元的设计 本系统由电源模块、调压模块、D,A转换模块、显示与键盘模块组成。系统电路结构原理图,如图所示: + 市电输电压调整变压 整流 入 及过流保 护 系统电源 比较放大 取样取样 取样 取样 DA转换 AT89S51 AD +24 +15 +5v 转换 键盘 显示 电路设计: 1(整流、滤波电路设计。首先确定整流电路结构为桥式电路,选用大的电解电容对输入的电流进行滤波处理。电路如图所示: 7 整流滤波电路 该整流滤波电路中,220V 的市电输入到电路中,经过一个整流桥堆整流电路 。整流 电路的任务是将电网供给的交流电变换成脉动的直流电,通常利用二极管的单向导电 性来实现。一般分为半波整流/全波整流/桥式整流/被压整流等,而桥堆就是用在桥式整 流中的。通过整流桥堆后的电压为U=U0*1.2。U0为经过变压器变压后的输出电压。 经过整流后的电压用两个电容实现滤波处理。 2.电源电路 该电源电路采用了四个三端集成稳压器来为电路输出电路所需要的各种电压。一般三集成稳压电路的最小输入、输出电压差约为2V,否则不能输出稳定的电压,使电压差保持在4-5V,即经变压器变压,二极管整流,电容器滤波后的电压应比稳压值高一些 。78系列的三端稳压器能够输出正的电压。79系列的三端稳压器输出是负电压。由于该电路的芯片发热较大,一般要加上合适的散热片散热保护电路。芯片分三个引脚,输入、输出和接地, 8 三个引脚不能接反,否则容易烧化电路。 3.放大电路: 9 这部分电路是实现电压放大的电路。电路的比较放大采用运放NE5534来设计,该器件具有共模抑制比高,响应速度快和压摆率高的特点。设计时可由R10、R11A、R12组成分压取样电路,并要求R10,(R11A+R12)=1,4,即当输出电压存在?UO=0.05 V时,?Ua=0.04 V,这与DAC的输出(10,255=0.04V=1LSB)变化一致。事实上,经过DAC转换以将电流转换为电压并进行电压放大后,即可将得到的10 V电压送比较器NE54534的同相端作为比较的基准电压。由于DAC0832是8位的D,A转换器,故有255步进。由此,当CPU控制DAC变化1LSB时,其对应Va的变化为0.04 V,故Uout的可调变化量为0.05 V(步长)。NE5534和Q1、Q3及取样电路构成的负反馈电路可实现调节输出电压的目的(稳压)。 电路中的过流保护由R9与Q2完成。当Io>0.7A时,VR9=R9Io?1×0.7=0.7 V,此时Q2导通,并对调整管Q3的基极分流,使TIP41的导通电阻增大,输出电压降低,从而达到过流保护的目的。该系统的短路保护采用保险管来完成。 该电路的数模转换电路是由DAC0832、两级低漂移的运放μA714和VREF电路组成。DAC0832和运放U3A将CPU发出的8位二进制数据转换成0,-5 V的电压,然后经运放U3B反向放大2倍,以得到0,10 V电压。因此,该DAC的转换分辨率为10,(28-1)=0.04 V,即CPU输出给DAC的数据变化为1 Bit,DAC输出电压的变化为0.04 V。VREF电路为DAC提供基准电压,调节R5A,可使基准电压保持为5 V。 10 4.键盘模块 VCC5 RA1RA2RA3RA4 S110K10K10K10KK1 S2K2 S3K3 S4K4 -1进行模数转换。图中的当输出电压经R13限流和R14取样后,即可送入TLC2453 TLC2453-1为11通道、12位串行A,D转换器,具有12位分辨率,转换时间为10μs,有11个模拟输入通道,3路内置自测试方式,采样率为66 kbps,线性误差?1LSBmax,同时带有转换结果输出EOC,并可单、双极性输出。通过其可编程的MSB或LSB前导可编程输出数据长度。 TLC2453-1的时钟频率选用4.1 MHz,电源输出电压Uo的取样信号从IN0输入,芯片的I,O时钟端、数据输入端、转换数据输出端、片选端分别与AT89S51单片机的P0.0,P0.1,P0.2,P0.3相连,然后经单片机处理后从P0口输出,在经芯片MC74HC573N驱动后送入数码管,通过数码管显示输出电压。电路中AT89S51单片机的晶振频率选用12 MHz,P3.0,P3.2,P3.5,P3.6接调压按钮。K1实现设置功能,即通过此按键可以实现电平快速切换功能(3V,5V,6V,9V,12V),K2实现调控增加电压的功能,K3实现调控减小电压的功能,K4实现按键锁定和解锁的功能,防止误触造成不便。 5(电压显示电路 该部分电路通过运用两个MC74HC573N芯片控制数码管的位选和段选,并且,都将 他们接在AT89S51的主芯片的,,.,,,,(,口上进行对数码管的控制。通过数码管的时时检测来知道电路电压输出的大小。 电压显示电路,如下图所示: 11 RE1 200UA5RE210GNDLED1200RE33129D0DPQ7D75200138D1gQ6D6RE410147D2fQ5D51200156D3eQ4D4RE52165D4dQ3D34200174D5cQ2D2RE67183D6bQ1D111200192D7aQ0D0RE7DIG4DIG3DIG2DIG120011P3.2LERE8s03641a201689VDDOE12002MC74HC573N Q11Q12Q13Q14NPNNPNNPNNPNUA610GNDR21129D0Q7D7GND10K138D1Q6D6R22147D2Q5D510K156D3Q4D4R23165Q3D310K174Q2D2R24183Q1D110K192Q0D0 11P3.7LE201VDDOEGND MC74HC573N 电路按一般的接法,在段,位选口上接上上拉电阻。并用三极管实现电路电流的放大小效果。 数码管使用四位计数,使数码管的显示可以达到,(,,V的精确要求。 5(掉电锁存电路 VCC+5 U55 R44R5518E0VCC2E110K10K3E265P1.6SCLSDA7WC 4GNDGND M24C02BN6 P1.7 该处电路使用了M24C02BN6芯片实现掉电的锁存功能。这块芯片可以在掉电时记住上一次的电压记录。所以此处电路的设计,更加地人性化。 6.主芯片电路控制 12 该部分电路采用了最基本的AT89S51为基核,通过对该芯片编程,使芯片实现各种强大的功能。 该部分电路的电路图,如图所示: U6 K3140P1.0VCC239D0P1.1P0.0338D1P1.2P0.1K4437D2P1.3P0.2CS536D3P1.4P0.3WR635D4GNDP1.5P0.4P1.6734D5P1.6P0.5VCC+5P1.7833D6U7P1.7P0.6932D712RSEP0_7IN10K110311011C17P3.0EA/VPPVCC+5GNDIN9K21130139P3.1ALE/PROGREF-IN8P3.2122914822UFP3.2PSENVCC+5REF+IN713281157P3.3P2_7CSIN61427alarm2166P3.4P2_6OUTIN5K315263175P3.5P2_5ADDRESSIN4K4162554P3.6P2_4IN3R16P3.7172444183P3.7P2_3I/OCLOCKIN210K182335192X2XTAL2P2_2ECOIN12119222201A/DXTAL1P2_1VCCIN020211GNDP2_0 C19C20AT89S51TLC2453 GND30PF30PF GND 该部分电路通过控制AT89S51芯片的IO口实现电路的各项控制功能。通过控制P3.0,P3.1,P3.5,P3.6口实现按键的调节设置电压功能;通过控制芯片的P0口接的译码驱动器MC74HC573,芯片实现电压的时时跟踪显示功能;通过,,,和,,,的转换,实现电路的数模和模数转换等; 第四章 系统软件设计 软件要实现的功能是:键盘对单片机输入数据,单片机对获得的数据进行处理,送到数模转换器,再送入数码管显示,实现对电压的控制。 13 1( 主控程序 主控程序首先进行系统的初始化,然后显示电路中的输出电压,初始应为0V。 按下功能转换键进入预置电压环节,等待键盘输入。根据键盘的不同输入,按下 确定键后转入相应的应用程序。执行后,数码管显示电路中的电压。直到被下一 次设置电压打断。 初始化函数 进入大循环 进入键盘扫描函数,并根据所按键的不 同运行不同的子函数 进入检验函数,判断电路中的电流是否超 过额定电流,若超过则作出相应的反应( 2( 过流保护程序 过流保护由中断实现,通过AD转换检测电路中的电流,若电流超过额定电流的 1.2倍时蜂鸣器发出警报并在5秒后初始化电路。若电流超过额定电流的1.5倍 时立即初始化原电路。 14 判断,若电流大于额定电压的1.5 倍,立刻进行初始化 判断,若电流大于额定电压的1.2倍,进入中 断,同时蜂鸣器发出报警,并在5秒后进行初 始化。 3( 键盘显示程序 刚上电时,数码管显示的是电路的输出电压。当第一次按下键一(即s1)时,进入设置步进初值的模式,数码管显示设置的初始步进值(用s2和s3分别控制步进初值的增减),按下s4为确定键,此时数码管显示为电路输出电压。当数码管显示输出电压时,若连续按下两次s1则进入常用电压设置,用s2和s3分别控制常用电压的增减,其中常用电压有3V,5V,6V,9V,12V。按下s4为确定键,数码管显示为电路输出电压。当数码管显示为电路输出电压,连续三次按下s1则进入步步函数,此时电路的输出电压以原电路的输出电压为基础步步增大或减小,步进值为0.1V。增加到13V时开始减小,并在减小到0V时渐次增大。当再次按下s1键时停止步步函数。在按下确定键后再按一次s4则为锁定,此时再按s1,s2,s3键均无效,知道再次按下s4键解锁。 4( 掉电保护程序 在设置输出电压时,数码管显示的是设置的输出电压,按下确定键后,数码管开始显示电路的输出电压。并在每次显示之前将数据送入24C02中,并从24C02中读取所要显示的电压。当掉电后数码管显示的数据为从24C02中读出的数据,故可以使原先的数据不至于被破坏掉。 24C02读写程序流程图如下图所示。 15 开始 发送地址 写入数据 退出 24C02写入程序流程图 开始 发送地址 读取数据 退出 24C02读取程序流程图 第五章 测试、结果及分析 测试工具:万用表 5.1 基本功能 要求实现功能 测试结果 输入交流电压为220v?10%时,输出电压在3-13v可调; 实现了0~13V可调 额定电流为0.5A,且纹波不大于10mV; 实现了该项功能 电平切换功能(3V、5V、6V、9V、12V),设定后按键可锁定 实现了该项功能 显示设定电压和测量电压,显示精度为0.01V 通过四位数码管已实 16 现 5.2 扩展要求部分 扩展要求 实现情况 输出电压0~13V可调 实现 掉电后可记忆上一次的设定值 通过24C02芯片以实现该项功能 两级过流保护功能,当电流超测试成功。 过额定值的20%达5秒时,电 路作断开操作;当电流超过额 定值的50%时,电路立即断开。 具有光提示(如LED); 第六章 各种芯片资料简介 ,,,,,,, 芯片的引脚图如图所示: AT89S51具有如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片 17 内时钟振荡器。 此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。 2(管脚说明: VCC:供电电压。 GND:接地。 P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚 时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为第一次写1 数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。 P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。 P3.0 RXD(串行输入口) 18 P3.1 TXD(串行输出口) P3.2 /INT0(外部中断0) ) P3.3 /INT1(外部中断1 P3.4 T0(记时器0外部输入) P3.5 T1(记时器1外部输入) P3.6 /WR(外部数据存储器写选通) P3.7 /RD(外部数据存储器读选通) P3口同时为闪烁编程和编程校验接收一些控制信号。 RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。 ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。 /PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。 /EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。 XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。 XTAL2:来自反向振荡器的输出。 19 8位数模转换器DAC0832芯片 1. 引脚及其功能 DAC0832是双列直插式8位D/A转换器。能完成数字量输入到模拟量(电流)输出的转换。图1-1和图1-2分别为DAC0832的引脚图和内部结构图。其主要参数如下 :分辨率为8位,转换时间为1μs,满量程误差为?1LSB,参考电压为(+10?/span>-10)V,供电电源为(+5,+15)V,逻辑电平输入与TTL兼容。从图1-1中可见, 在DAC0832中有两级锁存器,第一级锁存器称为输入寄存器,它的允许锁存信号为ILE,第二级锁存器称为DAC寄存器,它的锁存信号也称为通道控制信号 /XFER。 DAC0832引脚图如图所示: 图中,当ILE为高电平,片选信号 /CS 和写信号 /WR1为低电平时,输入寄存器控制信号为1,这种情况下,输入寄存器的输出随输入而变化。此后,当 /WR1 由低电平变高时,控制信号成为低电平,此时,数据被锁存到输入寄存器中,这样输入寄存器的输出端不再随外部数据DB的变化而变化。 对第二级锁存来说,传送控制信号 /XFER 和写信号 /WR2同时为低电平时,二级锁存控制信号为高电平,8位的DAC寄存器的输出随输入而变化,此后,当 /WR2由低电平变高 20 时,控制信号变为低电平,于是将输入寄存器的信息锁存到DAC寄存器中。 图中其余各引脚的功能定义如下: DI0 :8位的数据输入端,DI7为最高位。 (1)、DI7, (2)、IOUT1 :模拟电流输出端1,当DAC寄存器中数据全为1时,输出电流最大,当 DAC寄存器中数据全为0时,输出电流为0。 (3)、IOUT2 :模拟电流输出端2, IOUT2与IOUT1的和为一个常数,即IOUT1,IOUT2,常数。 (4)、RFB :反馈电阻引出端,DAC0832内部已经有反馈电阻,所以 RFB端可以直接接到 的输出端和输外部运算放大器的输出端,这样相当于将一个反馈电阻接在运算放大器 入端之间。 (5)VREF :参考电压输入端,此端可接一个正电压,也可接一个负电压,它决定0至255的数字量转化出来的模拟量电压值的幅度,VREF范围为(+10,-10)V。 VREF端与D/A内部T形电阻网络相连。 (6)、Vcc :芯片供电电压,范围为(+5~ 15)V。 (7)、AGND :模拟量地,即模拟电路接地端。 (8)、DGND :数字量地。 TLC2543引脚、功能及时序 一、引脚: TLC2543为20脚DIP封装,引脚图如下图所示。 21 TLC2543具有4线制串行接口,分别为片选端(CS),串行时钟输入端(I/O CLOCK),串行数据输入端(DATA IN)和串行数据输出端(DATA OUT)。它可以直接与SPI器件进行连接,不需要其他外部逻辑。同时,它还在高达4MHz的串行速率下与主机进行通信。 TLC2543除了具有高速的转换速度外,片内还集成了14路多路开关。其中n路为外部模拟量输入,3路为片内自测电压输入。在转换结束后,EOC引脚变为高电平,转换过程中由片内时钟系统提供时钟,无需外部时钟。在AD转换器空闲期间,可以通过编程方式进入断电模式,此时器件耗电只有25pA。 工作时序 : 以MSB为前导, 用CS进行12个时钟传送的工作时序如下图所示。 1.上电时,EOC=“1”,CS=“1” 2.使CS下降,前次转换结果的MSB即A11位数据输出到Dout供读数。 22 3.将输入控制字的MSB位即C7送到Din,在CS之后tsu>=1.425us后,使CLK上升,将Din上的数据移入输入寄存器。 4.CLK下降,转换结果的A10位输出到Dout供读数。 5.在第4个CLK下降时,由前4个CLK上升沿移入寄存器的四位通道地址被译码,相应模入通道接通,其模入电压开始时对内部开关电容充电。 6.第8个CLK上升时,将Din脚的输入控制字C0位移入输入寄存器后,Din脚即无效。 7.第11个CLK下降,上次AD结果的最低位A0输出到Dout供读数。至此,I/O数据已全部完成,但为实现12位同步,仍用第12个CLK脉冲,且在其第12个CLK下降时,模入通道断开,EOC下降,本周期设置的AD转换开始,此时使CS上升。 8.经过时间tconv<=10us,转换完毕,EOC上升。 9.使CS下降,转换结果的MSB位B11输出到Dout供读数。 10.将新周期的输入控制字的MSB位D7送到Din,在CS下降之处,tSU时间处由CLK上升将Din数据移入输入寄存器。 11.CLK下降,将AD结果的B10位输出到Dout。 上电时,第一周期读取的Dout数据无效,应舍去。 MC78系列 23 24C02芯片 概述: 24 CAT24WC01/02/04/08/16 是一个1K/2K/4K/8K/16K 位串行CMOS E2PROM 内部含有128/256/512/1024/2048 个8 位字节CATALYST 公司的先进CMOS 技术实质上减少了器件的功耗CAT24WC01 有一个8 字节页写缓冲器CAT24WC02/04/08/16 有一个16 字节页写缓冲器该器件通过I2C 总线接口进行操作有一个专门的写保护功能。 管脚描述: SCL 串行时钟 CAT24WC01/02/04/08/16 串行时钟输入管脚用于产生器件所有数据发送或接收的时钟这是一个输入管脚。 SDA 串行数据/地址 CAT24WC01/02/04/08/16 双向串行数据/地址管脚用于器件所有数据的发送或接收SDA 是一个开漏,输出管脚可与其它开漏输出或集电极开路输出进行线或wire-ORA0 A1 A2 器件地址输入端这些输入脚用于多个器件级联时设置器件地址当这些脚悬空时默认值为0 24WC01 除外。 25 当使用24WC01 或24WC02 时最大可级联8 个器件如果只有一个24WC02 被总线寻址这三个地址输入脚A0 A1 A2 可悬空或连接到Vss 如果只有一个24WC01 被总线寻址这三个地址输入脚A0 A1 A2 必须连接到Vss。 当使用24WC04 时最多可连接4 个器件该器件仅使用A1 A2 地址管脚A0 管脚未用可以连接到Vss 或悬空如果只有一个24WC04 被总线寻址A1 和A2 地址管脚可悬空或连接到Vss。 当使用24WC08 时最多可连接2 个器件且仅使用地址管脚A2 A0 A1 管脚未用可以连接到 Vss 或悬空如果只有一个24WC08 被总线寻址A2 管脚可悬空或连接到Vss。 当使用24WC16 时最多只可连接1 个器件所有地址管脚A0 A1 A2 都未用管脚可以连接到 Vss 或悬空WP 写保护。 如果WP 管脚连接到Vcc 所有的内容都被写保护只能读当WP 管脚连接到Vss 或悬空允许器件进行正常的读/写操作。 芯片的时序图: Data Validity Start and Stop Definition 26 Output Acknowledge 集成运放NE5534芯片 description/ordering information The NE5534, NE5534A, SA5534, and SA5534A are high-performance operational amplifiers combiningexcellent dc and ac characteristics. Some of the features include very low noise, high output-drive capability,high unity-gain and maximum-output-swing bandwidths, low distortion, and high slew rate. These operational amplifiers are compensated internally for a gain equal to or greater than three. Optimizationof the frequency response for various applications can be 27 obtained by use of an external compensationcapacitor between COMP and COMP/BAL. The devices feature input-protection diodes, output short-circuit protection, and offset-voltage nulling capability with use of the BALANCE and COMP/BAL pins (see theapplication circuit diagram). For the NE5534A and SA5534A, a maximum limit is specified for the equivalent input noise voltage. symbol application circuit 28 TLC2543 芯片引脚图,如图所示: TLC2543概述 TLC2543是12位的串行模数转换器,使用开关电容逐次逼近技术完成A/D转换过程。由于是串行输入结构,能够节省51系列单片机的I/O资源;且价格适中,分辨率较高,因此使用较为广泛。 TLC2543与围外电路的连线简单,三个控制输入端的CS(片选)、输入/输出时钟(I/O CLOCK)以及串行数据输入端(DATE INPUT 。片内的14通道多路器可以选择11个输入中的任何一个或三个测试电压中的一个,采样保持是自动的,转换结束,EOC输出变高。 引脚号 名称 I/O 说明 1~9,11,12 AINO~AIN10 I 模拟量的输入端。11路输入信号由内部多路器选通。 对于4.1MHZ的I/OCLOCK,驱动源阻抗必须小于或等 于50欧,而且用60PF电容来限制模拟输入电压的斜 29 率。 15 CS I 片选端。在CS端由高变低时,内部计数器复位。由低 变高时,在设定的时间内禁止DATAINPUT和I/O CLOCK 17 DATAINPUT , 串行数据输入端,由,位的串行地址输入来选择模拟 量的输入通道。 16 DATTAOUT 0 A/D 转换结果的三态串行输出端。,,为高时处于高 阻抗状态,,,为低时处于激活状态。 ,, EOC , 转换输出端。在最后的,,, ,,,,, 下降沿 之后,EOC从高电平变为低电平并保持转换完成和数 据准备传输为止。 10 GND 地。,,,是内部电路的回路端。除另外说明外,地 所有的电压测量都相对,,,而言。 ,, I/O CLOCK , 输入,输出时钟端。I/O’CLOCK接收串行输入信号并 完成以下四个功能:(1)在I/O clock 的钱8个上升沿, 8为输入数据存入数据寄存器。(2)在I/O’CLOCK的 第四个下降沿,被选通的模拟输入电压开始向电容器 充电,直到I/O’CLOCK的最后一个下降沿为止。(3) 将前一次转换数据的其余11位输出到,,,,oUT 端,在I/ OCLOCK \下降沿时数据开始变化。(4) I/OCLOCK 的最后一个下降沿,降转换的控制信号送 到内部状态控制位。 14 REF+ I 正基准电压端。基准电压的正端(通常为,,,)被 加到,,,,,最大的输入电压范围由加于本端与, ,,—端的电压差决定。 ,, REF— I 负基准电压端,基准电压的低端(通常为低)被加到 REF- 20 VCC 电源 30 TLC2543引脚、功能及时序 一、引脚: TLC2543为20脚DIP封装,引脚图如下图所示。 TLC2543具有4线制串行接口,分别为片选端(CS),串行时钟输入端(I/O CLOCK),串行数据输入端(DATA IN)和串行数据输出端(DATA OUT)。它可以直接与SPI器件进行连接,不需要其他外部逻辑。同时,它还在高达4MHz的串行速率下与主机进行通信。 TLC2543除了具有高速的转换速度外,片内还集成了14路多路开关。其中n路为外部模拟量输入,3路为片内自测电压输入。在转换结束后,EOC引脚变为高电平,转换过程中由片内时钟系统提供时钟,无需外部时钟。在AD转换器空闲期间,可以通过编程方式进入断电模式,此时器件耗电只有25pA。 工作时序 : 以MSB为前导, 用CS进行12个时钟传送的工作时序如下图所示。 1.上电时,EOC=“1”,CS=“1” 2.使CS下降,前次转换结果的MSB即A11位数据输出到Dout供读数。 3.将输入控制字的MSB位即C7送到Din,在CS之后tsu>=1.425us后,使CLK上升,将Din上的数据移入输入寄存器。 31 4.CLK下降,转换结果的A10位输出到Dout供读数。 5.在第4个CLK下降时,由前4个CLK上升沿移入寄存器的四位通道地址被译码,相应模入通道接通,其模入电压开始时对内部开关电容充电。 6.第8个CLK上升时,将Din脚的输入控制字C0位移入输入寄存器后,Din脚即无效。 7.第11个CLK下降,上次AD结果的最低位A0输出到Dout供读数。至此,I/O数据已全部完成,但为实现12位同步,仍用第12个CLK脉冲,且在其第12个CLK下降时,模入通道断开,EOC下降,本周期设置的AD转换开始,此时使CS上升。 8.经过时间tconv<=10us,转换完毕,EOC上升。 9.使CS下降,转换结果的MSB位B11输出到Dout供读数。 10.将新周期的输入控制字的MSB位D7送到Din,在CS下降之处,tSU时间处由CLK上升将Din数据移入输入寄存器。 11.CLK下降,将AD结果的B10位输出到Dout。 上电时,第一周期读取的Dout数据无效,应舍去。 74HC573 74HC573 概述 74HC573是一款高速CMOS器件,74HC573引脚兼容低功耗肖特基TTL(LSTTL)系列。 74HC573包含八路D 型透明锁存器,每个锁存器具有独立的D 型输入,以及适用于面向总线的应用的三态输出。所有锁存器共用一个锁存使能(LE)端和一个输出使能(OE)端。 当LE为高时,数据从Dn输入到锁存器,在此条件下,锁存器进入透明模式,也就是说,锁存器的输出状态将会随着对应的D输入每次的变化而改变。当LE为低时,锁存器将存储D输入上的信息一段就绪时间,直到LE的下降沿来临。 32 当OE为低时,8个锁存器的内容可被正常输出;当OE为高时,输出进入高阻态。 OE端的操作不会影响锁存器的状态。 74HC573与以下型号逻辑功能相同: 74HC563,但输出为反相 74HC373,但引脚布局不同 74HC571的特点: 特点: ?三态总线驱动输出 ?置数全并行存取 ?缓冲控制输入 ?使能输入有改善抗扰度的滞后作用 管脚图如图所示: 33 ,,,,,芯片 uA741通用高增益运算通用放大器,双列直插8脚或圆筒8脚封装。工作电压?22V,差分电压?30V,输入电压?18V,允许功耗500mW.其管脚与OP07(超低失调精密运放)一样。 34 管脚图如图所示: 第七章 PCB制板的一些问题 设计流程 PCB的设计流程分为网表输入、规则设置、元器件布局、布线、检查、复查、输出六个步骤. 网表输入 网表输入有两种方法,一种是使用PowerLogic的OLE PowerPCB Connection功能,选择Send Netlist,应用OLE功能,可以随时保持原理图和PCB图的一致,尽量减少出错的可能。另一种方法是直接在PowerPCB中装载网表,选择File->Import,将原理图生成的网表输入进来。 规则设置 35 如果在原理图设计阶段就已经把PCB的设计规则设置好的话,就不用再进行设置 这些规则了,因为输入网表时,设计规则已随网表输入进PowerPCB了。如果修改了设计规则,必须同步原理图,保证原理图和PCB的一致。除了设计规则和层定义外,还有一些规则需要设置,比如Pad Stacks,需要修改标准过孔的大小。如果设计者新建了一个焊盘或过孔,一定要加上Layer 25。 注意: PCB设计规则、层定义、过孔设置、CAM输出设置已经作成缺省启动文件,名称为Default.stp,网表输入进来以后,按照设计的实际情况,把电源网络和地分配给电源层和地层,并设置其它高级规则。在所有的规则都设置好以后,在PowerLogic中,使用OLE PowerPCB Connection的Rules From PCB功能,更新原理图中的规则设置,保证原理图和PCB图的规则一致。 元器件布局 网表输入以后,所有的元器件都会放在工作区的零点,重叠在一起,下一步的工作就是把这些元器件分开,按照一些规则摆放整齐,即元器件布局。PowerPCB提供了两种方法,手工布局和自动布局。 手工布局 1. 工具印制板的结构尺寸画出板边(Board Outline)。 2. 将元器件分散(Disperse Components),元器件会排列在板边的周围。 3. 把元器件一个一个地移动、旋转,放到板边以内,按照一定的规则摆放整齐。 自动布局 PowerPCB提供了自动布局和自动的局部簇布局,但对大多数的设计来说,效果并不理想,不推荐使用。 注意事项 a. 布局的首要原则是保证布线的布通率,移动器件时注意飞线的连接,把有连线关系的器件放在一起 b. 数字器件和模拟器件要分开,尽量远离 c. 去耦电容尽量靠近器件的VCC 36 d. 放置器件时要考虑以后的焊接,不要太密集 e. 多使用软件提供的Array和Union功能,提高布局的效率 布线 布线的方式也有两种,手工布线和自动布线。PowerPCB提供的手工布线功能十分强大,包括自动推挤、在线设计规则检查(DRC),自动布线由Specctra的布线引擎进行,通常这两种方法配合使用,常用的步骤是手工—自动—手工。 手工布线 1. 自动布线前,先用手工布一些重要的网络,比如高频时钟、主电源等,这些网络往往对走线距离、线宽、线间距、屏蔽等有特殊的要求;另外一些特殊封装,如BGA,自动布线很难布得有规则,也要用手工布线。 2. 自动布线以后,还要用手工布线对PCB的走线进行调整。 自动布线 手工布线结束以后,剩下的网络就交给自动布线器来自布。选择Tools->SPECCTRA,启动Specctra布线器的接口,设置好DO文件,按Continue就启动了Specctra布线器自动布线,结束后如果布通率为100%,那么就可以进行手工调整布线了;如果不到100%,说明布局或手工布线有问题,需要调整布局或手工布线,直至全部布通为止。 注意事项 a. 电源线和地线尽量加粗 b. 去耦电容尽量与VCC直接连接 c. 设置Specctra的DO文件时,首先添加Protect all wires命令,保护手工布的线不被自动布线器重布 d. 如果有混合电源层,应该将该层定义为Split/mixed Plane,在布线之前将其分割,布完线之后,使用Pour Manager的Plane Connect进行覆铜 e. 将所有的器件管脚设置为热焊盘方式,做法是将Filter设为Pins,选中所有的管脚,修改属性,在Thermal选项前打勾 f. 手动布线时把DRC选项打开,使用动态布线(Dynamic Route) 检查 检查的项目有间距(Clearance)、连接性(Connectivity)、高速规则(High Speed) 37 和电源层(Plane),这些项目可以选择Tools->Verify Design进行。如果设置了高速规则,必须检查,否则可以跳过这一项。检查出错误,必须修改布局和布线。 注意: 有些错误可以忽略,例如有些接插件的Outline的一部分放在了板框外,检查间距时会出错;另外每次修改过走线和过孔之后,都要重新覆铜一次。 2.6 复查 复查根据“PCB检查表”,内容包括设计规则,层定义、线宽、间距、焊盘、过孔设置;还要重点复查器件布局的合理性,电源、地线网络的走线,高速时钟网络的走线与屏蔽,去耦电容的摆放和连接等。复查不合格,设计者要修改布局和布线,合格之后,复查者和设计者分别签字。 设计输出 PCB设计可以输出到打印机或输出光绘文件。打印机可以把PCB分层打印,便于设计者和复查者检查;光绘文件交给制板厂家,生产印制板。光绘文件的输出十分重要,关系到这次设计的成败,下面将着重说明输出光绘文件的注意事项。 a. 需要输出的层有布线层(包括顶层、底层、中间布线层)、电源层(包括VCC层和GND层)、丝印层(包括顶层丝印、底层丝印)、阻焊层(包括顶层阻焊和底层阻焊),另外还要生成钻孔文件(NC Drill) b. 如果电源层设置为Split/Mixed,那么在Add Document窗口的Document项选择Routing,并且每次输出光绘文件之前,都要对PCB图使用Pour Manager的Plane Connect进行覆铜;如果设置为CAM Plane,则选择Plane,在设置Layer项的时候,要把Layer25加上,在Layer25层中选择Pads和Viasc. 在设备设置窗口(按Device Setup),将Aperture的值改为199 d. 在设置每层的Layer时,将Board Outline选上 e. 设置丝印层的Layer时,不要选择Part Type,选择顶层(底层)和丝印层的Outline、Text、Line f. 设置阻焊层的Layer时,选择过孔表示过孔上不加阻焊,不选过孔表示家阻焊,视具体情况确定 g. 生成钻孔文件时,使用PowerPCB的缺省设置,不要作任何改动 h. 所有光绘文件输出以后,用CAM350打开并打印,由设计者和复查者根据“PCB检查 38 表”检查 过孔(via)是多层PCB的重要组成部分之一,钻孔的费用通常占PCB制板费用的30%到40%。简单的说来,PCB上的每一个孔都可以称之为过孔。从作用上看,过孔可以分成两类:一是用作各层间的电气连接;二是用作器件的固定或定位。如果从工艺制程上来说,这些过孔一般又分为三类,即盲孔(blind via)、埋孔(buried via)和通孔(through via)。盲孔位于印刷线路板的顶层和底层表面,具有一定深度,用于表层线路和下面的内层线路的连接,孔的深度通常不超过一定的比率(孔径)。埋孔是指位于印刷线路板内层的连接孔,它不会延伸到线路板的表面。上述两类孔都位于线路板的内层,层压前利用通孔成型工艺完成,在过孔形成过程中可能还会重叠做好几个内层。第三种称为通孔,这种孔穿过整个线路板,可用于实现内部互连或作为元件的安装定位孔。由于通孔在工艺上更易于实现,成本较低,所以绝大部分印刷电路板均使用它,而不用另外两种过孔。以下所说的过孔,没有特殊说明的,均作为通孔考虑。 从设计的角度来看,一个过孔主要由两个部分组成,一是中间的钻孔(drill hole),二是钻孔周围的焊盘区,见下图。这两部分的尺寸大小决定了过孔的大小。很显然,在高速,高密度的PCB设计时,设计者总是希望过孔越小越好,这样板上可以留有更多的布线空间,此外,过孔越小,其自身的寄生电容也越小,更适合用于高速电路。但孔尺寸的减小同时带来了成本的增加,而且过孔的尺寸不可能无限制的减小,它受到钻孔(drill)和电镀(plating)等工艺技术的限制:孔越小,钻孔需花费的时间越长,也越容易偏离中心位置;且当孔的深度超过钻孔直径的6倍时,就无法保证孔壁能均匀镀铜。比如,现在正常的一块6层PCB板的厚度(通孔深度)为50Mil左右,所以PCB厂家能提供的钻孔直径最小只能达到8Mil。 第八章 制作的心得体会 通过这次的电子制作比赛,与其说是比赛,我觉得就更加恰当地应该说是一次电子制作的体验和学习。我想我们的确是学到了很多。从最基本的51芯片的使用到更高级的运算放大器NE5534芯片的使用,我们一路走来,遇到了各种各样的困难。但是,我们始终是坚持了下来。我们可以问心无悔地说,我们尽力了。不管结果如何,我想这始终都会是一段难忘的记忆。 我想,对于我们组的三个成员来说,这次的电子制作比赛时我们的第一次,第一次参加电子类的比赛,我们跌跌撞撞地一路走来,但这并没有打击我们走下去的决心,反 39 而激发了我们最电子制作的更浓厚的兴趣。我想,在今后的学习中,我们一定会结合自己这次电子制作的经验,给自己充电,加强这方面的知识积累。为下一次的机会做好充足的准备。 附录一: 附录二: 完整的系统源代码: #include #define uchar unsigned char 40 #define uint unsigned int /* 变量解释: num0 输出电压除以AD芯片(TLC2543)的读取电压的比值 num1 num1的值为放大比例,即输出电流除以DA芯片(DAC0832)的输出电压 *100(即显示的值)的比值 max 当电路中电流为最大时,AD输出的电流 */ #define num0 1 #define num1 1 #define max 1 /* 变量解释: flag 判断是否锁定键盘 flag1 常用电压的设定 flag0 判断DA值为bujin,还是常用电压,还或是bubu函数 s1num s1按键的值 s4num s4按键的值 a 判断bubu程序是加还是减 */ uchar s1num,s4num,flag,flag1,flag0, qian,bai,shi,ge,a; /* 变量解释: shu 输出电压的显示值 yibu 自动步进的DA值 bujin 步进的设定值 */ uint shu,yibu,bujin; 41 uchar code table1[]={ //normal number 0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f}; uchar code table2[]={ //+'.'number 0xbf,0x86,0xdb,0xcf, 0xe6,0xed,0xfd,0x87, 0xff,0xdf}; uchar code table3[]={ //常用电压 0x12c,0x1f4,0x258,0x384,0x4b0}; sbit SCL=P1^7 ; //I2C的数据/地址传输端 sbit SDA=P1^6 ; //I2C的时钟端 sbit dula=P3^2 ; //数码管的段选,用来选择数码管显示的数字 sbit wela=P3^7 ; //数码管的位选,用来选择显示的数码管 sbit csda=P1^4 ; //DAC0832的片选信号端 sbit wr=P1^5 ; //外部写控制 sbit s1=P3^0 ; //按键1,即功能切换键 sbit s2=P3^1 ; //按键2,即增加键 sbit s3=P3^5 ; //按键3,即减小键 sbit s4=P3^6 ; //按键4,即锁定解锁键 sbit ADEOC=P2^4 ; //AD转换结束端,在最后的I/O CLOCK下降沿之后, //EOC从高电平变为低电平并保持到转换完成和数据准备传输为止 sbit ADCLOCK=P2^3 ; //输入输出时钟端 sbit ADIN=P2^2 ; //串行数据输入端 sbit ADOUT=P2^1 ; //AD转换结果的串行输出端 sbit adcs=P2^0 ; //AD的片选端 42 sbit di=P2^7 ; //蜂鸣器 void delay(); //延时一微秒左右 void delayms(uint z); //延时单位为毫秒 void init(); //初始化函数 void keyscan(); //键盘扫描函数 /*-----------------I2C函数声明-----------------*/ void start(); //开始I2C通讯 void stop(); //停止I2C通讯 void respons(); //应答 void write_byte(uchar date); //写数据 uchar read_byte(); //读数据 void write_add(uchar address,uchar date); //在指定地址写数据 uchar read_add(uchar address); //在指定地址读数据 /*-----------------I2C函数声明-----------------*/ void display(uchar qian,uchar bai,uchar shi,uchar ge); //数码管显示,格式为XX(XX void didi(); //若电流超过1A的1.2倍时过5秒初始化,1A的1.5倍时直接初始化 void dastart(uint x); //DA开始,并输出指定电压,其中x为需要输出的电压 void xianshu(); //显示电路中的电流 void shebujin(); //设定并显示设定的步进电压 void shechang(); //设定并显示设定的常用电压 void bubu(); //bubu每隔0.5秒输出电压变化0.1V,先增大,至超过13V时,再减小 void bubustart(); //开始bubu函数模式,数码管显示电路中的电压 void bubustop(); 43 //结束bubu函数模式,数码管显示电路中的电压 uint adwork(); //读取AD芯片的数据即测得的电流,但由于有乘以相应的系数,所以输出结果为输出端 的电压 /*===========================主函数==================*/ void main() { init(); while(1) { keyscan(); if(s1num==0) { xianshu(); //显示输出电压函数 } if(s1num==1) { shebujin(); //设定步进电压函数 } if(s1num==2) { shechang(); //设定常用电压函数 } if(s1num==0) { if(flag0==1) 44 { dastart(bujin); //使DA芯片输出指定的步进电压的相应电流 } if(flag0==2) { dastart(table3[flag1]); //使DA芯片输出指定的常用电压的相应电流 } if(flag0==3) { bubustart(); //开始bubu函数 } if(flag0!=3) { bubustop(); //结束步步函数 } } didi(); } } /*===========================主函数==================*/ void init() { di=1; //蜂鸣器,关闭 wela=0; //数码管,关闭 dula=0; 45 csda=1; //DA初始化,关闭 wr=1; SDA=1; //I2C通讯,关闭 delay(); SCL=1; delay(); TMOD=0x11; TH0=(65536-50000)/256; //初始化定时器0,关闭 TL0=(65536-50000)%256; EA=1; ET0=1; TR0=0; TH1=(65536-50000)/256; //初始化定时器1,关闭 TL1=(65536-50000)%256; EA=1; ET1=1; TR1=0; shu=0; bujin=0; yibu=0; s1num=0; s4num=0; flag=0; flag0=0; flag1=0; } 46 void delay() { ; ; } void delayms(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /*===================================================*/ /*====================DA转换=========================*/ /*===================================================*/ void dastart(uint x) { dula=0; //关闭数码管显示 wela=0; csda=0; //开启DA wr=0; P0=x*num1; //P0为DA接口,num1的值为放大比例,即输出 电流除以DA芯片(DAC0832)的输出电压*100(即显示的值)的比值 delayms(200); } /*===================================================*/ /*====================DA转换=========================*/ /*===================================================*/ /*===================================================*/ 47 /*================数码管显示函数=====================*/ /*===================================================*/ void display(uchar qian,uchar bai,uchar shi,uchar ge) { csda=1; //关闭DA wr=1; dula=1; P0=table1[qian]; dula=0; P0=0xff; wela=1; P0=0x7f; wela=0; delayms(5); dula=1; P0=table2[bai]; //table2输出的值,加有小数点 dula=0; P0=0xff; wela=1; P0=0xbf; wela=0; delayms(5); dula=1; P0=table1[shi]; dula=0; P0=0xff; wela=1; 48 P0=0xdf; wela=0; delayms(5); dula=1; P0=table1[ge]; dula=0; P0=0xff; wela=1; P0=0xef; wela=0; delayms(5); } /*===================================================*/ /*================数码管显示函数=====================*/ /*===================================================*/ void didi() { if(adwork()>=max*1.5) { init(); //让电路初始化 } if(adwork()>=max*1.2) { di=0; TR0=1; } } 49 void timer0() interrupt 1 //用于当电流超过1.2倍时过5秒复位 { uchar aa=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; aa++; if(aa==20*5) { aa=0; init(); //让电路初始化 } } void timer1() interrupt 3 //用于bubu函数的每秒步进0.1V { uchar tt=0; TH0=(65536-50000)/256; TL0=(65536-50000)%256; tt++; if(tt==10) { tt=0; bubu(); } if(s1==0) { delayms(5); if(s1==0) { 50 TR1=0; //关闭定时器,即关闭bubu函数 } } } /*==================================================*/ /*==================================================*/ /*==========I2C总线通讯读写,启动,停止函数=========*/ /*==================================================*/ void start() //启动I2C总线的函数 { SDA=1; delay(); SCL=1; delay(); SDA=0; delay(); } void stop() //终止I2C总线的函数 { SDA=0; delay(); SCL=1; delay(); SDA=1; delay(); } 51 void respons() { uchar i=0; SCL=1; delay(); while((SDA==1)&&(i<250)) i++; SCL=0; delay(); } void write_byte(uchar date) { uchar i,temp; temp=date; for(i=0;i<12;i++) { temp=temp<<1; SCL=0; delay(); SDA=CY; delay(); SCL=1; delay(); } SCL=0; delay(); SDA=1; delay(); 52 } uchar read_byte() { uchar i,j,k; SCL=0; delay(); SDA=1; delay(); for(i=0;i<12;i++) { SCL=1; delay(); j=SDA; k=(k<<1)|j; SCL=0; delay(); } return k; } void write_add(uchar address,uchar date) { start(); write_byte(0xa0); /*器件地址,EEPROM默认前四位为1010,第8位是数据的传送方向位(R/T),0表示 主机发送数据(T),1表示主机接收数据(R)。*/ respons(); write_byte(address); //器件内部存储器的地址,为随便任意数 respons(); 53 write_byte(date); //写函数 respons(); stop(); } uchar read_add(uchar address) { uchar date; start(); write_byte(0xa0); respons(); write_byte(address); respons(); start(); write_byte(0xa1); respons(); date=read_byte(); stop(); return date; } /*==================================================*/ /*==========I2C总线通讯读写,启动,停止函数=========*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ 54 /*===================AD转换========================*/ /*==================================================*/ uint adwork() //读出上一次AD值,并开始下一次转换 { uint din=0; uchar dout,i; dout=0x0c; //选择控制命令0000 1011,0000指选择的通道,10数据长度12bits,1前导选择LSB first,1单双极性选择Bipolar while(ADEOC==0); //等待上一次通讯完成,EOC自动置一 ADCLOCK=0; //EOC,CS置零开始本次通讯 adcs=0; for(i=0;i<16;i--) { if(dout&0x80)//1000 0000 ADIN=1; //控制命令从MSB-LSB,向AD发数,adin为端口号 else ADIN=0; ADCLOCK=1; //时钟一个周期开始,读数据 dout<<=1; //左移,准备输入下一位值 din<<=1; //左移,准备接受下一位值 if(ADOUT==1) din=din|0x0001;//接收AD数据,从MSB-LSB ADCLOCK=0; //时钟一个周期结束,准备传输数据 } adcs=1; return(din>>4); //16位,右移四位变为12位精度 } /*==================================================*/ 55 /*===================AD转换=========================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*================独立键盘扫描======================*/ /*==================================================*/ void keyscan() { if(flag==0) { if(s1==0) { delayms(5); if(s1==0) { s1num++; if(s1num==1) { flag0=1; //flag0为1时,数码管显示步进电压,按确定键之后,DA按bujin值输出电压 } if(s1num==2) { flag0=2; //flag0为2时,数码管显示常用电压,按确定键之后,DA按table3[flag1]值输出电压 } if(s1num==3) 56 { flag0=3; //flag0为3时,数码管显示电路电压,并开启bubu函数 } if(s1num==4) { s1num=0; } } } while(!s1) //等待松手释放 { if(flag0==1) { shebujin(); } if(flag0==2) { shechang(); } if(flag0==3) { xianshu(); } } if(s1num!=0) { if(s2==0) 57 { delayms(5); if(s2==0) { if(s1num==1) { bujin++; if(bujin==1301) { bujin=0; } } if(s1num==2) { flag1++; if(flag1==5) flag1=0; } } } while(!s2) //等待松手释放 { if(s1num==1) { shebujin(); } if(s1num==2) { shechang(); 58 } } if(s3==0) { delayms(5); if(s3==0) { if(s1num==1) { bujin--; if(bujin==-1) { bujin=1300; } } if(s1num==2) { flag1--; if(flag1==-1) flag1=4; } } } while(!s3) //等待松手释放 { if(s1num==1) { shebujin(); 59 } if(s1num==2) { shechang(); } } } } if(s4==0) { delayms(5); if(s4==0) { s4num++; if(s4num==1) //确定键 { flag=0; //flag为0时解锁键盘 s1num=0; //此时数码管处于显示状态 } if(s4num==2) { flag=1; //flag为1时锁定键盘,按s1,s2,s3键无效 } if(s4num==3) { s4num=0; flag=0; //flag为0时解锁键盘 } } 60 while(!s4) xianshu(); } } /*==================================================*/ /*================独立键盘扫描========================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*================显示输出电压函数====================*/ /*==================================================*/ void xianshu() { write_add(1,adwork()); //I2C通讯 delayms(100); shu=read_add(1)*0.12*num0; //此处的num0为显示比例,输出电压除以AD 芯片(TLC2543)的读取电压的比值 //其中read_add(1)*0.0012为AD芯片读取的电压 值,单位为V,为了输入数码管 //方便,故乘以100,以便显示到小数点后两位 qian=shu/1000; bai=shu%1000/100; shi=shu%100/10; ge=shu%10; display(qian,bai,shi,ge); } /*==================================================*/ 61 /*================显示输出电压函数====================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*================设定步进电压函数====================*/ /*==================================================*/ void shebujin() { write_add(10,bujin); //I2C通讯 delayms(100); //bujin=1,U=0.01V bujin=read_add(10); qian=bujin/1000; bai=bujin%1000/100; shi=bujin%100/10; ge=bujin%10; display(qian,bai,shi,ge); } /*==================================================*/ /*================设定步进电压函数====================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*================设定常用电压函数====================*/ /*==================================================*/ 62 void shechang() { write_add(20,flag1); //I2C通讯 delayms(100); flag1=read_add(20); qian=table3[flag1]/1000; bai=table3[flag1]%1000/100; shi=table3[flag1]%100/10; ge=table3[flag1]%10; display(qian,bai,shi,ge); } /*==================================================*/ /*================设定常用电压函数====================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==================================================*/ /*==============从显示电压开始步进====================*/ /*==================================================*/ void bubustart() { yibu=shu; TR1=1; } void bubu() { if(a==0) { 63 yibu=yibu+10; if(yibu>1291) a=1; } if(a==1) { yibu=yibu-10; if(yibu<10) a=0; } dastart(yibu); xianshu(); } void bubustop() { TR1=0; } /*==================================================*/ /*===============从显示电压开始步进=================*/ /*==================================================*/ /*==================================================*/ 参考文献: 新概念51单片机C语言教程——入门、提高、开发、拓展全攻略 Altium Designer 6 设计教程 64
/
本文档为【数控电压源论文】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索