1、舞台灯光控制器摘要嵌入式系统是当今最热门的概念之一,它诞生于微型计算机,是嵌入到对象系统中,实现嵌入对象智能化的计算机应用系统。本舞台灯光控制器就是嵌入式系统在生活中的一个小小应用,它采用的嵌入式微控制器为LPC2300系列ARM,并使用了实时操作系统C/OS-II。整个系统分为两部分,主控制器和灯光节点。控制器和节点之间的通信使用了主流的舞台灯光控制协议DMX512。控制器设有良好的人机界面,可完成对各节点灯光色彩的编辑,多种现场效果的存储与还原,并设有多个命令,可依据现场气氛的不同制作缤纷的特技效果。节点使用NXP推出的LED驱动芯片PCA9635来驱动4个RGB LED模拟舞台灯光。关键
2、词:舞台灯光控制;DMX512协议;嵌入式系统;C/OS-II目 录1绪论11.1舞台灯光控制技术的发展以及DMX512的产生11.2嵌入式系统概述22硬件电路设计42.1电源部分电路42.2TinyARM T23工控板介绍52.3ISP跳线及核心板复位电路72.4RS232通信电路82.5JTAG接口电路82.6LCD驱动电路设计92.7LED驱动电路设计92.8RS485通信电路112.9从机地址选择电路142.10状态指示灯及按键电路153控制器软件设计163.1整体软件分析与设计163.2键盘扫描程序分析设计183.3人机界面任务193.4DMX512数据发送任务设计253.5数据更新
3、任务284节点软件设计294.1DMX512数据包解析程序294.2PCA9635控制305设计总结35参考文献36致谢37附录A 电路原理图38A.1原理图A38A.2原理图B391 绪论本设计主要研究的是现代嵌入式技术在舞台灯光控制系统中的应用。当今舞台灯光控制系统大都是基于DMX512通信协议的数字控制系统,那么究竟什么是DMX512通信协议?什么是嵌入式系统?1.1 舞台灯光控制技术的发展以及DMX512的产生随着电视事业的不断发展壮大和舞台演出市场的日益活跃,以及人们欣赏水平的不断提高,舞台设计越来越受到专业人士的重视。而舞台灯光作为舞台设计的一部分在很大程度上影响着整个现场的效果,
4、这使得现代舞台灯光系统设计变得越来越复杂,舞台灯光控制技术也应运而生。回顾舞台灯光控制技术的发展历程,大体可以分为三个阶段:原始控制技术阶段;模拟控制技术阶段;数字化控制技术阶段。最初的原始控制技术时期,舞台灯光的控制相当麻烦。演出过程中,在舞台四周布满大大小小的各式各样的用手动控制开关,每一盏灯需要一个开关,并且还要铺设大量的灯线,其工作量是可想而知的。受控的灯具也只有亮灭两种状态,根本不可能调光,提供的纯粹是单纯的照明。这样的光灯控制系统是很难顾及到舞台的艺术效果的。随着自动化技术,电子技术和半导体技术的应用,把可控硅技术应用到漏光器中,产生了硅箱,这标志着模拟调光时期的到来。这种技术是通
5、过模拟调光台(实际上是一个个电位器)输出的010V的模拟信号,控制可控硅的导通角来完成灯具调光功能的,它能够做到每一个灯具有不同亮度输出,但这种技术需要一个推杆对应一个调光回路,同时也需要连接一条信号线。可以想象一下,如果一台演出需要控制100个调光回路,就要有一台具有100个电位器推子的调光台,同时还需要连接100条信号控制线,这样的调光系统的组建和控制都是相当麻烦的事。这种模拟调光方式只能适应于一些小型的演出活动。随着时间的推移,电视事业不断壮大,舞台演出市场日益活跃,这对舞台灯光控制系统提出也更高的要求。到了20世纪80年代数字化技术的应用和普及产生了新一代的灯光控制技术,即DMX512
6、数字信号控制技术。DMX512数字信号协议于1986年,首先由美国剧院研究机构(USITT)提出,后来经过进一步的改进,于1990年正式公布。它利用电脑系统来完成整个灯光的控制,通过一条信号线就可同时输出多路串行数字信号,可以任意设置推杆与灯具之间的对应关系。这种技术大大简化了灯光的控制方式,为大规模舞台灯光控制提供了可能。从此,这种数字控制技术得到了广泛应用。2 硬件电路设计为简化设计、节约成本,对控制器电路和节点电路进行了综合,使得控制器和节点采用的是同样的电路,以下对电路中的各模块进行分析介绍。2.1 电源部分电路本设计共需要三组电源输入:5V的系统电源、3.3V的模拟电源、3.3V的数
7、字电源。系统板输入电压为9直流,所需系统电压为5,且带有液晶这样的大功率器件,若选用普通的线性稳压器件,则电源效率最高仅为55.6%,其发热量可想而知。故5系统电压不能采用线性稳压器件。LM2575是一种高效率的开关稳压器件,资料显示当其输入电压为12,输出电流为1A时,其效率可高达77%,但开关电源也有开关电源的缺点,其输出纹波较线性稳压器件大。弥补这一缺点最好的方法是再在后面加一级线性稳压。核心板TinyARM T23的供电由低压差模拟稳压器件SPX1117M3-3.3供给,虽然效率不高但TinyARM T23的功率小,实际运行过程中SPX1117基本保持室温。2.2 ISP跳线及核心板复
8、位电路为使调试过程更加顺利,在底板上添加了ISP跳线选择与核心板复位电路,如图 2.1所示。图 2.1 ISP选择电路与核心板复位电路当LPC2300芯片加密锁死时,通过ISP对芯片内部Flash进行整片擦除,可解除芯片的锁死状态。图中的U2为ESD保护芯片,可屏蔽人体静电对核心芯片带来的危害。由于LPC2300系列芯片自来掉电复位功能,故可省略常用复位电路中与R4并联的放电二极管。2.3 RS232通信电路本设计中的RS232电路主要有两个用途,一是用于ISP下载,二是用于与上位计算机通信,将调光信息反馈给上位机。RS232通信电路如图 2.2所示。图 2.2 RS232通信电路2.4 JT
9、AG接口电路JTAG为一种硬件仿真调试,需要配合ADS1.2集成开发环境、EasyJTAG-H仿真器、H-JTAG、H-FLASHER一起使用。其接口电路如图 2.3所示。图 2.3 JTAG接口电路2.5 LCD驱动电路设计本设计选用液晶的型号为TG12864E-02B,它采用的内部驱器为ST7920。ST7920的特点在于它包括6416位元字元显示RAM(DDRAM最多可显示16字元4行)及64256位元绘图显示RAM(GDRAM),可实现图形、文字的混合显示。液晶驱动电路如Error! Reference source not found.所示。图中三极管8050用于控制液晶的背光。2.
10、6 LED驱动电路设计2.6.1 LED驱动器PCA9635PCA9635是NXP公司生产的一款I2C总线LED驱动器,共有16路输出,输出电流可达到5mA,吸入电流可达到25mA,可直接驱动LED。适应于作为RGB LED或RGBA LED的调色驱动。其特性如下:(1) 16路LED输出,每一路输出均可配置为:开,关,独立亮度控制,独立亮度+整体闪烁/明暗控制;(2) 输出可编程为推挽或开漏结构;(3) 1MHz快速I2C总线,且SDA输出电流可高达30mA;(4) 256级独立亮度控制(97 K Hz PWM);(5) 256级集体亮度控制(190 Hz PWM);(6) 256级集体闪烁
11、控制,闪烁频率可在24Hz到10.73S之间调节;(7) 7个地址引脚使得在同一个I2C总线上可连接126个PCA9635;(8) 内部自带25 M Hz晶振,无需外部元件;(9) 可通过I2C总线对PCA9635软复位;(10) 上电复位;(11) SDA/SCL 输入噪声过滤;(12) 工作电压范围:2.3到5.5;(13) 工作温度:-40 oC到+85 oC;2.6.2 PCA9635驱动电路PCA9635驱动电路如图 2.4所示。图 2.4 PCA9635驱动电路由于I2C总路线是开漏输出的,所以在使用I2C接口的时候,需要在外部连接上拉电阻,如上图中R60、R61。由于本设计中各节
12、点只连接一个PCA9635,故可将PCA9635地址固定。为适应大电流灯具的要求,在PCA9635的外部仍添加了驱动电路,如图 2.5所示。图 2.5 LED驱动电路图中电阻阻值的确定由具体的LED参数决定。如图 2.6LED压降测试电路可粗略测得红灯的压降为1.82,绿灯的压降为2.5,蓝灯的压降为2.9。图 2.6LED压降测试电路下面以蓝色LED为例计算图 2.7中发射极电阻R88与基极电阻R56的值。为使蓝色LED点亮,三极管8550的射极电压Ue应在2.9以上,假设Ue为2.9,则流过R88的电流: (2-1)若取Ie为4 mA ,则R88需小于100。从8550的资料中可以查得其工
13、作在放大区时放大倍数约为100,则可得出三极管基极电流 (2-2)则R56的取值 (2-3)经实践验证,R88取100,R56取47K时,蓝灯可得到较好的效果。同样的过程,可得到红、绿灯的基极与发射极电阻的取值。2.7 RS485通信电路DMX512协议中规定其通信接口采EIA-485标准。2.7.1 RS-232、RS-422、RS485协议简介RS-232、RS-422与RS-485都是串行数据接口标准,最初都是由电子工业协会(EIA)制订并发布的,RS-232在1962年发布,命名为EIA-232-E,作为工业标准,以保证不同厂家产品之间的兼容。RS-422由RS-232发展而来,它是为
14、弥补RS-232之不足而提出的。为改进RS-232通信距离短、速率低的缺点,RS-422定义了一种平衡通信接口,将传输速率提高到10Mb/s,传输距离延长到4000英尺(速率低于100kb/s时),并允许在一条平衡总线上连接最多10个接收器。RS-422是一种单机发送、多机接收的单向、平衡传输规范,被命名为TIA/EIA-422-A标准。为扩展应用范围,EIA又于1983年在RS-422基础上制定了RS-485标准,增加了多点、双向通信能力,即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护特性,扩展了总线共模范围,后命名为TIA/EIA-485-A标准。由于EIA提出的
15、建议标准都是以“RS”作为前缀,所以在通讯工业领域,仍然习惯将上述标准以RS作前缀称谓。RS-232、RS-422与RS-485标准只对接口的电气特性做出规定,而不涉及接插件、电缆或协议,在此基础上用户可以建立自己的高层通信协议。EIA-485通信标准的性能如所示:2.7.2 RS-485电路分析RS-485接口电路如图 2.8所示。图 2.8 RS485接口电路图 2.8中U9为ESD保护二极管,能有效保护SP485R芯片。R101为通信阻抗匹配电阻,减少由于阻抗不匹配而引起的反射、噪声,能有效提高RS-485通信的可靠性。图 2.8中SIN为SP485R通信接口方向控制线,当SIN为高电平
16、时,SP485R配置为输出,为低电平时,SP485R配置为输入。为解决上电时RS-485总线冲突问题,需添加上电抑制电路,如图 2.9所示。上电时SIN输出低电平,SP485R配置为输入。由EWB仿真可得到抑制时间t约为2S。图 2.9 SP485上电抑制电路图 2.8中RRXD、TTXD为SP485R的数据读写信号线,为隔离外部噪声,保护控制芯片,在SP485R与核心板之间加入了隔离电路,如Error! Reference source not found.所示。图中使用到的ADUM1201为ADI公司推出的一款磁隔离芯片,它采用的icoupler技术是基于芯片尺寸的变压器。ADUM1201
17、所隔离的两端有各自的电源和参考地,电源电压为2.75.5V。相对于普通的光隔离,ADUM1201具有如下特点:(1) 速度更高:最高速率可以达到25mbps;(2) 功耗更低:功耗低于同数据传输率时传统光电隔离器的1/10,最小工作电流为0.8mA;(3) 性能更高:时序精度,瞬态共模抑制力,通道间匹配程度均优于传统光电隔离器;(4) 体积更小:集成度更高,印制电路板(pcb)面积为传统光电隔离器的40;(5) 价格更低:每通道成本为传统光电隔离器的40;(6) 应用更灵活:与传统光电耦合器不同的是,多通道icoupler数字隔离器能在同一芯片内提供正向和反向通信通道。RS-485通信电源电路
18、如图 2.10所示。采用的是致远电子推出一款高精度DC-DC电源模块。图 2.10 RS-485电源电路2.8 从机地址选择电路因从机无需接液晶,所以将从机地址选择线与液晶部分信号线复用。各地址线均已连接上拉电阻。从机地址设置范围0x000x1FF,电路如图 2.11所示,S1为拔码开关。图 2.11从机地址选择电路注:用作主机时需断开J23。2.9 状态指示灯及按键电路本设计共设置了4个状态指示灯和6个按键。电路如所示。图 2.12状态指示灯及按键电路3 控制器软件设计3.1 整体软件分析与设计整个系统分为主控制器和节点两部分。由设计要求分析可知,主控制器需要完成人机交流与DMX512数据的
19、发送,节点需要完成DMX512数据的接收与舞台灯光的控制。控制器和节点所要完成的每一个任务都对实时性提出了很高的要求。DMX512的协议规定,完整的DMX512数据包包含一个中断标识位,一个中断后标识位,一个起始数据和512个调光数据,其数据发送的波特率为250Kbps,计算可得整个数据包的发送时间长达0.025钞。对于主控制器来说,若在系统设计时使用前后台系统,那么控制器的人机交流将难以得到及时的响应,为此主控制操作系统宜采用实时操作系统。对于节点来说,DMX512数据的接收任务可放在UART中断中处理,不会影响到控制的实时性,这样节点即可采用前后台系统也可采用实时操作系统。C/OS-II一
20、个源码公开、可移植、可固化、可裁剪、占先式的实时多任务操作系统,且在高校教学使用是不需要申请许可证的。因此,主控制器的实时操作系统选用C/OS-II。3.1.1 控制器软件设计系统框图分析设计要求,控制器共需要完成两件事情:人机交流;数据发送。人机交流又可以划分为三个任务:键盘扫描;人机界面;数据更新。综上所述,控制器共设计四个任务,其系统框图如图 3.1所示。图 3.1控制器系统框图3.2 键盘扫描程序分析设计常用的键值采集方案有两种:中断服务;软件查询。3.2.1 中断服务LPC2300系列ARM的P0和P2端口的每一个引脚都可以配置为上升沿中断或者下降沿中断。P0和P2端口的中断通道与外
21、部中断3(EINT3)相同。在硬件设计中,按键06分别与P0.9P0.17相连,因此,只需将P0.9P0.17引脚配置为下降沿中断,在中断的服务程序中即可完成按键的采集任务。但由于在硬件设计时,按键没有添加去抖电容,按键去抖的任务就需要由软件来完成,中断服务程序中应添加一个大约10毫秒的沿时程序。但C/OS-II规定在中断服务程序中,不能使用系统延时函数OSTimeDly( ),这样就带来了大量系统资源的浪费。一旦有按键按下,系统中的其它任务都会停下来,包括数据发送任务。这样的情况对于保证DMX512数据的完整性是非常不利的。所以按键的采集不能采用中断的方式。3.2.2 软件查询按键的软件查询
22、程序流程图如图 3.2示。图 3.2键盘扫描流程图在C/OS-II操作系统中只能使用间隔查询方式,否则比查询任务优先级低的任务将得不到运行的机会。从程序中可以看到,每次查询都会间隔一个OSTimeDly(3),即每隔15mS查询一次,虽然查询键值浪费了一定的系统资源,但对于运行在48MHz系统时钟下具有三级流水线的32位处理器来说,这样的查询过程是微不足道的。从AXD中可以看到到整个查询过程只用了5条汇编指令。在得到键值后,调用OSMboxPost( )函数,将键值以消息邮箱的形式发送给人机界面任务,待人机界面任务做进一步的处理。然后再次调用系统延时函数OSTimeDly(40)延时0.2秒,
23、作为两次按键的最小间隔时间。3.2.3 调光功能的实现受液晶尺寸限制,调光功能菜单被分为两级,第一级完成节点node和灯号nightnum的选择,第二级完成对应灯号Red、Green、Blue三路数据的修改。在这里设置了三个重要变量:changedsig、changedadr、changeddata。(7) changedsig:数据改变标致;(8) changedadr:改变数据的地址,即全局变量DMX_512数据的下标;(9) changeddata:改变后的新数据。为了简化设计,将对这三个数据的修改程序直接融入到了液晶界面中。对调光数据的修改总是会伴随着界面的变化的,所以这样的融入相对来
24、说比较省事。当有调光数据的修改时,changedsig标致置1,并将对应的修改值付给changeddata,changedadr的值由三个因素决定:节点号node;灯号nightnum;页内标致page5sig。具体计算方法如程序清单 3.1所示。程序清单 3.1 Xrate +; /*修改红色数据 */ changedsig = 1; /*置数据改变标致 */ changeddata = (Xrate-1)1; /* 计算修改地址 */其中Xrate为调光数据,取值范围116。X可代表R、G、B。函数GetNodeAdr根据节点号node从TinyARM T23自带的EEPROM中读地址设置
25、信息,返回值为对应的从机地址。数组ADRMAP是根据从机的硬件连接方式而预设的地址偏移量。液晶界面更新完成后,依据changed系列变量的值,即可完成对DMX_512数据的修改。对调光数据的修改是实时显示的,调光效果及时的反馈给用户,方便用户做进一步的修正。3.2.4 效果选择功能的实现本设计中涉及到两类灯光效果。一类效果控制器并不对调光数据做修改,只发出命令字,而由节点接收到命令字后做出相应的变换。效果编号15都是这种类型。而另一种效果是由控制器直接对光路数据进行修改,节点不接收命令,不做变换,只刷新光路数据。效果编号6就属于这种类型。在做出具体的效果变换之前,需要先完成效果编号vision
26、、效果速度visionspeed的设置。效果的变化不是实时的,当按下确认键后,效果才会更新。效果编号vision的取值范围为06。0代表无效果,1和2为两种样式不同的闪烁效果,3为渐明效果,4为渐暗效果,5为魔术色效果,6为随机数效果。程序清单 3.2为在效果做出变换时,对changedsig、changeddata、chagedadr做出的相应设置。程序清单 3.2 changedadr = 0x8000; /*将changedadr最高位置1作为效果标致*/ if(vision = 6) OSSemPost(SemRand); /*随机数效果开关*/ changedsig = 4; /*四
27、个节点均需修改命令字*/ changeddata = vision|(visionspeed1)-1)3);效果6,随机数效果是完全由控制器来完成的,控制器产生随机数,并修改相应的DMX_512数据。程序中用信号量SemRand作为开关量。第一次选择效果6为开,第二次选择效果6为关。3.2.5 现场功能的实现及其方案分析现场功能的实现依赖于现场数据的存储,本设计所使用的TinyARM T23核心芯片为LPC2366,核心板上配有FM24C02(EEPROM),数据的存储有两种方案:(10) 使用LPC2300系列的IAP(在应用编程)功能,将现场数据存至LPC2366的Flash中;(11)
28、使用FM24C02。首先分析第一种方案,LPC2366共有256KB的Flash存储空间,被划分为14个扇区,其分区情况如表 3.1所示。表 3.1LPC2366扇区分布情况扇区号扇区规格(KB)地址范围040x0000 0000 0x0000 0FFF140x0000 1000 0x0000 1FFF240x0000 2000 0x0000 2FFF340x0000 3000 0x0000 3FFF440x0000 4000 0x0000 4FFF540x0000 5000 0x0000 5FFF640x0000 6000 0x0000 6FFF740x0000 7000 0x0000 7F
29、FF8320x0000 8000 0x0000 FFFF9320x0001 0000 0x0001 7FFF10320x0001 8000 0x0001 FFFF11320x0002 0000 0x0002 7FFF12320x0002 8000 0x0002 FFFF13320x0003 0000 0x0003 7FFF14320x0003 8000 0x0003 FFFF因为在利用IAP向片内Flash存储器写入数据时,需要先对数据进行擦写,因此数据区和代码区不能重合,否则有可能造成系统崩溃。倘若用户程序代码加上操作系统代码在64KB以内(本系统代码不会超过64K),那么可以使用的Flas
30、h空间高达192KB,如果现场数据完全存储(512字节),那么可存储的现场数多达384个。但是,Flash的使用次数是有限的,对于在舞台应用来说,现场数据的存储比较频繁,所以使用片内Flash并不明智。且如果某一现场数据需要修改,则同一扇区中所有现场数据将会被擦除(Flash的擦除是基于扇区的)。分析第二种方案,使用FM24C02存储现场,FM24C02为256B的串行EEPROM,虽然EEPROM的使用寿命够长,但256B的空间很少,如果完全存储,连一个场景也存储不了。要使用它,就必需对现场数据进行一些取舍,只存储DMX512中使用到的通道数据。如果设计的是4个节点,每个节点需要13字节的数
31、据,那么一个现场需要52个字节。256个字节的FM24C02能存储4个现场。虽然可存储的现场很少,但用于演示还是够了。所以最终我采用了方案二。3.2.6 地址设置地址设置的目的是为了让控制器知道自己应该修改的是DMX512中的哪个位置的数据,建立一个节点号与节点地址之间的映射关系,并且还要能实现设置信息的存储。地址的取值范围为0511,一个地址需要占用两个字节,如果设计的是四个节点,那么所有地址设置信息的存储将占用8个字节。FM24C02在进行现场存储之后,还剩余一些没有使用的字节,刚好可以用来作为地址设置的存储空间。3.2.7 DMX512协议信号格式DMX512 信号时序图如Error!
32、Reference source not found.所示。DMX512 信号的数据格式分为以下几个部分:(12) IDLE( 空闲的) or NO DMX situation :当没有DMX 数据包输出时,将是一个高电平信号。(13) BREAK:DMX 数据包的开始是一个至少88微秒的低电平输出的预报头。根据经验,人们发现一个大于88 微秒的BREAK 将更有利于发送和接收,一般在设计时将它设计为120 微秒。(14) MARK AFTER BREAK (MAB)书馆:MAB是BREAK后是一个8微秒的高电平或2个脉冲。旧版本的DMX 标准为4微秒或1个脉冲,在连接老的控制台时会产生数据的
33、混乱。MAB 也可设置为12 微秒。(15) START CODE (SC) 起始码:SC 是数据流开始的通道数据,它具有与通道数据相同的格式,一般为11个脉冲或44微秒。(16) MARK TIME BETWEEN FRAMES (MTBF) :在每个通道起始位前可以有MTBF,为高电平,时间小于1秒。(17) MARK TIME BETWEEN PACKETS (MTBP ) :在有效数据发送完毕后发送高电平,时间小于1秒。DMX512数字信号由起始码和512个数据帧组成。按串行方式发送和接收数据,数据帧内包含一个开始位(低电平),8位数据和两个停止位(高电平),没有奇偶校验,也就是说一个
34、数据帧有11个位元。每一位的宽度是4us,发送一个帧需要44us的时间。由于每一位的时间是4us,所以DMX512 信号的波特率为250kb/s 。关于DMX512各部分的时间规定如表 3.2所示。表 3.2 DMX512(1990)时间规定表名称最小值标准值最大值单位中断(Break)88881000000S中断后标识(MAB)8S光路信息结构宽度(Frame Widch)44S开始位(Start Bit)4S停止位(Stop Bit)8S光路信息码间隔标识(MTBF)0没有规定1000000S数据包间隔标识(MTBP)0没有规定1000000S3.2.8 DMX512格式的实现与方案比较D
35、MX512协议的实现比较简单,关键在于如何产生数据包前面88 S 的Break(低电平)和8S的MAB(高电平)。关于数据帧,只需将UART的波特率设置为250Kbps,发送数据的格式配置为8位数据位,2位停止位,无奇偶效检位即可。Break与MAB的实现有两种方案。方案一:让对应的I/O口在输出模式与TXD模式之间不停的转换,配合定时器产生所需高低电平。方案二:对于LPC2300系列ARM还有另一种不需要模式转换的方案,LPC2300系列ARM的UART口在空闲时TXD引脚默认为高电平,当配置线控制寄存器UnLCR6 为1时将使能发送间隔,TXD引脚会被强制为低电平。故采用方案二。有了发送间
36、隔功能后,DMX512格式的实现只需要一个合适的定时器就可以完成了。88S和8S的定时均可由Timer1产生。DMX512发送任务的流程图如图 3.3所示。图 3.3 DMX512数据发送程序流程图在UART2的初始化时使能发送FIFO,发送数据时连续发送8字节数据,然后等待发送中断标致,这样有利于提高系统资源利用率。使用逻辑分析仪LA1016采集到的UART2 TXD输出波形如Error! Reference source not found.所示,从图中可以看出,时序完全符合DMX512协议的要求。3.3 数据更新任务从前面章节的介绍可以看出,单字节的数据更新已经由人机界面任务完成了,这里
37、数据更新任务所要完成的是使用随机数效果“6”时所需要的大量数据的更新。当数据更新任务在接收到效果“6”开启信号后,调用rand函数得到随机数,然后对DMX_512中的对应数据进行更新。4 节点软件设计节点所要完成的任务是解析控制器传来的DMX512数据包,提取出属于自己的部分,依据数据内容对PCA9635进行相应的控制。节点软件采用前后台系统。4.1 DMX512数据包解析程序4.1.1 如何解析DMX512从图 4.1 DMX512协议的时序图可以看出,解析DMX512的关键在于如何识别DMX512的起始标致Break 。Break是一个至少88S的低电平,也许我们可以采用下降沿中断与定时器
38、的配合来识别Break,但这样过于麻烦,对于LPC2300系列ARM来说,有一个更简便的方法可以实现这一点。线状态寄存器UnLSR的第3位为帧错误标致位。在接收到RXD上的下降沿后,UART会按照设定的波特率采集RXD引脚上的电平,当发现停止位(下降沿以后的第36S至44S之间)为低平时,帧错误标致将置位,若已经设置接收线状态中断,此时将产生线状态中断,具体的中断原因可以从线状态寄存器UnLSR中读取。在识别出起始标致Break之后,DMX512数据可按照普通的串口数据进行接收了,中断后标致MAB不会对串口数据的接收产生任何影响。从DMX512中解析出来的有用数据直接存放在全局变量UARTDa
39、ta13中。UART2的中断服务程序流程图如图 4.2所示。图 4.2 UART2中断服务流程图4.2 PCA9635控制4.2.1 PCA9635寄存器简介PCA9635内部共含有29个寄存器,其中控制寄存器(Control register)不参与编址。各个寄存器的说明如下:(18) 控制寄存器(Control register)通过I2C总线写入到PCA9635的第二个字节(第一个字节为I2C从机地址)将被存入此寄存器,它决定I2C总线上随后的数据存放在哪些寄存器中。Control register75为地址递增控制位。Control register40的值为PCA9635内部寄存器的
40、地址。(19) 模式寄存器(MODE1,MODE2)模式寄存器MODE1片内地址0x00,其各位的详细说明见表 4.1。表 4.1 MODE1寄存器位描述位符号功能7AI2只读,同Control register76AI1只读,同Control register65AI0只读,同Control register54SLEEP0 :普通模式1*:节能模式,内部振荡器关闭3SUB20*:子地址2无效1 :子地址2有效2SUB10*:子地址1无效1 :子地址1有效1SUB00*:子地址0无效1 :子地址0有效0ALLCALL0*: ALLCALL地址无效1 : ALLCALL地址有效模式寄存器MOD
41、E2片内地址0x01,其各位的详细说明见表 4.2。表 4.2 MODE2寄存器位描述位符号功能7-保留6-保留5DMBLNK0*:亮度整体控制1 :闪烁整体控制4INVRT0*:输出逻辑不反向1 :输出逻辑反向3OCH0*:当I2C总线出现停止位时输出更新1 :当I2C总线出现应答位时输出更新2OUTDRV0 :输出配置为开漏结构1*:输出配置为推挽结构1 to 0OUTNE1:000 :当=1时输出LEDn = 001*:当=1时输出LEDn = 1(OUTDRV=1)或高阻态(OUTDRV=0)10 :当=1时输出LEDn 为高阻态11 :保留4.2.2 各种效果的设计节点接收控制器传来
42、的13个字节,第一个字节中含有05六种效果命令,以及效果的速度,后面的12个字节,节点不做处理,直接送入PCA9635的PWMn寄存器控制前12路PWM输出的占空比。如图 4.3所示。图 4.3主从数据协议节点设计的五种效果分别为:闪烁效果(两种)、渐明效果、渐暗效果、魔术色效果。闪烁效果是通过修改PCA9635的寄存器LEDOUTn来实现的,要点亮哪一位LED,就将LEDOUTn中对应的两位置1,否则置0。按照想要的样式,建立一个二维数组,在定时器发生匹配中断后,按照不同的偏移量将数组中的样式送入LEDOUTn即可,闪烁频率由中断频率决定。渐明渐暗效果是通过修改PCA9635的整体亮度控制寄
43、存器GRPPWM来实现的。渐明时,向GRPPWM中写入依次增大的值。渐暗时向GRPPWM中写入依次减小的值。值的修改也是发生在定时器匹配中断之后,闪烁频率由中断频率决定。为了实现魔术色效果,首先需建立一个包含256个元素的数组,数组内元素值由0递增到254,步进为2,然后由254递减到0,步减为2。按照不同的偏移基址+偏移量来读取数组中的数据送入到PCA9635中控制红、绿、蓝三色亮度,完成魔术色的合成。偏移量在定时器匹配中断时递增,色彩变化速度由中断频率决定。PCA9635控制任务的流程图如图 4.4所示。图 4.4 PCA9635控制任务流程图流程图中数组PCA9635_DATA为将要通过
44、I2C总线写入到PCA9635的值,PCA9635_DATA0写入到PCA9635控制寄存器Control register ,恒为0x82。根据前面的介绍可知,PCA9635_DATA后面的值将依次写入PWMn、GRPPWM、GRPFREQ、LEDOUTn中。5 设计总结经过此次毕业设计,我巩固了已学过的专业知识,也学到了许多新知识。在体会实际工作困难的同时,也深深的体会到实践与理论的差距。设计中,既要全面掌握理论,又要洞悉实际元器件的工作原理;既要有信心,又要有耐心。在这2个多月的时间里,通过不断的努力探索,我基本掌握了C/OS-II的应用,对嵌入式系统有了更深入的理解。各个阶段已完成的工作如表 5.1所示。表 5.1工作进度表工作时间工作内容第一周学习嵌入式的基础知识第二周学习LPC2300系列ARM的使用第三周