站长个人入口

载入中...


公告
载入中...


我的分类(专题)
载入中...


日志更新
载入中...


最新评论
载入中...


留言板
载入中...


链接

基于AT91SAM9261的大型发电厂除尘设备
OneWind 发表于 2008-7-21 16:40:00

基于AT91SAM9261的大型除尘器控制系统

                          张驿风

                  2008年7月21日

摘要:

        AT91SAM9261是ATMEL继AT91RM9200,AT91SAM9260后推出的又一款工业级的ARM9 SOC芯片,本设备成功的应用该芯片构建了基于linux2.6内核,QT图形库的嵌入式大型除尘器控制系统,以低廉成本取代了过去利用PC扩展控制卡构建的系统,降低了系统陈本,减少了控制系统的维护工作量。

引言:

        进入21世纪后国际社会对环境保护呼声愈来愈高,作为最大的发展中国家,在不断获取GDP高速增长的同时也遭遇到环境恶化愈来愈严重的负面问题。CCQ3000-C大型除尘设备就是应环保需求,为高污染的火力发电厂,炼钢厂,水泥厂等高粉尘污染行业开发的袋式除尘设备的除尘控制系统。该控制系统使用美国ATMEL公司的32BIT中央处理芯片AT91SAM9261 , linux2.6内核,精简的YAFFS2日志型根文件系统,精致的QT图形系统,构建了一个功能强大,健壮,扩展灵活的易用系统。

系统简介:

CCQ3000-C控制系统控制对象是540脉冲控制阀,20个碟型阀,3个温度检测点,2个冷风机组控制点。扩展有16个工业按钮,和8个信号灯,64MB SDRAM,32MB NAND FLASH , 操作系统使用linux2.6内核,根文件系统使用定制的busybox,使用YAFFS2日志文件系统,能够随时记录重要的工作参数,并且能够做到抗掉电,系统启用看门狗,如果系统遭受到意外情况停止响应时能够做到重新在断点处启动继续工作。控制策略模块写在应用层,使用易于人机交互的图形窗口界面,能够实时的显示温度曲线,负载曲线,工作阀状态,工作电流强度,提供USB HOST接口支持U盘,环保局工作人员可以随时使用U盘把CCQ3000-C设备的工作资料调出和微机进行资料交互,方便环保工作人员对排污企业进行监控。

硬件设计:

根据控制任务和控制对象我们把CCQ3000-C划分为3个硬件模块:

1. 温控模块:

温控模块,实现对关键的临界测温点进行温度检测,和控制。为提高系统度温度控制的实时性,测温模块使用一片AVR单片机ATMEG8,扩展4个DS18B20测温传感器, 最大通信距离100米。使用74HC595扩展有5个LED数码管,分别显示测温通道号和对应通道温度,控制精度为0.5摄氏度,使用UART接口和主控制板linux通信。

2. 矩阵模块:

主要有欧式端子和隔离二级管,续流二级管组成,每组负责一个工作室,共20组。

由于控制对象众多共有560个阀,每个阀有近1安培的负载电流,执行元件和控制室距离遥远 , 如果不采取策勒直接连接控制单元和负载单元将会耗用大量的铜材,并且CPU也不可能扩展出这么多的I/O控制口,所以CCQ3000采用了动态扫描的控制策略,即每3个阀并联为一组(相当于动态扫描的段),每9组阀组成一个工作室(相当于动态扫描的位),这样560个负载阀只要20个工作室,每室9个工作组就可以了。整个控制设备只需要20根位线,10根段线共30根导线就可以了完成对接大大节约用铜量。矩阵模块的作用就是把这20根位线和10根段线隔离分配到各个负载阀上并且负责脉冲阀,碟型阀的反电势的吸收。

3. 主控制板单元:

CCQ3000主控单元模块,负责对20个工作室内的负载阀的进行实时控制(控制精度100毫秒级别) , 任务调度,故障实时扫描,人机交互界面的显示键盘的录入。

人机接口: 利用AT91SAM9261的LCD控制器扩展一块6.4英寸TFT 液晶显示面板,分辨率是640x480 , 使用ATMEGA8扩展一个I2C接口的矩阵键盘输入接口。

存储器: 系统扩展有两片MT48LC16M16A2共64MBSDRAM , NAND256W3A一

片共32MB NANDFLASH, 一片AT24C02。

 

控制接口部分: 使用3片74HC138和光耦TLP521-4扩展出20个位控制线并实现互锁功能,任一时刻只能够有一路可以工作。使用一片74HC154和光耦扩展出10个段控制线也同样实现互锁功能 , 功率输出选用低压大电流的N沟道的IRF530 MOSFET和P沟道的IRF9540 MOSFET完成。 并且实现了2个隔离的A/D输入转换电路,可以在线的检测工作阀的工作状态,实现故障自动报警,故障定位。

20个位扩展

其他:扩展一片DS1302实时时钟芯片,为系统提供准确的时钟信号,并提供31字节的RAM,我们利用这个区域存储控制任务的不同阶段,在遇到突然掉电,或者是其他意外情况系统停止响应时能够重新启动内核,从断点处继续重新启动控制应用程序。

软件设计:

系统程序移植:

1. bootloader移植:
bootloader使用u-boot-1.1.5 首先从www.at91.com获取 u-boot-1.1.5_atmel_1.3.diff.bz2 补丁包,再从http://www.sf.net/上获取u-boot-1.1.5,在服务器上解压后加入u-boot-1.1.5_atmel_1.3.diff.bz2补丁包。

配置为at91sam9261ek环境:

make at91sam9261ek_config

修改去掉网络部分,调整nand flash容量为32MB,重新编译出二进制文件。

2. 内核移植:

http://www.kernel.org/上获取主流linux内核代码树

http://maxim.org.za/at91_26.html 获取相应的AT91内核版本补丁包。

在服务器上解压内核后打入AT91补丁,配置内核使用at91sam9261ek_defconfig配置文件,在此基础上裁剪去网络,不用的文件系统,等等把linux内核裁剪到最小。

3. QT编译:

使用qt-2.3.10版本配置为SMALL模式,使用arm-gcc工具链。

二 驱动及fireware开发

1. 键盘fireware及驱动开发:

由于基于QT的应用希望能够使用linux的标准键盘来工作,以获得更好的窗口程序控制特性,所以我们必须为这些工业矩阵按钮编写一个标准的运行在linux2.6内核下的键盘驱动。思路是: 单片机查询到正确的按键信息后把按键转换为标准键盘编码,然后拉低AT91SAM9261的IRQ,linux收到中断信号后运行中断服务程序,中断服务程序启动I2C读,连续读出单片机的编码后的键盘码,然后查表转换为unicode编码的键盘码(QT使用unicode码)再使用linux2.6内核函数input_report_key函数把键盘信息提交给tty设备层。这样QT应用就可以把工业按钮当作标准的键盘按键来使用了。

2串口通信:

除尘滤网最大工作温度不能够超过120摄氏度,否则就会被永久损坏,如果温度超过设置的工作警戒数据的话,系统要及时的打开冷风机组降温,如果超过120摄氏度的话要及时的关闭全部的喷吹阀,所以要不断的通过串口从温控模块读出3个检测点温度。 由于linux内核里已经包含有atmel的USART的驱动所以我们只要在应用层开发通信软件就可以了,设置linux为主机,温控模块为子机,通信协议如下:

START ASCII1,ASCII2,ASCII3…… ASCIIn CHECKSUM STOP

 

通信校验正确应该应答一个XON失败应答一个XOFF,连续重试5次依然失败,主机重新启动通信,如果仍失败报警。

首先调用open (“/dev/ttyS1, O_RDWR) 打开串口设备。

调用 int cfsetispeed(struct termios *termios_p, speed_t speed);int cfsetospeed(struct termios *termios_p, speed_t speed); int tcsetattr(int fd, int optional_actions, struct termios *termios_p);设置串口参数为9600,8,N,1。

使用select,read,write标准函数进行串口数据读写,实现和ATMEGA8通信。

3. IO口控制

脉冲阀,喷吹阀的动态扫描控制,主要由AT91SAM9261的GPIO来控制,AT91SAM9261的I/O电压是3.3V,所以他的高电平输出电压最大也就是3.3V,驱动能力是最大也就是8MA。所以不能够用GPIO直接去驱动功率MOSFET(负载阀工作在DC24V下),所以系统采用74HC145 四十译码器配合TLP521-4光耦合,驱动MOSFET一可以解决电平兼容问题二可以提高驱动能力三可以实现系统和外部执行单元的隔离。

该系统没有使用linux现有的gpio.c驱动,而是重新开发了一个针对本系统的字符型GPIO驱动程序,创建了多个GPIO设备,每个GPIO 引脚对应一个GPIO设备。

驱动中首先使用:

gpioa_base = ioremap(GPIOB_REG_BASE,GPIOB_REG_SIZE),

gpiob_base = ioremap(GPIOB_REG_BASE,GPIOB_REG_SIZE),

函数获取到GPIOA和GPIOB控制寄存器物理地址对应的虚拟地址,然后使用:

writel((1<<GPIOA0) | (1<<GPIOA1) | (1<<GPIOA2) | (1<<GPIOA3) | (1<<GPIOA4) ,gpioa_base + PIO_PER);

writel((1<<GPIOB1) | (1<<GPIOB2) | (1<<GPIOB3), gpiob_base + PIO_PER);

语句使能PIOA的pin0,pin1,pin2,pin3,pin4 ,PIOB的pin0,pin1,pin2由PIO控制逻辑控制。

writel((1<<GPIOB0) | (1<<GPIOB1) | (1<<GPIOB2) |

(1<<GPIOB3) ,gpiob_base + PIO_OER);

writel((1<<GPIOB1) | (1<<GPIOB2) | (1<<GPIOB3), gpiob_base + PIO_OER);

设置PIOA的pin0,pin1,pin2,pin3,pin4,PIOB的pin0,pin1,pin2,pin3为输出口。

writel((1<<GPIOB0) | (1<<GPIOB1) | (1<<GPIOB2) |

(1<<GPIOB3) ,gpiob_base + PIO_PUSR);

writel((1<<GPIOB1) | (1<<GPIOB2) | (1<<GPIOB3), gpiob_base +

PIO_PUSR);

使能PIOA的pin0,pin1,pin2,pin3,pin4,PIOB的pin0,pin1,pin2,pin3的内部上拉电阻。

针对该系统只使用了PIOA的5个引脚和PIOB的4个引脚并且IO号都是连续的,所以驱动只向用户层导出一个write函数。

ssize_t ccq_write (struct file *filp, const char *buf, size_t count,

loff_t *f_pos)

{

static unsigned char uBuf[4];

copy_from_user(uBuf,buf,4);

writel(0x1F,gpioa_base + PIO_CODR);

writel(uBuf[0],gpioa_base + PIO_SODR);

writel(0x0F,gpiob_base + PIO_CODR);

writel(uBuf[1],gpiob_base + PIO_SODR);

return count;

}

AT91SAM9261 PIO控制器结构图

4. 看门狗:

启用看门狗,配置为产生外部复位,如果出现喂狗不及时的情况,看门狗动作系统复位,linux重新启动,启动成功后读取DS1302的RAM参数区,取出工作断点位置,继续执行应用。

上层应用:

CCQ3000的上层应用建立在QT上,在主窗口面板上建立有一些按钮和显示区域,实时的显示出系统的温度曲线,和工作状况,以及扫描显示560个阀的通断情况,工作电流值。

使用YAFFS2文件系统每间隔3小时写入一次工作参数到数据库文件,以利于政府部门强制污染企业始终开启除尘设备。

总接:

CCQ3000把linux引入工控领域也是一个尝试,以前普遍认为linux不适合应用于工业控制,其实是不正确的,实际工作中我们也经常会遇到一些使用windows98的工控系统,linux作为一个开放的自由的操作系统是其他操作系统所无法比拟的,实际工作当中我们可以避开其缺点比如实时性的工作交给单片机处理,而把任务调度,协议处理,数据交换,人际交互由linux来处理,我们会发现整个系统开发过程会变得轻松自如,而且整个过程充满激情和富有艺术感。

参考文献:

<<ARM926EJ-S Technical Reference Manual>> ARM updated 01/04

<<AT91 ARM Thumb-based Microcontrollers AT91SAM9261 Preliminary>>

6062G–ATARM–13-Mar-07 ATMEL

<<Linux Device Drivers, 2nd Edition>> alessandro and jonathan

http://trolltech.com/ QT

<<IRF9540N HEXFET? Power MOSFET >> international ior rectifier

<< IRF530 N - CHANNEL ENHANCEMENT MODE POWER MOS TRANSISTOR >> international ior rectifier

<<linux程序设计>> Neil Matthew等著 杨晓云等译 机械工业出版社

<<GB6179 滤袋除尘器的分类及性能表示法>>

<<GB12625 袋式除尘器用滤料及滤袋技术条件>>

<<JB/T8532 脉冲喷吹类袋式除尘器>>


阅读全文 | 回复(1) | 引用通告 | 编辑
 


电子工程师驿站
电子工程师网址驿站(游客)发表评论于2008-7-22 13:53:00
电子工程师网址驿站(游客)希望最全最专业的中文电子技术网址站(电子工程师驿站www.ezhan123.com)成为你工作学习的好助手!

个人主页 | 引用 | 返回 | 删除 | 回复
 


发表评论:
载入中...