我们从2011年坚守至今,只想做存粹的技术论坛。  由于网站在外面,点击附件后要很长世间才弹出下载,请耐心等待,勿重复点击不要用Edge和IE浏览器下载,否则提示不安全下载不了

 找回密码
 立即注册
搜索
查看: 882|回复: 0

谈ARM对多传感器的精确定时 - 单片机/处理器 - 电子工程师

[复制链接]

该用户从未签到

1万

主题

1292

回帖

2万

积分

管理员

积分
29577

社区居民最爱沙发原创达人社区明星终身成就奖优秀斑竹奖宣传大使奖特殊贡献奖

QQ
发表于 2013-3-30 00:27:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
煤矿井下环境十分恶劣,随时可能遇到的塌方和煤粉尘大等情况,影响固定报警器检查瓦斯浓度的正常工作。安全检查最可靠的方式是,所有的下井人员人人都随身携带煤矿瓦斯报警器,随时检查井下瓦斯浓度;但仅检查瓦斯浓度往往是不够的,当井下的一氧化碳的浓度升高时对人体也是十分有害的。为了确保下井人员的安全,不仅随时要检查瓦斯浓度,同时也要检查一氧化碳浓度。

能同时检查两种以上有害气体的装置,既要便于携带,又要精确定时检查多种有害气体,这里选用32位ARM微处理器来实现该功能。

利用32位 ARM微处理器的优势,可以满足便于携带与精确定时报警的要求。本文将针对精确定时这一问题进行一些探讨。

<strong>1ARM嵌入式随身瓦斯报警器的基本原理</strong>

如图1所示,瓦斯报警器主要包括:ARM芯片外部的输入输出部分,ARM芯片内部与外部输入连接的 A/D转换部分和与芯片内部与外部输出连接的GPIO部分。


<ignore_js_op>





2010-3-18 07:24:24 上传
<strong>下载附件</strong> (15.68 KB)




</ignore_js_op>


1.1 输入输出部分

输入部分:由瓦斯传感器与一个模拟信号放大器通过跳线连接到P0.22引脚,将瓦斯模拟信号送入AIN0模拟输入通道0;一氧化碳传感器与另一个模拟信号放大器连接到P0.23引脚,将一氧化碳模拟信号送人 AIN1模拟输入通道1。

输出部分:由P0.17和P0.18引脚通过470 Ω电阻与LED发光告警二极管连接;P0.19引脚通过470 Ω电阻与一个蜂鸣器相连,电阻的作用是分压,以便产生中度蜂鸣告警;P0.20引脚直接与另一蜂鸣器相连,以便产生强度蜂鸣告警。

ARM LPC2103微处理器A/D转换器的特性是:10位逐次逼近式模数转换器;测量范围为0~3.3 V;10位转换时间≥2.44μs;1路或多路输入的Burst转换模式;转换触发信号可选择输人引脚的跳变或定时器的匹配情况;A/D转换器的基本时钟由VPB时钟提供,可编程分频器将时钟调整至4.5 MHz(逐次逼近转换的最大时钟),10位精度要求的转换需要11个A/D转换时钟。

ARM 微处理器运行程序在A/D控制寄存器参数的控制下,将AIN0采集到的瓦斯模拟信号送入10位逐次逼近式模数转换器,转换后的数字信号值存入ADDR 0 A/D数字寄存器0。将这一值与瓦斯初告警值、瓦斯中度告警值、瓦斯强度告警值进行比较,在哪一种告警范围,立即进行哪一种告警。

将 AIN1采集到的一氧化碳模拟信号送入10位逐次逼近式模数转换器,转换后的数字信号值存入ADDR1A/D数字寄存器1。将这一值与一氧化碳初告警值、一氧化碳中度告警值、一氧化碳强度告警值进行比较,在哪一种告警范围,立即进行哪一种告警。

1.2 模拟信号采集通道的选择与设置

从图1可看到,P0.22引脚连接AIN0通道,通过设置ADOCR A/D控制寄存器,选择通道0采集瓦斯浓度信息,并设置转换时钟频率为1 MHz;BURST=0,软件控制转换操作;CLKS=0,使用11clock转换;PDN=1,正常工作模式;START=4,当EDGE选择的边沿出现在MAT0.1时启动A/D转换;EDGE=0,MAT0.1下降沿触发。

P0.23引脚连接AIN1通道,通过设置ADOCR A/D控制寄存器,选择通道1采集一氧化碳浓度信息,设置转换时钟频率为1 MHz;BURST=0,软件控制转换操作;CLKS=0,使用11clock转换;PDN=1,正常工作模式;START=5,当EDGE选择的边沿出现在MAT0.3时启动A/D转换;EDGE=0,MAT0.3下降沿触发。

<strong>2 精确的定时触发</strong>

A/D转换的硬件触发可通过定时器翻转功能触发A/D转换,这样无需CPU干预就能精确地定时触发(这是本文主要讨论的问题)。ARM LPC2103定时器0寄存器结构框图如图2所示。


<ignore_js_op>





2010-3-18 07:24:24 上传
<strong>下载附件</strong> (7.07 KB)




</ignore_js_op>


初始化定时器0时,使定时器0匹配1(TOMR1)每逢第5 s时MAT0.1输出翻转;同时使定时器0匹配3(TOMR1)每逢第10 s时MAT0.3输出翻转。对定时器0设置代码如下:


<ignore_js_op>





2010-3-18 07:24:24 上传
<strong>下载附件</strong> (7.76 KB)




</ignore_js_op>


因对于ADCR A/D转换控制寄存器的START位选择100~111时,MAT信号不必输出到引脚上。对于上述代码初始化定时器需要说明,MAT0.1的 START=4即十六进制的100,下降沿触发启动A/D转换。对于MAT0.3的START=5即二进制的101,下降沿触发启动A/D转换器。

怎样精确地定时触发呢?先设置定时器0清零复位(Fpclk=1 s),每隔5 s,定时器计数器TC的值与TOMR1设置值相等时,MAT0.1输出信号翻转;每隔10 s时,定时器0复位。这样在定时器0复位后的第5 s时,MAT0.1输出再次翻转;MAT0.1每隔10 s输出翻转一次,它的精确匹配值是:

Fpclk×10 s(复位时间)-Fpclk×5 s(翻转时间)+Fpclk×5(再次翻转时间)=10 s

因为MAT0.1翻转2次才会有1次下降沿触发A/D转换,采集瓦斯浓度信息定时触发,即可精确地计算出MAT0.1每隔20 s产生1次下降沿,定时触发1次,采集一次新的瓦斯浓度信息。

同理,每隔10 s定时器计数器TC的值与TOMR3设置值相等时,MAT0.3输出翻转,并且定时器0复位。这样在定时器0复位后的第10 s时,MAT0.3输出再次翻转。MAT0.3每隔10 s输出翻转1次,因为MAT0.3翻转2次才会有1次采集一氧化碳浓度信息,即可精确地计算出MAT0.3,也是每隔20 s产生1次下降沿,定时触发1次,产生1次新的一氧化碳浓度信息。这样会给报警留有较长的时间。

上述两段就是通过程序设置,无需CPU干预就能精确地定时触发(是本文主要讨论的问题)。这里的每隔20 s定时触发1次,“20 s”这一数据可根据实际需求修改设定。

<strong>3 报警服务的实现</strong>

数字数据的提取、报警与A/D控制寄存器的设置均可通过中断服务程序来完成。

定时器0为4号中断源,如图3所示,所以需要用中断使能寄存器对4号中断源进行使能。采用向量IRQ中断,需要用VICIntSelect将4号中断源选择为向量IRQ,即第4位置1。然后将中断服务程序地址赋给VICVectAddr0(因为向量通道0是最快的),最后用向量控制寄存器对向量通道0分配中断源并使能。


<ignore_js_op>





2010-3-18 07:24:24 上传
<strong>下载附件</strong> (4.65 KB)




</ignore_js_op>


在初始化定时器0时,将匹配控制寄存器TOMCR赋值;它的二进制赋值是 10001000001,即它的十六进制赋值是0x441,每3位设置一个匹配;设置的是当定时器0计数器的值与匹配0寄存器值相等时产生一个中断,当定时器0计数器的值与匹配2寄存器值相等时又产生1次中断,当定时器0计数器的值与匹配3寄存器值相等时定时器0计数器TC清零复位。

TC 每次复位后将产生2次中断,产生第1次中断后,中断服务程序将读取A/D数据寄存器ADDR1的值,并提取10位A/D转换的结果(即一氧化碳浓度值);再将这一数据与初告警、中度告警和强度告警值进行比较,满足这3种告警的某一种,就立刻进行声光报警。因A/D控制寄存器ADCR的MAT信号不必输出到引脚上的START位设置是唯一的,中断服务程序还需对A/D控制寄存器ADCR进行设置。设置START=4,当EDGE选择的边沿出现在MAT0.1 时启动A/D转换;EDGE=0,MAT0.1为下降沿触发。通过中断服务程序来完成对AIN0通道(即瓦斯浓度信号通道)A/D转换器的启动。

产生第2次中断后,中断服务程序将读取A/D数据寄存器ADDR0的值,并提取10位A/D转换的结果(即瓦斯浓度值);再将这一数据与初度告警、中度告警和强度告警值进行比较,满足这3种告警的某一种,就立刻进行该声光报警。因A/D控制寄存器的MAT信号不必输出到引脚上的START位置是唯一的,因此还需对A/D控制寄存器进行设置。设置START=5,当EDGE选择的边沿出现在MAT0.3时启动ADC转换;EDGE=0,MAT0.3为下降沿触发。通过中断服务程序来完成对AINl通道(即一氧化碳浓度信号通道)A/D转换器的启动。

这样,当TC值与MR0值相等时,响应中断服务进行一氧化碳值判断与告警并设置MAT0.1的启动转换。当TC值与MR1值相等时,设置MAT1输出信号翻转;当TC值与MR2值相等时,响应中断服务进行瓦斯值判断与告警并设置MAT0.3的启动转换;当TC值与MR3值相等时,设置MAT3输出信号翻转并同时TC复位。这样循环往复,可以无需 CPU干预就能精确地定时触发,精确地按时进行多个传感器的触发和多个判断告警,即通过中断服务程序实现了有害气体检测告警服务。

<strong>结语</strong>

根据上述原理,使用ARM LPC2103芯片,已完成了一个可随身携带的煤矿瓦斯报警器。它能及时检测与显示煤矿、隧道及各种地下工程等环境中的瓦斯(即甲烷)及一氧化碳浓度。当达到有害浓度值时,可进行不同级别的声光报警。

此种报警器不仅适用于煤矿,安装其他传感器后也可用于其他矿山、化工重地、仓库等具有爆炸危险的气体环境中,提高安全监控能力。

将煤矿瓦斯报警器CH4、C20传感器换成可燃气体、甲醛传感器,就可用在厨房和居室,对有害气体的超标情况进行报警。它的用途还可进一步扩展。

刘敦放

(重庆普天通信设备有限公司,重庆 400050)

来源:《单片机与嵌入式系统应用》2010年01期
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

公告:服务器刚移机,
大家请不要下载东西。
会下载失败


Copyright ©2011-2024 NTpcb.com All Right Reserved.  Powered by Discuz! (NTpcb)

本站信息均由会员发表,不代表NTpcb立场,如侵犯了您的权利请发帖投诉

( 闽ICP备2024076463号-1 ) 论坛技术支持QQ群171867948 ,论坛问题,充值问题请联系QQ1308068381

平平安安
TOP
快速回复 返回顶部 返回列表