原创 利用微控制器收集压力及加速计数据

2008-7-4 12:22 2335 6 6 分类: 测试测量

大部分低成本的传感器都有需要转变成数字值的输出电压,这样微控制器就可测量并将其转化为二进制或ASCII字节。

如今的微控制器具备进行该过程所需的所有功能,略添一些软件,我们就可制成一个低成本系统,以易于阅读的格式读取传感器电压和输出的测量数据。如果方法正确,代码就可成为不同系统应用程序的基本功能构建块。


对于本文所概述的项目,笔者侧重于讨论软件设计和尽可能减轻微控制器工作负担的子程序,从而使其在传感器数据进入系统时可执行其它任务。


器件选择如下:

* Freescale的MPX5100硅压力传感器,它带有片上温度补偿、校准和信号调理功能;压力在0至14.5psi之间时,电压输出与压力成比例;



* ADI公司的ADXL250,具备信号调理功能的±50g全集成双轴加速计,它的输出电压与压力(g)成正比;

* ZiLOG ENCORE!微控制器,带有64K闪存程序存储器、4K静态储存器(SRAM)、8通道10位A/D转换器、通用输入输出(GPIO)管脚、串行端口等。




0510B_DC_S6F1_S.JPG

图1:采用ZiLOG ENCORE! F64的压力传感器和加速计设计。(点击放大图)




0510B_DC_S6F2.JPG

图2:采用ZiLOG ENCORE! F64的压力传感器和加速计的电路板布局。




更大压力、更大加速度


笔者喜欢构建能以不同方式控制整个系统的短程序或应用程序接口(API)。在主程序(列表1)中,可借助新函数调用为这个主循环添加其他函数;同时评估每个函数在最佳或最差状态下的运行时间。若仅向主循环增加函数调用,该主循环仍会保持清晰和容易遵循。缩减细节讨论,进入固件的下面几层。随后的程序流程是校验和设定位或标记,以及利用switch语句将您的系统引导至不同的操作模式。您可以开启一个标记,这样其他程序就会开始将传感器数据存储到缓冲器,或向switch语句传递口令以设置一个针对传感器输入的跟踪触发点。


在“do"语句以上的函数实现了系统初始化,并启动了压力传感器和加速计。“do"循环内的函数始终运行。在压力传感器和加速计的初始化API中,定时器控制何时启动新的传感器采样。在定时器初始化传感器子程序(ISR)中,传感器数据在缓冲器(如果激活)内实现阅读并存储,而其数值须经过告警设置点的校验。这样,告警标记也设在ISR之中,一个新采样即已启动。若转向不同的传感器流程,switch语句可控制应用程序所需的不同状态。

0510B_DC_S6F3.JPG

图3:密布压力仪的福特F150。



为了解系统定时,请切换至一个崭新的端口管脚,并在一定范围内测量您的设计之中不同的执行时间。保持传感器转换和中断程序都在“幕后”运行,可实现多任务处理。


定时器中断


为了实行多任务处理,需要激活并编译一个定时器中断程序,这将需要耗用一些系统 的MIPS来执行采样以及传感器API控制程序。例如列表2所示的这种定时器中断程序。


将信息导入函数之中


在设计一个函数时,导入您认为会有助于控制整个系统的一切信息。在上述压力传感器函数中,笔者导入了有助于控制系统的一些变量:

0510B_DC_S6L1.JPG

列表1:主程序。



1. "Contin"--转换传感器输入信息并存储至缓冲器中;

2. "Buff_size_ps"--用于存储采样值的字的数量。

3. "Sample_time_ps"--对传感器采样的频度;

4. "Alarm_trip_ps"--传感器中断程序的采样值大于或等于某值时的告警标记。

请谨记将来您还可能会在其他方案中再度使用这些函数,所以应尽可能使这些函数具有灵活性。





1 ? 2 下一页 末页

文章评论0条评论)

登录后参与讨论
我要评论
0
6
关闭 站长推荐上一条 /2 下一条