版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、模块化工业通用控制器设计报告专 业: 控制理论与控制工程 班 级: 研20105班 姓 名: 孙 彤 学 号: 201002193 指导教师: 赵 建 敏 2011年5月20日32目录第一章 引言11.1 课题意义11.2 本次实训任务2第2章方案论证32.1 总体设计32.2 微控制器的选择3第3章. 硬件电路的设计53.1 CPU 模块介绍53.2 ADC 模块介绍53.3 GPIO 模块的介绍63.4 LCD显示模块的设计63.5 通信电路的设计83.6 JTAG下载电路的设计9第4章. 软件系统设计114.1 开发环境的简介114.2 UCOS/II嵌入式操作系统114.3 CPU模块
2、的软件设计124.4 ADC采集模块的设计144.5 LCD显示模块的设计174.5.1 uC_GUI概述174.5.2 LCD显示模块软件设计184.6 I/O模块设计224.7 各模块之间的通讯设计23第5章 总结26附录一:LCD运行图29附录二:系统运行图:30附录三:31 第一章 引言1.1 课题意义随着现代科技的发展, 工业控制器在工业生产的各领域发挥着越来越重要的作用。工业自动化的高速发展,生产规模的日益扩大,全球化生产的日益融合,对工业控制器提出了更高要求,如微型化、便携化、智能化、网络化等。目前,用于工业控制的控制器主要分为两种,即:工业控制机和可编程控制器(PLC)。工业控
3、制机是由通用的微机推广应用而发展起来的。近几年来,微电子技术和计算机技术的发展,使微控制器集成度越来越高,计算速度越来越快,价格和功耗越来越低。因此不论是工业控制机技术还是可编程控制器(PLC)技术向嵌入式领域渗透的步伐正在逐渐加大。嵌入式系统因极小的体积、极低的功耗散热和软硬件的可裁剪性,而深受用户的欢迎。可以预见,基于嵌入式系统的工业控制器必将具有广阔的发展空间。目前,在大型的工业控制系统中主要采用PLC、DCS等控制设备, 它们采用模块化设计功能强大、设计灵活、性能稳定, 可以很好的满足控制需求。但是在小型控制系统中主要还是采用数字仪表来对系统进行控制, 它在控制精度和速度上都难以满足现
4、代工业控制的要求。而目前在各个领域广泛应用的嵌入式系统具有功耗低、体积小、集成度高、成本低、稳定性好等特点, 如果设计一种嵌入式工业控制器, 采用模块化设计的方法, 结合模块化的灵活性和嵌入式系统的高效、稳定特性。它可以测量多种信号, 有较高的测量精度和多种测量范围并且能够对信号进行各种复杂的处理、运算控制。另外还可以设计一个良好的人机界面以方便用户对信号组态控制、监测的功能, 使控制器更加满足现代工业控制的要求。半导体技术的迅猛发展,使控制器的设计从模拟化走向数字化。如果控制器由数字化再发展到模块化, 即以模块控制器取代众多各厂家自己开发的控制器; 那么各个厂家就可以利用现成单元电路模块组装
5、成自己所需要的产品, 这样就可以最大限度地以减少制造成本和开发时间。因此模块化控制器应该有独立可拆分的功能和典型结构,具有组合性和通用性。既易于组合成新系统、新产品, 升级方式简捷; 也容易从系统或产品中拆卸、更换, 维修方便; 总之模块工业控制器典型、通用、互换、兼容。在此思想和热网工控检测的背景前提下,鉴于对现场温度压力和水箱液位的检测和控制,本实训要求学生从单片机系统的软硬件设计出发,学习基于STM32单片机的软硬件设计方法。不采用现成的PLC实现顺序控制,而是从最底层用单片机设计实现一个模块化的工业控制器。力求做出一个成本比PLC低,逻辑针对性高,智能化高,专业实现的功能要比PLC多,
6、安全性可靠性高、通讯组态模式先进等特点。此工业模块控制器可以应用于工业控制领域,例如过程控制系统、远程控制系统等,也可用于简单顺序控制系统。除了工业控制以外,还可应用到消费电子和民用领域(如手持数据采集终端、各类网关、智能家居等)。1.2 本次实训任务1.设计一个基于stm32单片机的工业控制系统,系统采用分模块的设计思想,包括CPU与显示模块、AD采集模块、IO与DA模块,模块之间采用RS-485总线连接,通信协议采用modbus一主多从协议。2.完成硬件设计,以STM32为核心控制器完成CPU与显示模块、AD采集模块、IO与DA模块的硬件设计。每个模块设计RS-485通信接口。3.软件设计
7、: 基于UCOS/II操作系统,划分任务,编写驱动程序和控制程序,最终实现一个演示系统,采集4路温度信号、4路压力信号,4路开关量信号,并在CPU与显示模块显示实时数据。第2章方案论证2.1 总体设计本实训设计一个基于STM32单片机的模块化工业控制器,采用分模块的设计思想,将整个工业控制器分成几个模块,形成自己的小单元电路,包括CPU控制模块、AD采集模块、I/O模块,LCD显示模块、各模块在uC/COS嵌入式操作系统的界面下完成各模块功能的实现,各模块之间采用RS-485总线连接,通信协议采用modbus一主多从协议。为了实现对温度、压力、流量、液位等的精确测量、显示, 同时输出人工智能或
8、位式开关控制信号, 对被测量对象进行有效的正作用或反作用控制, 我们利用从最底层用单片机着手,设计了模块化工业控制器。 分别从系统的硬件结构和软件设计思路做起,完成了模块化工业控制器的完整系统的设计。系统的整体框图如下:图2-1 系统的整体框图2.2 微控制器的选择目前,世界上生产的各类单片机有1000多种,按字长可分为4位、8位、16位、32位以及64位等,我们国家目前流行的单片机主要有以下几个系列:1.ST公司生产的STM32系列2.Intel公司MCS-51、96系列3.ATMEL公司的AT89C5X、Megat系列4.Microchip公司PIC系列5.PHILIPS公司的P89C5x
9、、P80C31、P87C51等6.WINBOND W78E58等 7.TI公司MSP430等 通过小组讨论有以下几组方案可以考虑:方案一:80C31是Intel公司MCS-51系列单片机中最基本的产品,内置CPU、128字节内部数据存储器(RAM)、32个双向输入/输出(I/O)口、2个16位定时/计数器和5个中断源、两级中断结构、一个全双工的串行通信接口UART、片内时钟振荡电路等。但是80C31片内无程序存储器;不能够完全满足题目的各项要求,因此系统不采用该型号的单片机。方案二:用ST公司生产的STM32系列单片机。STM32F103xx增强型系列使用高性能的ARM Cortex-M3 3
10、2位的RISC内核,工作频率为72MHz,内置高速存储器(高达128K字节的闪存和20K字节的SRAM),丰富的增强I/O端口和联接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN。 STM32芯片虽然有如此强大的功能,但是价格并不贵,所以非常适合本系统使用,故本系统的控制芯片采用STM32芯片第3章. 硬件电路的设计任何系统都要求软硬件的密切配合,硬件可以增加系统软件的稳定性和灵活性,软件可以降低硬件的成本,两者是相辅相成的。3.1 CPU 模块介
11、绍STM32是来自于ARM公司具有突破性的Cortex-M3内核的32位闪存微控制器。该内核是专门设计于满足集高性能、低功耗、实时应用、具有竞争性价格于一体的嵌入式领域的要求。STM32的出现给MCU用户前所未有的自由空间,提供了全新的32位产品选项,结合了高性能、实时、低功耗、低电压等特性,同时保持了高集成度和易于开发的优势,再加上丰富的外设和有竞争力的价格,得到了市场上高度的认可,使得它成为众多商家的第一选择。STM32有两个系列增强型和基本型。STM32F103是增强型系列,工作在72 MHz,带有片内RAM和丰富的外设。STM32F101是基本型系列,工作在36 MHz。两个系列的产品
12、拥有相同的片内闪存选项,在软件和引脚封装方面兼容。均可以用于显示、声音、存储和高级控制;兼有低功耗和多种省电工作模式,能够优化工业设备、物业控制设备、医疗设备和计算机外设等产品的性能。本实训设计选用的STM32F103ZE类型的微处理器芯片,主要进行接受ADC模块采集的8路温度数据并进标度变化、接受I/O模块采集的8路数字量数据并且发送处理完的数据给LCD显示模块,并且让其进行显示。STM32F103ZE微处理器的内部结构图如图3-1所示3.2 ADC 模块介绍模拟/数字转换器(ADC)是一种提供可选择多通道输入,逐次逼近型的模数转换器。分辨率为12位。本实训设计的ADC模块的硬件选用的是ST
13、M32F103ZE单片机的内部资源,STM32内部有3个ADC,每个ADC是12 位的逐次逼近型模拟数字转换器。它有18 个通道,可测16 个外部和2 个内部信号源。各通道的A/D 转换可以单次、连续、扫描或间断模式执。ADC的结果可由转换完成中断处理或由DMA存储,通道的转换可以单次、连续、扫描或间断模式执行,转换结果以左对齐或右对齐方式存储在16位数据寄存器中。通道采样时间可编程,总转化时间可缩减到1us,此外,多种转换模式供选择,支持DMA数据传输。直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU 任何干预,通过DMA 数据可以快速地移动,这就节C
14、PU 的资源来做其他操作。图3-1 STM32F103ZE内部结构图3.3 GPIO 模块的介绍本实训设计的GPIO模块的硬件选用的是STM32F103ZE单片机的内部资源,多达80个快速I/O口,26/37/51/80个多功能双向5V兼容的I/O口,所有I/O口可以映像到16个外部中断。每个GPIO管脚都可以由软件配置成输出(推拉或开路)、输入(带或不带上拉或下拉)或其它的外设功能口。多数GPIO管脚都与数字或模拟的外设共用。所有的GPIO管脚都有大电流通过能力。 在需要的情况下,I/O管脚的外设功能可以通过一个特定的操作锁定,以避免意外的写入I/O寄存器。 在APB2上的I/O脚可达18M
15、Hz的翻转速度。3.4 LCD显示模块的设计LCD显示屏以其低功耗,具有字符和点阵显示功能,已广泛用于便捷式仪器,越来越多的应用到了各个领域。很多微控制器电路芯片内集成有LCD控制器,可以直接驱动LCD显示,运算结果数据通过CPU处理转换后写入显示寄存器中,最后送到显示驱动单元输出。不同的MCU母体来实现显示数据的产生方式各不相同。利用LCD可以构建一个非常友好的人机交互界面。FSMC(Flexible Static Memory Controller,可变静态存储控制器)是STM32系列中内部集成256 KB以上FlaSh,后缀为xC、xD和xE的高存储密度微控制器特有的存储控制机制。之所以
16、称为“可变”,是由于通过对特殊功能寄存器的设置,FSMC能够根据不同的外部存储器类型,发出相应的数据地址控制信号类型以匹配信号的速度,从而使得STM32系列微控制器不仅能够应用各种不同类型、不同速度的外部静态存储器,而且能够在不增加外部器件的情况下同时扩展多种不同类型的静态存储器,满足系统设计对存储容量、产品体积以及成本的综合要求。利用FSMC来驱动LCD可以保证数据的传输速度。本系统设计的LCD显示模块采用的ILI9320液晶显示,ILI9320是手机常用的彩屏控制器,采用16bit并行总线方式,端口映射到DSP的IO空间,彩屏具有4个背光LED灯(控制端为LED1LED4),采用三极管90
17、12链接共阳极LEDA,是背光受控于DSP的PE3脚,若一段时间内未触摸屏幕,控制PE3脚为高,是背光熄灭,降低系统功耗,彩屏与4线电阻式触摸屏紧贴在一起。本系统使用的LCD具有触摸功能,触摸屏控制芯片为ADS7483,。ADS7843是一个内置12位模数转换、低导通电阻模拟开关的串行接口芯片。供电电压2.75 V,参考电压VREF为1 V+VCC,转换电压的输入范围为0 VREF,最高转换速率为125 kHz。ADS7843的引脚如图3-2所示:图3-2 ADS7843引脚图ADS7843是一款连续近记录(SAR)的A/D转换器,本实训设计中通过连接触摸屏X+将触摸信号输入到A/D转换器,同
18、时打开Y+和Y-驱动,然后数字化X+的电压,从而得到当前Y位置的测量结果,同理也得到x方向的坐标。具体外设电路如下:图3-3 触摸屏接口的电路图3.5 通信电路的设计随着现代工业的发展, 对工业设备的控制逐步从单一独立系统向集散控制监控系统发展。Modbus 协议的物理层一般都采用RS- 485 半双工结构作为通信接口标准。RS-485是串行数据接口标准,由电子工业协会(EIA)1983年在RS-422基础上制定并发布了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围。在通信距离为几十米到上千米时,RS
19、-485收发器被广泛使用。RS-485收发器采用平衡发送和差分接收,因此具有抑制共模干扰的能力,加上接收器具有高的灵敏度,能检测低达200mV的电压,故传输信号能在千米以外得到恢复。使用RS-485总线,一对双绞线就能实现多站联网,构成分布式系统。标准Modbus端口是使用一个RS-485的串行接口,定义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或通过调制解调器(以后简称Modems)接入总线(网络)。本实训的各模块之间的通讯采用RS-485,由于要把单片机的逻辑电平经过光耦6N137 隔离后转换成485 差分信号在总线上传输, 于是采用TI 公司的SN75LBC184
20、 RS- 485收发器,这是一种具有瞬变电压抑制的收发器,可以防止因静电放电(ESD)对收发器造成的损坏。RS485接口电路图如图3-4:图3-4 RS485 接口电路图3.6 JTAG下载电路的设计JTAG也是一种国际标准测试协议(IEEE 1149.1兼容),主要用于芯片内部测试。现在多数的高级器件都支持JTAG协议,如DSP、FPGA、单片机器件等。标准的JTAG接口是4线:TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。本系统的JTAG调试单元电路如图3-5所示:图3-5 JTAG接口电路设计中相关JTAG引脚的定义为:TCK为测试时钟输入;TDI为测试数据
21、输入,数据通过TDI引脚输入JTAG接口;TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;TRST为测试复位,输入引脚,低电平有效。JTAG是一种所谓的边界扫描技术。边扫描测试是在20世纪80年代中期作为解决PCB物理访问问题的JTAG接口发展起来的,这样的问题是新的封装技术导致电路板装配日益拥挤所产生的。边界扫描在芯片级层次上嵌入测试电路,以形成全面的电路板级测试协议。利用边界扫描自1990年以来的行业标准IEEE 1149.1您甚至能够对最复杂的装配进行测试、调试和在系统设备编程,并且诊断出硬件问题。 边界
22、扫描的优点: 通过提供对扫描链的IO的访问,可以消除或极大地减少对电路板上物理测试点的需要,这就会显著节约成本,因为电路板布局更简单、测试夹具更廉价、电路中的测试系统耗时更少、标准接口的使用增加、上市时间更快。除了可以进行电路板测试之外,边界扫描允许在PCB贴片之后,在电路板上对几乎所有类型的CPLD和闪存进行编程,无论尺寸或封装类型如何。在系统编程可通过降低设备处理、简化库存管理和在电路板生产线上集成编程步骤来节约成本并提高产量。 第4章. 软件系统设计4.1 开发环境的简介本实训软件的开发环境使用的是RealView MDK(Keil uv3)软件,Keil 是ARM公司出品的单片机c语言
23、软件开发环境,与汇编相比,c语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。其包括简单易用的入门套件,完整的开发工具方案,编程工具以及嵌入式操作系统。比如说,包括STM32固件库、USB开发工具集、STM32电机矢量控制固件库等,为我们本次实训软件的编程提供了极大的方便。4.2 UCOS/II嵌入式操作系统C/OS-II是一个实时操作系统内核,是一个源代码公开的实时嵌入式内核,包含了任务调度、任务管理、时间管理、简单内存管理和任务间的通信与同步等实时系统所需的基本功能。没有提供输入输出管理、文件系统和网络之类的额外服务。但是由于C/OS-II的可移植性和开放性,用户可以自己
24、的实际应用添加所需的模块。C/OS-II是一个抢占式实时操作系统,即已经准备就绪的高优先级任务可以剥夺正在运行的低优先级任务的CPU使用权。这个特点使得它的实时性比非占先式的内核要好。另外内核的实现都仔细考虑了运行时间的确定性问题,任务调度、任务间通信和内存分配都是采用执行时间确定的设计,不会因为任务数变化、顺序变化等出现执行时间的差异。C/OS-II结构的关系如下图所示:图4-1 C/OS-II结构的关系图从图中可以看出, C/OS-II软件主要有这四大部分构成,在移植过程中,我们需要修改的是与处理器有关的代码(驱动部分)部分和与C/OS-II配置应用相关代码,还有就是用户自己编写的程序代码
25、。至于C/OS-II内核的源代码(与处理器无关的源代码)部分,我们一般不用去修改,在移植过程中将其添加到相应的工程文件中直接使用就可以了。实际上对于C/OS-II的移植主要与4个文件相关,这4个文件是与处理器密切相关的:汇编文件(OS_CPU_A.ASM)、处理器相关C文件(OS_CPU.H、OS_CPU.C)和应用程序相关的配置文件(OS_CFG.H)。具体如下:a、修改“include.h”文件该头文件是一个主头文件,会出现在每一个.C文件中,通过修改它,增加自己的头文件。b、修改“os_cfg.h”文件此文件包含空闲任务的堆栈长度、消息队列、邮箱、信号量等的设置,通过修改此文件进行对操作
26、系统裁剪。c、修改头文件“OS_CPUH ”头文件“OS_CPUH”包括了用#define语句定义的、与处理器相关的常数、宏以及类型,需要修改的内容有与编译器相关的数据类型重定义部分和与处理器相关的少量代码。d、修改C语言文件OS_CPUC文件OS_CPUC中有10个C语言函数需要编写,这些函数中唯一必要的函数是OSTaskStkInit,其他9个函数必须声明,但不一定要包含任何代码 。e、修改汇编语言文件OS_CPU_AASM汇编文件OS_CPU_A.ASM中需要编写的函数分别为OSStartHighRdy、OSCtxSw、OSIntCtxSw和OSTickISR。总之,C/OS-II是一个
27、完整的、可移植、固化、裁减的占先式实时多任务内核。C/OS-II可供不同的微处理器使用,可以移植到8位到64位不同的微处理器上。它的基本思路就是“近似地每时每刻总是让优先级最高的就绪任务处于运行状态”。C/OS-II是一个通用性的操作系统,所以对于不同硬件的实现,只需要根据具体CPU和实际应用做相应的移植即可。4.3 CPU模块的软件设计CPU模块上电之后先会对芯片的内部资源进行初始化,之后进入操作系统,进行任务之间的调度。CPU模块的初始化程序流程图如图4-2所示:图4-2 CPU模块初始化程序流程图本设计的CPU模块在Modbus总线中为主机,所以CPU会隔一段时间对其它从机进行轮询,并把
28、接收到的ADC模块采集的8路温度压力数据并进标度变换、接收I/O模块采集的8路数字量数据,然后将这些数据进行打包组帧发送给LCD显示模块,已让其进行显示。根据以上功能,在操作系统中我们把其分为AppTaskPoll任务和AppTaskAnalyze任务。AppTaskPoll任务主要负责发送轮询命令,而AppTaskAnalyze任务主要负责解析从机发来的数据包。AppTaskPoll任务的流程图如图4-3所示:图4-3 AppTaskPoll任务的流程图从流程图中可以看出,CPU模块在上电之后就会发送轮询命令,先询问Addr1设备(AD模块),Addr1设备响应命令,将采集到的数据发送给CP
29、U模块。当CPU模块接收到Addr2设备的响应之后就会轮询Addr2设备(IO模块)。当CUP模块接收到Addr3设备的响应之后就会轮询Addr3设备(LCD模块)。图4-4 AppTaskAnalyze任务流程图4.4 ADC采集模块的设计实训设计的ADC模块负责检测采集现场的模拟信号量(例如温度、压力等),通过DMA(直接存储器存储)传输,之后等待CPU的查询。一旦收到CPU的查询命令,就将采集到的现场模拟信号量通过RS485总线传输给CPU,然后接着去采集现场信息,等待CPU的下一次查询。在ADC的通道配置中,首先选择ADC的堆砌方式为右对齐,刚开始可以先配置一个通道,通道数量设置为1,
30、初始化ADC,然后使能DMA,(DMA的具体配置下述将详细分析),以及外部中断等个其他配置,然后导线连接信号发生器已输入电压信号进行测试,让其采集,若采集成功,则扩展成8路通道,并且选择STM32的ADC采集的管脚PC14等管脚进一步进行测试。ADC采集到的数据是不能直接用的。即使你再小心的设计外围电路,测的离谱的数据总会出现。那么通常来说,是采集一批数据,然后进行处理,这个过程就是软件滤波。DMA用到这里就很合适,让ADC高速采集,把数据填充到RAM中,填充一定数量,比如32个,64个MCU再来使用。系统设计DMA的配置:DMA 定义存储器和外设的基地址,及转换通道。串口发送函数:将处理后的
31、数据利用串行口发送。接收中断函数:利用串行口接收外来数据,并采用中断的方式进行接收。图4-5 ADC模块的配置子流程图主程序主要负责对于系统时钟、GPIO口、嵌套中断的配置以及定时器、ADC和串行通信模块的初始化、采集任务的创建和数据的发送。图4-6 ADC的程序流程图在一切配置成功之后,移植Uc/COS操作系统,在Uc/COS操作系统的界面下,主要完成AppTaskAnalyze任务和AppTaskMBTx任务两个任务。如图4-6所示,在AppTaskMBTx中调用TransmitFrame()函数。图4-7 发送任务子程序流程图TransmitFrame()函数下设置为:TxBuffp=(
32、u8)(ADC_Valuet>>8)&0xff);TxBuffp+1=(u8)(ADC_Valuet&0xff);把从外部采集并且存放在之前设置的ADC的数组中的信号传递于TxBuffp+1,逐步向下,逐个采集。如果请求帧发送正确,则由串口发送数据,之后设置 SENDCOM=1,以表示出发送完成标志位置位。如图4-8在接受到CPU发送过来的数据信息后,首先进行数据解析,即本程序中的AppTaskMBTx任务,在该任务中调用Frame_Analyze()函数,Frame_Analyze()函数的功能是通过以下指令:CRC_CAL=CRC16(RxBuff,22); C
33、RC_FRAME=RxBuff22|(RxBuff23<<8);使计算机收到数据CRC,进而判断主机发送的地址以及功能码,若分析出是发给ADC模块的数据信息后,则接受指令,从机ADC发送数据,完成整个任务。 图4-8 帧解析任务子程序图4.5 LCD显示模块的设计4.5.1 uC_GUI概述 uC/GUI是Micrium公司研发的图像界面软件。是一种嵌入式应用中的图形支持系统. uC/GUI适用于任意LCD控制器和CPU下任何尺寸的真实显示或虚拟显示.它的设计架构是模块化的, 由不同的模块中的不同层组成, 由一个LCD驱动层来包含所有对LCD的具体图形操作, UCGUI可以在任何的
34、CPU上运行, 因为它是100%的标准C代码编写的. uC_GUI很适合大多数的使用黑色/白色和彩色。硬件操作层直接对LCD操作,不同的系统需要根据LCD的控制器作相应的移植。LCD驱动层是测试驱动层程序最主要的层面,它利用硬件操作层来实现最基本的绘图函数。UCGUI系统层实现了复杂绘图层函数的封装,解决了绘图中出现的大部分问题,并给用户提供API接口。用户层利用UCGUI的上层API实现系统的图形界面。UCGUI能够适应大多数的使用黑白或彩色LCD的应用, 它提供非常好的允许处理灰度的颜色管理.还提供一个可扩展的2D图形库及占用极少RAM的窗口管理体系。UCGUI的内部模块结构图为:图4-9
35、 UCGUI的内部模块结构图 4.5.2 LCD显示模块软件设计 在该实训的LCD模块的软件设计中,在MDK环境下我们首先是在裸机的状态下去完成数据的显示,首先是添加了LCD_drive file,在此文件中创建支持ILI9320的驱动IC控制程序LCD.c以及随其的配置头文件LCD.h,使用16位并行传输。在LCD.c文件中对LCD进行各种必要配置,(GPIO配置和LCD所要进行的背景颜色、汉字显示、图片显示等的写函数)。在LCD.h中主要是定义驱动IC是ILI9320并且声明与硬件相关的子函数,以及作了Lcd初始化:void Lcd_Initialize(void);及其低级控制函数: v
36、oid Lcd_Initialize(void); void LCD_WR_REG(u16 Index,u16 CongfigTemp);void Lcd_WR_Start(void);Lcd高级控制函数: void Lcd_SetCursor(u8 x,u16 y);void Lcd_Clear(u16 Color); 的声明定义。在main.c中调用各种数字、汉字和图片的显示函数,以完成显示功能。程序流程图如下:图4-10裸机状态下LCD显示程序流程图其中设置一个像素和获取一个像素的颜色两个函数很重要,因为在下述的移植uC_GUI操作系统时, UC_GUI和编写好的TFT驱动关联起来时需要
37、这两个函数为前提。void LCD_SetPixel(unsigned short x, unsigned short y, unsigned short color) ; unsigned short LCD_GetPixel(unsigned short x, unsigned short y) ; 然后进行测试。在显示成功后,则将C/OS-II和uC_GUI嵌入式操作系统移植于TFT底层驱动程序。uC_GUI的移植步骤: 第一步:首先,上述的TFT底层驱动写好,既在裸机下,可以正常显示。 第二步:加入uC_GUI程序包。 第三步:配置LCDConf.h GUIConf.h GUITouc
38、hConf.h(由于我的液晶不带触摸功能,此配置在此不讲。) 具体配置参照附录3第四步:最关键的一步,那就是让GUI能够找到LCD驱动。接下来需要修改TFT与UCGUI关联的函数ili9320_ucgui.c ,int LCD_L0_Init(void) TFT_Init(); return 0; 这个函数,是GC_GUI初始化TFT需要调用的,里面的函数就是你TFT底层驱动的初始化函数。 void LCD_L0_SetPixelIndex(int x, int y, int PixelIndex) LCD_SetPixe
39、l(x,y,PixelIndex); unsigned int LCD_L0_GetPixelIndex(int x, int y) return LCD_GetPixel(x,y); 上面两个函数是其他函数的最基本元素,其他函数比如画线、点、圆都需要调用改函数。里面的LCD_SetPixel(x,y,PixelIndex)、LCD_GetPixel(x,y);就是TFT底层驱动设置像素和获取像素的两个函数。紧接着把该ili9320_ucgui.c文件下其他函数修改一下(凡是遇到设置像素和获取像素的地方用以上两个函数代替。) 接着,修改另一个C文件(ili9320_api.c)这里
40、修改很简单,仅仅也是将设置像素和获取像素的函数替换掉自己定义的即可。最后连接GC_GUI的各种文件和库函数的路径。在移植检测成功后,编写app.c文件的程序。LCD显示模块程序流程图如下:图4-11 操作系统下的LCD程序流程图在app.c文件中首先设置触摸屏的所有控件,获得所有控件的窗口句柄并且将其初始化,寻找控件的ID,然后以此语句NCode=pMsg->Data.v;来通知代码。接下来在main函数中完成个任务的创建和实现,如上图4-11,此实训设计在LCD显示模块中首先创建了一个主任务,在此任务中嵌套了3个主要功能任务,主要是AppTaskMB发送任务、AppTaskDispla
41、y显示任务和AppTaskTouch触摸任务。AppTaskDisplay任务主要负责驱动LCD显示屏,在显示任务中调用LCD_Display();以此来完成各种背景颜色、汉字颜色、汉字内容等的功能任务;在AppTaskMB发送任务中和ADC模块的从机接受主机指令类似,如下图4-12调用了Frame_Analyze()函数和TransmitFrame()函数来完成帧解析和请求帧发送等任务,进而将AD的值和I/O的值完成在LCD屏的整个显示。图4-12 AppTaskMB任务子序流程图最后一个是AppTaskTouch任务,因为本系统采用触摸屏技术,所以该任务主要负责采集触摸屏信号。其程序流程图
42、如图4-10所示:图4-13 AppTaskTouch任务程序流程图4.6 I/O模块设计在本实训设计中,I/O模块的主要功能就是采集水箱的液位数据,然后发送给CPU模块,I/O模块主要是负责数字量的采集,读取特定管脚的高低电平状态,将其存储在一个缓冲区内,待CPU查询的时候,将数据打包发给CPU。I/O模块的配置流程图同ADC模块流程图类似。图4-14 程序流程图根据功能需要,IO模块的操作系统分为三个任务:AppTaskCollect 任务、 AppTask Analyze任务和AppTaskMBTx任务。AppTaskCollect 任务主要负责采集特定I/O口的状态。程序流程图如图4-
43、14所示:图4-15 AppTaskCollect 任务流程图AppTaskAnalyze任务主要负责对从串口接收的数据帧进行解析,其程序流程图如图4-8所示。AppTaskMBTx任务主要是根据AppTaskAnalyze任务返回的状态来确定,是否发送正确地响应帧。其程序流程图如图4-7所示。4.7 各模块之间的通讯设计本实训使用RS-485总线,一对双绞线就能实现多站联网,构成分布式系统。标准Modbus端口是使用一个RS-485的串行接口,定义了连接器,接线电缆,信号等级,传输波特率,和奇偶校验,控制器可直接或通过调制解调器(以后简称Modems)接入总线(网络)。CPU模块(主机)可对
44、各从机寻址,发出广播信息,从机返回信息作为对查询的响应。从机对于主机的广播查询,无响应返回Modbus协议报据设备地址,请求功能代码,发送数据,错误校验码,建立了主机查询格式,从机的响应信息也用Modbus协议组织,它包括确认动作的代码,返回数据和错误校验码。若在接收信息时出现一个错误或从机不能执行要求的动作时,从机会组织一个错误信息,并向主机发送作为响应。主从查询响应周期如下图所示:图4-16主从查询响应周期图本实训系统设计中控制器通讯使用主从技术,即CPU模块(主机)能起动数据传输,称查询。而其它设备如ADC模块、LCD显示模块或I/O模块(从机)应返回对查询作出的响应,或处理查询所要求的
45、动作。从流程图中可以看出,CPU模块在上电之后就会发送轮询命令,先询问Addr1设备(AD模块),Addr1设备响应命令,将采集到的数据发送给CPU模块,CPU轮询Addr1设备的命令帧格式如图4-17所示:图4-17 CPU轮询Addr1设备的命令帧格式当CPU模块接收到Addr2设备的响应之后就会轮询Addr2设备(IO模块),帧格式如图4-18所示:图4-18 CPU轮询Addr2设备的命令帧格式当CPU模块接收到Addr3设备的响应之后就会轮询Addr3设备(LCD模块),帧格式如图4-19所示:图4-19 CPU轮询Addr3设备的命令帧格式AD模块响应轮询命令的帧格式如图4-20示
46、:图4-20 AD模块响应轮询命令的帧格式I/O模块的响应帧格式如图4-21所示:图4-21 I/O模块的响应帧格式第5章 总结在本次实训中学习到了很多以前没有接触过的知识,比如Modbus通信协议,uC/OS II操作系统,uCGUI图形用户界面等等,而且在学习这些知识的同时也培养了我们搜索文献的能力,可以通过各种渠道去获得对自己有用的信息。通过这次实训,明白了要多了解了相关知识,读思考,多提问题,多问几个为什么,要学以致用,生活、工作的资源消耗大为降低。我们是新一代的人用的都是高科技,也随着现在的社会日新月异,高科技的,需要老师掌握一定的计算机知识,才能更好的帮助我们。不过有时也要动我们的
47、脑子,要个人亲身去体会 ,去实践,把各项命令的位置,功能,用法记熟,做熟。提高我们整体的知识,打好基础在此次实训中赵老师对我们进行了细心、专业的指导和培养,在每周的工作指导中,我们汇报每周自己的工作进度,并提出工作中的问题和想法,老师和我们一起讨论、商量,激发了大家的工作积极性和团结一致解决问题的决心。我相信在更多的学习机会中,我们懂的也会越来越多。不管是现在还是将来每个人应不断地加强学习,不断地给自己“充电”,才能不断的开拓进取,勇于创新,才不至于被社会淘汰。经过几天的学习计算机的过程,我感到了学习的快乐,也尝到了成长的快乐,这就是学习并快乐着吧! 参考文献 1 何利民.单片机应用技术选编(
48、5)M.北京:北京航空航天大学出版社,1997 2 吴焕琅.AVR单片机的全功能工业控制器设计.深圳:深圳市中天越华自动控制科技有限公司. 3 沈清波,蔡立聪.基于ARM9的嵌入式工业控制器设计M 辽宁:辽宁石油化工大学2011. 4 王也仿.可编程控制器应用技术M.北京:机械工业出版社,2004,1. 5 吴学英.单片机直接驱动液晶LCD显示.重庆智能电子,2003. 6 石中宽.可编程程序控制器的现状与发展J.国外电气自动化.1991,(4):2-5.7 黄智全.基于485总线的多机网络数据采集系统的实现.黑龙江:科技信息报. 8 王宾,杨岸基于DSP的触摸式MP3的设计M北京:电子技术应
49、用,2010(7). 9 孙月平,赵德安,曹莉.基于Modbus的智能工业控制器监控系统呢设计J.现场总线技术200例,2008. 10 赵安德主编.单片机原理及应用M.北京:机械工业出版社,2004. 11 汤自春主编.PLC原理及应用技术M.北京:高等教育出版社,2006. 12胡志平.PLC控制系统的控制应用J.矿冶,2004,3(13)72-74. 13 叶瑰昀主编.自动控制元件M.哈尔滨:工程大学出版社,2002.14 张万忠、孙远强、马常霞编著.PLC应用及维修技术M.北京:化工工业出版社,2006. 15 贾至江,孟令军,高世明.基于STM32的无线传感器网络省定位节点的设计与实
50、现 J.传感器与微系统(11). 16 赵连玉,黄庆,陈光明编著.基于嵌入式技术的数字装备通用控制器M.天津:天津工业大学学报,2006. 17 徐飞,邹逢兴. 基于现场总线的通用工业控制器的设计与实现M. 国防科技大学自动控制系. 18 崔天祥,周黎明,王金星,刘思强. 通用LCD显示模块设计M. 自动化技术与应用,2004(7).19 STM32入门系列教程-点亮LCD液晶显示屏,2010 ILI9320, 英文datasheet: 20 赵海,陈长华,王建锋董.微控制器电路LCD显示原理.电子与封装,2009. 21 任哲.嵌入式实时操作系统uCOS-原理及应用.北京:北京航空航天大学出版社. 22 王铁流,李宗方,陈东升.基于SRM32的USB数据采集模块的设计与实现.检测技术,2009(8). 23 Uc_GUI中文手册(3.26版本). 2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027年江西赣江职业学院单招职业技能考试题库完美版附答案详解
- 2026年江西省高职单招职业技能考试模拟试卷含完整答案详解【夺冠】
- 2027年湖南长沙高新职业学院高职单招职业技能考试题库【能力提升】附答案详解
- 2025年唐山海运职业学院高职单招职业技能考试模拟试卷附参考答案详解(巩固)
- 2024年青海青海湖职业学院高职单招职业技能考试模拟试卷附答案详解(B卷)
- 2027年四川绵阳科技城职业学院单招职业技能考试模拟试卷【学生专用】附答案详解
- 2024年山东金乡职业学院单招综合素质考试题库(真题汇编)附答案详解
- 2025年青岛临港职业学院高职单招职业技能考试题库【典型题】附答案详解
- 2026年澧水职业学院单招职业技能考试模拟试卷(培优B卷)附答案详解
- 2027年邛海职业学院高职单招职业技能考试模拟试卷新版附答案详解
- 一元一次方程和分式方程复习教案 人教版
- 脚手架拆除方案报审
- 2024外贸佣金合同中英文版
- 钻孔灌注桩桩头质量缺陷处理方案样本
- 法院送达地址确认书(诉讼类范本)
- 电子束曝光技术专题培训课件
- TDTG5024斗式提升机机座及总体部分设计
- 3%水泥土试验段施工方案
- GB/T 36174-2018金属和合金的腐蚀固溶热处理铝合金的耐晶间腐蚀性的测定
- 第二章常用低压电器基本原理课件
- 肾友会-高磷血症的危害及治疗课件
评论
0/150
提交评论