《毕业设计正文改2010624最终版.doc》由会员分享,可在线阅读,更多相关《毕业设计正文改2010624最终版.doc(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流毕业设计正文改2010624最终版.精品文档.1 绪论1.1 选题背景上世纪末,随着大功率晶体管技术发展、大规模集成电路和计算机技术的飞跃发展,交流电机的变频调速技术已日趋完善,并在各行各业中得到了广泛的应用,尤其在暖通空调和加工领域其节能效益显著。随着经济改革的不断深入,市场竞争的不断加剧,节能降耗已经成为降低生产成本、提高产品质量的重要手段之一。改善现有设备的运行状况,提高系统安全可靠性和设备利用率,延长设备使用寿命等优点在个应用领域中已充分体现。目前应用的设备中大部分的耗电量很大,而且没有一个有效的监控设施来对其监控,资源的浪费比较严重
2、,因而具有很大的节能潜力。通过对设备的输入输出信号的采集与控制可以分析出设备的运行状况从而可以提示用户如何提高设备的能效比。信号的采集与控制系统正是在这种背景下确定的,最终目的就是设计并研制出一个设备的能效比监测显示系统,以期应用到生产生活领域。1.2 选题意义在工业生产和日常生活中,都要通过各种方法获取信息。生活中人们通过各种设备获得自己所需要的信息,工厂及单位需要及时而准确的采集到所需目标的各项数值信息。而实际应用中通过以单片机为核心的模块就可以相对快速且准确的对设备进行数据的采集,进而通过把测量到的数据处理后实现对被测设备性能的控制。测量到的数据是最最基础的资料,也是工业生产的眼睛,是改
3、善设备运行状况、控制设备运作的基础指标。因此,及时而有效的处理好测量到的基础数据,不仅能够提高产品质量,而且还可以提高设备利用率,降低能耗。1.3 研究内容基于单片机的信号控制及采集系统主要设计并用于家电设备的能效监测上,如何把测量到的信息转化成标准的性能指标参数从而改善系统运行状况是信号控制及采集系统的主要目的。设计的要求:采用单片机设计最小系统;配备一个彩色显示屏;能测量电流、电压、420mA模拟信号以及水的流量、温度信号,并通过彩色液晶屏显示一段时间内的总功耗、总制冷量、温度值、功率因数等;配备一个电源模块用于供电;配备一个用于报警的三色指示灯;配有420mA输入和输出接口电路;电路可实
4、现过流保护、过压保护、信号流方向保护并可以吸收浪涌电压;所有数据可以保存2年。2 系统的硬件设计2.1 系统工作原理系统中测量的信号为四路温度信号、一路420mA模拟信号、一路电压信号、一路电流信号以及两路PI控制的420mA输出信号。四路温度信号通过Pt100电阻测量后转化为电信号传到单片机内;一路420mA模拟信号和电压电流信号这三路信号通过电路测量后传到单片机内;两路PI信号由上面测量到的七路信号确定。单片机通过对测量到的七路信号的处理,算出系统的各个指标,并把计算得到的结果与标准值比较产生反馈信息作用于设备,当系统工作状况欠佳时单片机会输出对应的信号来空三色指示灯显示不同颜色以提示用户
5、。用户通过显示屏上显示的结果设置相应的PI参数,从而改善设备运行状况。系统结构框图如图2.1所示。图2.1 系统结构框图2.2 系统硬件电路方案设计根据本课题的工作原理及硬件系统开发分析,采用模块化设计理念与解决方案,设计出硬件系统平台,硬件系统包括:单片机最小系统模块(MCU)、Flash存储模块、电源模块、显示模块、信号采集模块、I/V变换模块、A/D转换模块、功率角测量模块、通讯模块、报警模块、420mA控制信号输出模块等。其设计要求是硬件系统稳定、可靠、安全、易于软件开发与功能实现。硬件系统结构框图如图2.1所示。2.3 芯片的选择与介绍芯片的选取对与一个系统来说也是一个不容忽视的环节
6、。芯片选取得当不仅可以使硬件电路结构简单、稳定,而且还可以节约开发成本,缩短开发周期。2.3.1 单片机的选型系统中单片机主要用于处理采集到的各路信号(包括流量信号、电流信号、电压信号、温度信号和PI控制信号),通过对各路信号的采集与处理后在触摸液晶显示屏上显示所测设备的流量值、电流值、电压值、温度值、功率因数值、能效比比值以及能效比曲线等信息。由于所测信号比较多而且要处理的信息也比较大,所以系统选用了ATMEL公司的ATmega128单片机作为核心芯片。ATmega系列单片机,它的精简指令集模式在效率、速度及指令格式上都有很大优势,而且部分产品价格甚至低于同类中档AT90系列单片机的价格,其
7、性价比更高。而ATmega128单片机用有128KB Flash、4KB EEPROM、4KB RAM、48个I/O口、34个不同中断源、ISP下载和JTAG仿真等功能,可以很好的完成对信息的处理。2.3.2 液晶屏的的选择 考虑到液晶屏上显示的信息量比较多比较大,所以要选择屏幕比较大的显示器,屏上要实时显示系统能效比比值及其曲线、功率值、温度值及其曲线、电流电压值及其曲线等信息,而且屏上还要设置相应的按键来处理不同信息、选择不同功能、设置相应的参数等。因此为了方便编程,选用的带触摸屏的液晶显示器型号为LJD-ZU070TTFT(7寸真彩)分辨率为800*480。如图2.2所示。图2.2 LJ
8、D-ZU070T实物2.3.3 数据存储器的选择 测量到的数据记录时每条包括年、月、日、时、分,每个数据信息占用一个字节(共5B),瞬时能效比(2B),瞬时功率(2B),瞬时制冷量(2B)。数据全都保存在数据存储器里,保存期限2年,自动覆盖超过2年的数据记录。所以存储的信息量很大,单单用ATmega128的内部存储空间已经不能够满足要求,所以必须外扩一个数据存储器来保存测量到的数据信息。flash闪存是非易失存储器,可以对叫做块(block)的存储器单元进行擦写和再编程。任何Flash器件的写入操作只能在空的或者已经擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除操作。fl
9、ash存储器市场上应用较广的有两种类型:NOR 型flash和NAND型 flash。NOR 型flash的程序和数据可以存放在同一片芯片上,拥有独立的数据总线和地址总线,能快速随机地读取。它允许系统直接从flash中读取代码执行,而无需先将代码下载至RAM中再执行;而且还可以单字节或单字编程,但不能单字节擦除,必须以块为单位或对整片执行擦除操作。在对存储器进行编程之前必须对块或整片进行预编程和擦除操作。NAND型 flash则是以页(page)为单位进行读写操作,1页为256B或512B;以块为单位进行擦除操作,1块为4KB、8KB或16KB。具有块编程和块擦除的功能。NAND型 flash
10、的数据、地址采用同一总线,实现串行读取。但是它的随机读取速度比较慢且不能按字节随机编程。NAND型器件在执行擦除操作时十分简单,而NOR型器件则要求在进行擦除前必须把目标块内所有的位都写为0。由于擦除NOR器件时是以64128KB的块进行,所以执行一个写入/擦除操作的时间为5s;与此相反,擦除NAND器件是以832KB的块进行的,执行相同的操作最多只需要4ms。其性能比较如下:接口差别:NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。NAND器件使用复杂的I/O口来串行存取数据,共用8位总线(各个产品或厂商的方法可能各不相同)。8个引脚用来传送控
11、制、地址和数据信息。NAND读和写操作采用512字节的页和32KB的块为单位,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。容量和成本:NAND flash的单元尺寸几乎是NOR器件的一半,NAND flash生产过程比较简单,NAND结构可以在给定的模具尺寸内提供更高的容量,因此其价格也就相对比较低,价格大概只有NOR的十分之一。NOR flash占据了容量为116MB闪存市场的大部分,而NAND flash只是用在8128MB的产品当中,这就说明NOR flash主要应用在代码存储介质中,NAND flash适合于数据存储。可靠性和耐用性:NAND
12、 flash中每个块的最大擦写次数是一百万次,而NOR flash的擦写次数是十万次。NAND flash存储器除了具有10比1的块擦除周期优势外,典型的NAND flash的块尺寸要比NOR flash的小8倍,每个NAND flash存储器中的块在给定的时间内的删除次数要少一些。软件支持:在NOR flash器件上运行代码时不需要任何的软件支持,而在NAND flash器件上进行同样的操作时,通常需要驱动程序。经过多方面考虑,最后选用了型号为K9F1208U0C-P的flash存储芯片。它是一款NAND型flash芯片。以页为单位进行读写操作(1页为528B),以块为单位进行擦除操作(1块
13、为16KB即32页)。具有块编程和块擦除的功能,数据线、地址线采用同一总线,实现串行读取。它的优点是芯片尺寸小、引脚少、是位成本(bit cost)最低的固态存储器芯片。缺点是随机读取速度比较慢且不能按字节随机编程、存储位错误率较高。编程时推荐使用 ECC校验。芯片中包含有冗余块,数目大概占1%,当某个存储块发生错误后可以进行标注,并以冗余块代替。其结构如图2.3所示:图2.3 K9F1208U0C-P存储芯片内部结构2.3.4 芯片的选型 模拟量输入信号分辨率为1/4096,约为0.025%;精度不低于0.5%,为了保证该指标,A/D芯片型号选用TLV2548CDW。它是TI公司推出的一款新
14、型高性能8通道12位低功耗、高速CMOS串行A/D转换芯片。采集到的信号由于很小单片机无法对其处理,所以采集到的信号要通过运算放大器放大后再接入TLV2548中进行模数转换。运算放大器选用常用的AD620A芯片。它具有精确度高、使用简单、低噪声、高输入阻抗(10G|2pF)、高共模抑制比(CMR:100dB)、低输入偏移电流(1.0mA)、低功耗电流(1.3mA)、具有过电压保护等特点。模数转换后的信号经单片机处理后保存到数据存储器K9F1208U0C-P芯片中。经处理后的信息一部分在触摸屏上显示出来,一部分作为控制信号输出。输出的这部分信号要经D/A转换变成420mA信号后再输出,D/A芯片
15、型号选用AD420AR-32。它是ADI公司生产的高精度、低功耗输出转换器。它的输出信号可以是电流信号,也可以是电压信号。其中电流信号的输出范围为420mA,020mA或024mA,具体可通过引脚RANGE SELECTl,RANGE SELECT2执行配置。当须要输出电压信号时,它也可以从一个隔离引脚提供电压输出,这时需外接一个缓冲放大器,可输出05V,010V,5V或10V电压。为了防止输出的420mA信号在控制电机过程中出现信号倒流,单片机与D/A之间要经过光耦隔离,光耦选用单通道的高速光耦合器6N137,它具有温度、电流和电压补偿功能,高的输入输出隔离,LSTTL/TTL兼容,高速(典
16、型为10MBd),5mA的极小输入电流等特点。因为选用的彩色触摸屏显示器的为异步串口通讯,所以在单片机与显示器之间要接一个异步串口芯片,其型号为MAX3232ESE+,是一款常用的通信接口芯片。它具有低功耗、高数据速率、增强型ESD保护等特性。因为单片机只能处理电压信号,所以要对测量到的电流信号进行I/V变换,系统中选用LM393-91M芯片作为I/V变换模块的转换芯片。要进行能效比的测量,必须计算设备运行时的有功功率值,之就要求功率因数,因此必须测量功率角。功率角由互感器对母线上电压和电流的测量所得信号经与非门后得到。与非门选用型号为TC7S00FU。因为以上所选的芯片电压等级各不相同,所以
17、要提供+3.3V 、+5V、+12V电源。所处理的信号有数字量也有模拟量,因此要有数字地、模拟地、信号地等。考虑以上情况,用所制作的电源板来达到以上电源的要求。电源板是把接入的220V电转化为所需的各种电压等级。电压转换模块的型号分别为:HAD10-5-W(输入85265VAC,输出+5V和-5VDC)、SR5S12/100(输入+5VDC,输出+12VDC)每个电压等级都并一个发光二极管用于指示有无电压输出。5V电源再经过AN1117-3.3稳压后输出+3.3V电压给单片机供电。2.4 硬件电路的设计考虑到系统所涉及的元器件比较多,为了节省开发成本,硬件电路的设计中元器件全部使用表贴式器件,
18、这样可以在PCB板的正反两面放置器件,可以更充分利用板子的有限空间。电路中数字信号的器件集中放在一起,模拟信号器件集中放在一起,所有接线端子就近放在对应芯片旁的板子边缘处。与芯片连接的电阻电容等元件要靠近所连接的芯片布置,这样可以减小信号误差与干扰。2.4.1 单片机最小系统的设计 单片机的晶振选用7.3728M的,芯片的每个电源与地之间都要接有一个0.1uF和10uF的电容,复位引脚通过电阻接到+3.3V,需要注意的是有一路电源为模拟电源(AVCC),所引它对应的地就应该是模拟地(AGND)。单片机最小系统如图2.4所示,JTAG仿真接口用于在线编程仿真用,如图2.5所示。图2.4 单片机最
19、小系统图2.5 JTAG接线图2.4.2 电源模块的设计 从母线上引进的交流电,经HAD10-5-W模块后转换成+5V和-5V电压,+5V电压给MAX3232供电,+5V电压经SR5S12/100变换成+12V电压给AD420供电。从电源板上引出来的电源有+5V、-5V、+12V、DGND、AGND。接线图如图2.6、图2.7所示。图2.6 5V转换电路图2.7 12V转换电路2.4.3 信号测量的设计 信号的采集通过信号板上引出的端子P5接入测量的信号,有:Pt100电阻测量到的空调冷冻水出口的实际温度值信号;Pt100电阻测量到的空调冷冻水入口的实际温度值信号;Pt100电阻测量到的空调冷
20、却水出口的实际温度值信号;Pt100电阻测量到的空调冷却水入口的实际温度值信号。它们再分别依次经过H电桥、信号放大电路AD620、12位AD转换器TLV2548后再接到ATmega128单片机上做信号处理。如图2.8、图2.9所示。图2.8 H电桥接线图H电桥上的电阻均选用0.1% 的精密电阻,以保证测量到的信号的准确度。图2.9 信号放大器外围接线图通过在设置界面设置好的管道直径经过在单片机内处理后得到流量信号。电压及电流信号是测量的空调变频器的电机上的电压和电流值。通过测量到的电流电压值以及功率因数算出有功功率、总功率、总制冷量、总耗电量以及能效比等等。如图2.10所示。图2.10 流量与
21、电压测量电路2.4.4 单片机与彩色触摸屏接口设计 因为彩色触摸屏为异步串口通讯,所以要用到单片机的RXD0和TXD0引脚。由于单片机的电源为TTL电平,而彩色触摸屏串口信号为RS-232电平,因此单片机与触摸屏中间要加一个电平转换芯片MAX3232E。如图2.11所示。图2.11 电平转换电路彩色触摸屏上的串口、电源以及USB接口位置如图2.12所示。图2.12 彩色触摸屏接口事宜图2.4.5 单片机与flash接口设计 因为flash的数据总线和地址总线共享,都通过8个I/O口来实现,由命令CLE、ALE和WE来选择。所以只需把单片机的PA0PA7口与flash的I/OI/O7对应相连即可
22、,控制线与单片机相应引脚相连。如图2.13所示。图2.13 flash与ATmega128接口电路2.4.6 单片机与A/D接口设计 TLV2548通过SDI、SDO、SCK、EOC、CS等引脚依次连到ATmega128单片机的MOSI、MISO、SCK、OC0、OC1A上,并把通过AD620后的信号转化成数字信息后由上述引脚传到单片机中。其接口电路如图2.14所示。图2.14 A/D转换芯片外围接线图图2.14中左边为信号的接入端,四路水温信号、一路电流信号、一路电压信号、一路流量信号。右边为信号输出端,接入ATmega128单片机。2.4.7 单片机与D/A接口设计 ATmega128单片
23、机输出的信号经过光耦6N137隔离后接到AD420上,经AD420数模转换后作为控制信号输出。如图2.15所示。图2.15 模数转换外围电路图2.15中左边的光耦起隔离作用,6N137的3号引脚接单片机的信号输出各引脚,6号引脚接AD420,信号经AD420数模转换后由端子引出,控制变频器电机运行。2.4.8 原理图的绘制 绘制原理图时各个元器件之间的关系要弄明白,网络标号要标清楚。两线若是交差相连的则要在交差点加点注明,否则用跨越线连接。选用的元器件库里若是没有则需自己创建原理图库,创建的原理图库最好起一个与做的设计相关的名字以方便查找,原理图的封装名称则要起所用元器件的名字,尺寸不宜过大,
24、也不宜过小,引脚间距适中即可。引脚间距可以通过右键属性、原理图属性、文档选项设置。如图2.16所示。图2.16 原理图属性设置原理图元件引脚的线最小间距一般为10mil(表帖式更小),所以捕获网格设置的数值应等于或小于10mil,并应使10/网格值=整数。这样可保证导线与元件引脚平滑地连接。绘制好的原理图见附件。2.4.9 PCB图的绘制 绘制好原理图后检查无误后要把元器件的封装添加进去。双击原理图后在“元件属性”里选择“编辑”后出现图2.17所示的“PCB模型”窗口,在“名称”一栏单击“浏览”,选择所需的封装类型,然后选确定,封装就添加进去了。图2.17 添加PCB封装界面如果PCB封装库中
25、没有所需的封装,自己就要创建一个PCB封装库,绘制好后把自建库添加进工程,就可以引用了。图2.17中所示的封装就是自己建的PCB封装。建的封装库名称是能效比,元件名称为K9F1208U0C。画板子时封装要做的仔细点,焊盘建的要比游标卡尺测量的值大一些(长度最好大一半以上),这样在元器件焊接时会比较容易。布线时过孔的孔径不要太小(不要小于20mil),直径与孔径的差要大一些(如果孔径为25mil,直径不要小于35mil)。PCB板上布元件时,原理图中靠近芯片连接的元器件一定也要靠近该芯片的封装放置。布线时,不要把电源线布成环形,尽量让其从一点发散出去,而且为了降低干扰,地线要加粗。布完线后要对照
26、原理图检查一遍有无错误。常用的查线快捷键有:Ctrl+H(选中所有有接触的线);Ctrl+M(测量两点间的距离)等。布完线检查无误后,最好把PCB板上电源的正负极、胆电容的正负极和二极管的正负极等带正负极的元器件用标签标注出来极性, PCB板上最好引出一些测试点(test point),比如3.3V,5V,12电源,数字地和模拟地等等,这样在焊接和调试时会比较方便。敷铜时,边框要距离板子边缘远一些。3 系统软件设计 系统的程序采用C语言编写,编译软件选用ICCAVR6.31,调试选用AVR Studio,写程序时用Edit Plus。3.1 单片机与触摸屏的通讯 单片机与触摸屏的通讯采用异步串
27、口实现,触摸屏上显示的各种信息均用子函数来实现,有屏幕浏览子程序,每个屏幕内各功能子函数等等,它们通过屏幕标志位切换屏幕,通过功能标志位切换相应的功能,显示字、点、线、线段、图片等等都编成子函数,所有函数的名称均起与其所实现的功能相关的名字,以方便随时调用。由于触屏作为人机界面,需要设置相关参数来实现特定功能,所以在屏幕的右下角建立了一个数字键盘用于设定参数。程序中通过扫描屏上信息,判断返回坐标的位置来显示或设置系统功能。3.2 单片机与flash的数据交互 硬件电路中单片机的PA0PA7口分别与Flash的I/O0I/O7口相连,通过几条控制总线实现对flash的读、写、擦除等功能。程序中f
28、lash为作为数据的存储部分,可以在断电后保证数据信息不会丢失,其功能被编写成几个子函数,写进flash的数据是实际测量的数据经单片机处理后的值,从flash读出的数据在触摸屏评上显示出来,通过调用触屏的相关子函数来实现相应的功能。3.3 信号的采集与处理 七路信号通过运算放大器后接到TLV2548D的A0A6引脚,程序中通过对这几路的循环扫描后转换成数字量信息送入单片机中,在单片机中把测到的数字信号换算成电压值进行计算,得到所需的温度值、电压值等等。3.4 系统流程图 3.4.1 触摸屏显示流程图 当判断屏上有返回值时,判断返回值的坐标位置,然后跳转到与之对应的功能子函数处理。处理完后返回主
29、程序等待下次判断。流程图见附件。3.4.2 单片机与flash通讯流程图 单片机与flash通讯是先向I/O发送命令,然后发送地址,最后发送不同功能的数据。可以分为写数据、读数据、擦除数据等三部分。流程图见附件所示。3.4.3 中断子程序流程图 程序中用中断处理功率因数的测量,流程图见附件中所示。3.4.4 定时器/计数器中断子程序流程图 用INT0、INT1启动和停止计数器,来测量电流与电压的相位差。流程图见附件中所示。3.4.5 主程序流程图 程序框架为,设备初始化、浏览屏幕、判断进入第几屏、读信号、存储信号、显示信号、输出信号等。流程图见附件中所示。4 系统调试在硬件调试过程中首先调试的
30、是电源板,其次调试信号板。信号板上按电源模块、单片机模块、触屏通讯模块、flash模块、模拟量采集模块、D/A输出模块依次调试。软件调试调试时按顺序依次调试单片机模块、触屏通讯模块、flash模块、模拟量采集模块、D/A输出模块。4.1 调试注意事项 焊接时要注意元器件的极性,焊锡不宜加的过多,焊好元器件后,用万用表测试所焊接的引脚与电路中的对应线是否相通。一定确保芯片的相邻引脚没有短接。焊接芯片时先固定好芯片的一个引脚,然后把其他引脚与PCB板上的焊盘对齐,再把斜对角处的引脚焊接好,这样芯片就固定在PCB板上了,检查引脚没有偏,方向没有焊错后就可以把其他引脚都焊上了。在焊接时烙铁尖不要在芯片
31、引脚出停留太长时间以免对芯片性能有影响。为了程序调试起来方便,程序在编写时采用模块化思想,实现不同功能程序段编写成子程序,程序中要在把各个子函数中用的变量定义成全局变量,把各个芯片与单片机相连的引脚定义成宏,并且为了程序读起来方便易于理解,名称、变量等应尽量设置成与其功能相关的名称,例如有个子程序的功能是显示时间,那么它的函数名就应该取display _time。编写程序时,尽量少用全局变量,多用局部变量。因为全局变量是放在数据存储器中,定义一个全局变量,MCU就少一个可以利用的数据存储空间,如果定义了太多的全局变量,会导致编译器无足够的内存可以分配(编译时就会出现下图所示的错误如图4.1所示
32、)。图4.1 缓冲区不足错误提示而局部变量大多定位于MCU内部的寄存器中,也有部分定位在数据寄存器中,在绝大多数MCU中,使用寄存器操作速度比数据存储器快,指令也更灵活,有利于生成质量更高的代码,而且被局部变量所占用的寄存器和数据存储器在不同的模块中可以重复利用。4.2 调试中的现象与处理方法 4.2.1 电源的调试调试电源板时,接入交流220V电压后发现板子上的电源指示灯有两个不亮,用万用表交流电压档测接入的电压正常,换用直流电压档测直流电压输出端的电压也正常,表明电压已经转换成功,电压模块已经工作,因此问题应该出在发光二极管出。可能是发光二极管的极性焊接反了导致其不亮。把发光二极管极性换一
33、下后再上电指示灯就亮了。发光二极管的极性是由管芯处扇形金属确定的而不是由发光二极管表面的缺口缺定。管芯处扇形对应的引脚为阴极。电源板调试好后,用排线把信号控制与采集板上的电源从电源板上接进来调试信号板。信号控制与采集板上由于元器件很多为了调试起来方便,没有把板子上的元器件都焊上再调,而是焊接一部分调试一部分。电源部分的调试:信号控制与采集板上的所有电源电路焊接无误后,通上电后发现只有+5V和+3.3V的两个电源指示灯亮(+5V的电源指示灯为黄色,+3.3V的电源指示灯为红色),而接在LD1117稳压芯片输入输出两端的+12V和+V(就是+5V)的指示灯均不亮(正常时+12V的电源指示灯为绿色灯
34、,+V的电源指示灯为黄色);用万用表直流电压档测LD1117稳压芯片输入端对地和输出端对地均为零点几伏,这显然是电压没有接过来,芯片没有工作。用万用表测量一下信号板+12V的引入端(在板子上是左下角的P1端子的第4和第9引脚)电压,万用表显示为+12V,证明电源已经接入信号控制与采集板。检查不出板子哪有问题后,仔细分析了一下原理图中的电路,最后发现是电源的地没有接对。+12V电源在电源板上是由RS5S12/100模块输出的,而该模块输出端所接的地为信号地(SGND),也就是说信号控制与采集板上的+12V是对信号地的电压值,因此LD1117稳压芯片的地以及该芯片输入输出端的电压所对应的地都应该是
35、信号地(SGND)。如图4.2、图4.3所示:图4.2 电源板原理图中的12V电源模块改正后再上电,四个电源指示灯都正常亮了,测量LD1117芯片的输入输出电压也都正常了。图4.3为改正后的原理图,LD1117的地以及D21、D21指示灯的地都改为信号地了。图4. 3 改正后的原理图4.2.2 单片机的调试电源部分调试好后,把ATmega128单片机最小系统焊接好后连上仿真器,接通电源,运行AVR Studio,选择仿真器为JTAGICE mkll型号选择ATmega128,进入运行界面后在“AVR”菜单中读取单片机电压值如图4.4所示:图4.4 读回来的电压值如果读回来的电压不是三点几伏,则
36、说明单片机没有连上。连上后再给单片机设置熔丝位(Fuse),如图4.5所示:图4. 5 设置熔丝位选上EESAVE,去掉CKDIV8,SUT_CKSEL选择图4.5中所示的3.0-8.0MHz的晶振。设置好后运行ICCAVR,在Tools中选择Application Builder,如图4.6所示:图4. 6 ICCAVR运行界面单击Application Builder后出现图4.7所示界面图4.7 单片机设置界面在图4.7所示界面中分别对所用单片机的各个引脚进行设置,对照单片机的各个I/O功能设置其为输入还是输出口,如图4.8所示:图4.8 ATmega128I/O口初始化设置界面如果是作
37、为输出口用则初始化设置为0,作为输入口用则初始化设置为1,不确定的端口可以选或者设置为输出口这样不会影响单片机。定时器可以先不设置,用时在设置。UART要设置,因为要用UART0来与触屏进行数据交换。其它不清楚的可以先不设定。这样就生成了系统的程序框架。其端口初始化子程序如下所示:void port_init(void) PORTA = 0x00; DDRA = 0xFF; PORTB = 0x21; DDRB = 0x27; PORTC = 0x18; /m103 output only DDRC = 0xFF; PORTD = 0x08; DDRD = 0xFA; PORTE = 0x02
38、; DDRE = 0xCE; PORTF = 0x00; DDRF = 0xF2; PORTG = 0x1B; DDRG = 0x1F;在生成好的系统框架中,在头文件中加上slavr.h的头文件,在初始化程序前定义好要用到的宏,例如定义与NAND flash的片选线相连的引脚的宏定义为:#define CS3PC4#define NF_CE(x)if(x=1)PORTC|=BIT(CS3);else PORTC&=BIT(CS3)/x=1,CE为高;x=0,CE为低这样,当程序中想选中flash让其工作时就可以这样写NF_CE(0);其它宏定义不在详述。4.2.3 彩色触摸屏的调试单片机部分正
39、常后,把触屏的外围元器件焊接好,用导线把触屏的电源与信号控制与采集板的对应电源、通讯端口等通过端子接好,图2.12 为触屏端子分配图。接线时信号板上的P3端子中GND、T0、R0分别与图2.12中的GND、R、T相连5V与信号板上的数字电源+5V相连。通上电后发现触屏一直闪频率很快,用万用表测试未发现原因,但经对电路板的PCB图分析,可能是因为电源的线太细的原因(+5V电源线上的电流在800多毫安),PCB中的线宽为10mil,这可能太细。于是把触屏的电源线直接接到电路板中的P1端子的+5V电源上(P1是电源端子,板子上的电就是由这引入的),再上电后触屏就亮了。程序中通过UART0实现单片机与
40、触屏的通讯。连接好后上电,触屏亮,说明电源连接正确了,在程序中编写了取屏幕上坐标值的小程序来测试通讯,结果不管点击屏上的那里,都没有返回值信息,检查线路和程序没错后怀疑触屏有问题,经过电话询问厂家得知屏幕背面有一个屏幕返回值指示灯(D1A,亮时为绿色,在屏幕背面靠近晶振的地方),如果点击屏上任何位置,该指示灯都会亮。结果调试发现该灯通上电后一直亮,说明屏上一直有东西压着导致指示灯常亮。最后发现是由于固定触屏的铁框压的太紧所导致的,把屏幕上的贴膜从铁框中拿出后再调试,单击屏幕,程序中就有返回值了。在程序编写时需要特别注意的是:LJD-ZU070T触屏(TFT真彩7寸)显示屏上的坐标值是以BCD码
41、(十进制)格式发送或者接收的,而且彩屏的屏幕为800x480的,所以在程序中设置的坐标变量pos_x,pos_y应为无符号整型的全局变量。如果触屏上的(200,300)点在程序中读回来显示的值应该为0x0200,0x0300,即:在设计软件时把BCD码当作十六进制直接处理,不需要转换。要是向屏上(578,321)点发送信息,程序中就应该送0x0578,0x0321,否则程序中坐标值会先转换成十六进制数据(242,141)再发送到触屏上。如果发送接收数据是通过中断进行的,那么,在程序中两个发送或接受的数据之间要加延时子程序,延时长短由发送或接收的数据长度而定,一般一个字节1ms。发送接收数据程序
42、中是通过URAT0实现的。其子程序如下所示:void uart0_init(void) UCSR0B = 0x00; /disable while setting baud rate UCSR0A = 0x00; UCSR0C = 0x06; UBRR0L = 0x2F; /set baud rate lo UBRR0H = 0x00; /set baud rate hi UCSR0B = 0x98;#pragma interrupt_handler uart0_rx_isr:19void uart0_rx_isr(void)unsigned char i,temp1,temp2;temp1=
43、UDR0;for(i=0;ireceiPC_len-1;i+)temp2=receive_buffi+1;receive_buffi=temp2;receive_buffreceiPC_len-1=temp1;if(receive_buff0=0xF0)&(receive_buff1=0x5A)&(receive_buff2=0x37)&(receive_buff8=0xA5)&(receive_buff9=0xF0)pos_x=(int)receive_buff38)+receive_buff4;pos_y=(int)receive_buff58)+receive_buff6;/取屏幕上某点
44、的坐标值NOP();使用触屏时需要考虑到屏幕的分辨率,所用触屏为800x480的,其像素为800*480,即横向有800个像素点,横向有480个像素点。在它上面显示点或者曲线等等都是基于点的,也就是说如果要画一条直线首先要考虑直线的起点(x0,y0)和终点(x1,y1)的距离,计算一下x0- x1的绝对值x和y0- y1的绝对值y之间的数量关系。如果要以(100,100)为起点(200,150)为终点画一条直线,在屏上显示的就不是一条直线段了,而是由50个点组成的点直线,如:“.”。x=0或y=0时,不管怎样都会是直线;x!=0且y!=0时,只要x!=y,所画出来的直线都会是由x个或y个点组成
45、的点线(具体点数由x、y中较小的决定)。只有当画的曲线为水平的、铅直的或者45角时才会是平滑的曲线。4.2.4 flash的调试焊接flash时,用的焊锡丝要细一些(0.3mm)因为所用的flash为K9F1208U0C是48引脚,间距为0.5mm的双列表贴式的芯片,如果焊锡丝太粗在焊接过程中很容易把相邻引脚短上。焊好flash后,在程序中编写读flash ID的程序来验证芯片与单片机的通讯。由于所用单片机为ATmega128,所以单片机内部没有与NAND flash 相关的控制寄存器,因此需要用软件模拟控制时序来对flash进行读、写、擦除等操作。K9F1208U0C型的NAND flash
46、中被分为4096个块(block),每一个块中包含32个页(page),一页包含528字节,即:1 片K9F1208U0C型NAND flash=4096block;1block=32page;1page=528B=512B(data field) + 16B(spare field);对于flash的读写都是以page开始的,但是在读写之前必须进行flash的擦写操作,flash的擦写是以block为单位进行的。因此形成了三类地址:Column Address(列地址,地址的A7:0位)、Page Address(页地址,地址的A16:9位)、Block Address(块地址,地址的A25
47、:17位),即26位的地址。而NAND flash只有8个I/O,所以这8个引脚就作为地址、数据、命令的复用端口,因此传递地址时只能传递8位,所以每读写一次NAND flash需要传送4次(A7:0、 A16:9 、A24:17 、A25)。NAND flash的一页有528B,在每一页中,最后16个字节(OOB)用于NAND flash执行完命令后设置状态用,剩余的512B又分为前半部(1st half Page Register)和后半部(2nd half Page Register)。程序中可以通过NAND flash命令对1st half和2nd half以及OOB进行定位。通过NAND flash内置的指针指向各自的首地址。编程时不需要考虑A8这位,因为读写数据是通过命令00h、01h或50h来指定访问的是1st half page、2nd half page还是spare field。用于传递Column Address的数据线有8条(I/O0I/O7,对应A0A7),如果要访问的地址为前256B时通过命令00h就会指向1st half page,但当访问地址为后25