基于S3C2410的氢气浓度监测系统设计
3 系统软件结构设计
本系统在S3C2410上移植了韩国Mizi公司开发的Bootloader(VIVI)、嵌入式Linux-2.6.14内核以及cramfs根文件系统,构建了具有嵌入式Linux操作系统的软件环境。
3.1 外围设备驱动程序设计
Linux设备驱动程序是为特定硬件提供给用户程序的一组标准化接口,它隐藏了设备工作的细节。但对于特定的硬件设备来说,其对应的设备驱动程序不同,所以不同外部设备驱动程序的开发是嵌入式软件设计过程中必不可少的一部分。
Linux常以模块的形式加载设备,便于多个设备的协调工作也利于应用程序的开发和扩展。设备驱动在加载时首先需要调用入口函数ini-t_module()。该函数完成设备驱动的初始化工作,比如寄存器置位、结构体赋值等。其中最重要的一个工作就是向内核注册该设备,字符设备调用函数register_chrdev()完成注册,块设备调用函数reglster_blkdev()完成注册。相应地,设备驱动在卸载时需要调用cleanup_mod-ule()。该函数完成相应资源的回收、设备的注销、释放主设备号和设备文件名等。字符设备利用unregister_chrdev()注销设备,块设备利用unregister_blkdev()注销设备。
Linux内核中,每个设备驱动程序都对应一个file_operations数据结构。在file_operations数据结构中,定义了一些与此设备相关的打开、关闭、读/写、控制等功能函数,当用户进行系统调用时,将自动使用驱动程序中特定的函数来实现具体的操作。实际上,编写设备驱动程序的过程也就是实现struct file_operations结构中的部分所需函数的过程。
3.2 应用程序设计
有了设备驱动程序提供底层硬件与应用程序的接口,Linux系统访问底层设备就像访问普通文件一样。例如,打开设备使用系统调用open(),关闭设备使用系统调用close(),读/写设备使用系统调用read()和write()等。应用程序流程如图4所示。首先系统上电复位,程序初始化,然后扫描键盘值,看是否有键值按下。若有,则进行按键处理并按输入步骤设置程序;若无,则开中断并启动A/D转换,等待转换完成产生中断,进入中断服务程序。中断服务程序流程如图5所示。首先关闭中断,读取A/D采集数据,调用适用于缓变信号的中值滤波算法处理转换结果,将连续采样的5次采样值按大小排序,取中间值为本次有效值。然后,存储处理后的数据并送显示器显示。最后,从中断返回到主程序中,再判断当前数据是否超过设定的临界值。若大于临界值,作报警处理;否则就开中断,等待下一次转换结束。依此循环处理。
4 实验
在容积约70 m3的密闭实验室中,利用化学制氢法制取约40 ml氢气,再用该系统来检测环境中氢气浓度值,实验界面如图6所示。在界面中,显示了当前时间、当前环境浓度值、超限与否提示、当前通道以及1 h内的浓度变化曲线。监测系统的准确度、灵敏度、实时性等各项指标基本达到设计要求。
结语
本文介绍了信号的前端调理电路,为微处理器S3C2410移植了嵌入式Linux操作系统,并在该系统下完成了设备驱动程序和应用程序的设计;利用软件算法对A/D转换后的信号进行了数值处理,最后介绍了图形用户界面,可动态显示当前氢气浓度值。该系统较好地满足了对现场环境中氢气浓度的实时动态监测要求,系统体积小,功耗低,成本低;还可根据需求灵活配置,适合便携式移动应用的场合,且具有良好的准确性、实时性和稳定性。
- 嵌入式系统的远程参数测量的设计(09-12)
- 分析基于S3C2410的恒温式自动量热仪设计与应用(11-30)
- 基于ARM的嵌入式电能计量系统设计(04-28)
- 基于ARM9和uC/OS-Ⅱ的嵌入式数字示波器(04-09)
- 基于ARM平台下的GPRS/CQT测试系统设计研究(01-20)
- 基于嵌入式系统的远程参数测量的方法和实现(10-31)