大部分低成本的传感器都有需要转变成数字值的输出电压,这样微控制器就可测量并将其转化为二进制或ASCII字节。
如今的微控制器具备进行该过程所需的所有功能,略添一些软件,我们就可制成一个低成本系统,以易于阅读的格式读取传感器电压和输出的测量数据。如果方法正确,代码就可成为不同系统应用程序的基本功能构建块。
对于本文所概述的项目,笔者侧重于讨论软件设计和尽可能减轻微控制器工作负担的子程序,从而使其在传感器数据进入系统时可执行其它任务。
器件选择如下:
* Freescale的MPX5100硅压力传感器,它带有片上温度补偿、校准和信号调理功能;压力在0至14.5psi之间时,电压输出与压力成比例;
* ADI公司的ADXL250,具备信号调理功能的±50g全集成双轴加速计,它的输出电压与压力(g)成正比;
* ZiLOG ENCORE!微控制器,带有64K闪存程序存储器、4K静态储存器(SRAM)、8通道10位A/D转换器、通用输入输出(GPIO)管脚、串行端口等。
图1:采用ZiLOG ENCORE! F64的压力传感器和加速计设计。(点击放大图) |
图2:采用ZiLOG ENCORE! F64的压力传感器和加速计的电路板布局。
更大压力、更大加速度
笔者喜欢构建能以不同方式控制整个系统的短程序或应用程序接口(API)。在主程序(列表1)中,可借助新函数调用为这个主循环添加其他函数;同时评估每个函数在最佳或最差状态下的运行时间。若仅向主循环增加函数调用,该主循环仍会保持清晰和容易遵循。缩减细节讨论,进入固件的下面几层。随后的程序流程是校验和设定位或标记,以及利用switch语句将您的系统引导至不同的操作模式。您可以开启一个标记,这样其他程序就会开始将传感器数据存储到缓冲器,或向switch语句传递口令以设置一个针对传感器输入的跟踪触发点。
在“do"语句以上的函数实现了系统初始化,并启动了压力传感器和加速计。“do"循环内的函数始终运行。在压力传感器和加速计的初始化API中,定时器控制何时启动新的传感器采样。在定时器初始化传感器子程序(ISR)中,传感器数据在缓冲器(如果激活)内实现阅读并存储,而其数值须经过告警设置点的校验。这样,告警标记也设在ISR之中,一个新采样即已启动。若转向不同的传感器流程,switch语句可控制应用程序所需的不同状态。
图3:密布压力仪的福特F150。
为了解系统定时,请切换至一个崭新的端口管脚,并在一定范围内测量您的设计之中不同的执行时间。保持传感器转换和中断程序都在“幕后”运行,可实现多任务处理。
定时器中断
为了实行多任务处理,需要激活并编译一个定时器中断程序,这将需要耗用一些系统 的MIPS来执行采样以及传感器API控制程序。例如列表2所示的这种定时器中断程序。
将信息导入函数之中
在设计一个函数时,导入您认为会有助于控制整个系统的一切信息。在上述压力传感器函数中,笔者导入了有助于控制系统的一些变量:
列表1:主程序。
1. "Contin"--转换传感器输入信息并存储至缓冲器中;
2. "Buff_size_ps"--用于存储采样值的字的数量。
3. "Sample_time_ps"--对传感器采样的频度;
4. "Alarm_trip_ps"--传感器中断程序的采样值大于或等于某值时的告警标记。
请谨记将来您还可能会在其他方案中再度使用这些函数,所以应尽可能使这些函数具有灵活性。
|
文章评论(0条评论)
登录后参与讨论