本帖最后由 zoc210 于 2013-12-5 13:15 编辑
写在前面的话:之前为赶着交租子,写的有些仓促,像UART模块当时就没有来得及调试。目前包含的模块都调试通过 ,虽然过了截止时间,但是还是把最新的调试结果传上来,跟大家共享,欢迎批评指正{:soso_e183:}。参赛不是目的,获得新知识才是目的{:soso_e113:}
咳咳,不能免俗,首先还是要感谢爱板网和飞飞的厚爱,感谢赛普拉斯提供了这个机会能够测试和评估新的PSOC技术~
直接上重点,相关的背景介绍在后面哦{:soso_e100:}
氧气是工业环境中,尤其是密闭环境中需要十分注意的因素。一般我们将氧气含量超过23.5%称为氧气过量(富氧),此时很容易发生爆炸的危险;而氧气含量低于19.5%为氧气不足(缺氧),此时很容易发生工人窒息、昏迷以至死亡的危险。正常的氧气含量应当在20.9%左右。因此在进入一些有潜在风险的区域,需要检测氧气的浓度。 本次评估即采用氧气传感器进行,采用O2传感器的理由是方便调试,安全。虽然最典型的应用是CO之类的,但是调试时存在一氧化碳中毒风险,所有先上氧气传感器啦~ 当然,本项目可以很轻松的移植到其他类似的传感器上。后续会尽量更新不同类型的传感器应用~ 氧气检测仪是电化学传感器的一种。下图可以提供一个直观的印象:
项目框图: 尽量完全使用PSOC4的片上资源进行本项目的设计,涉及到的模块有运放、多路开关、模数转换、串口通信和LCD段码驱动,其中PWM模块是非必须的,这里仅进行简单演示。 主要的流程为:首先使用运放对输入的传感器信号进行放大处理,送入ADC模块,然后将对应的气体浓度进行转换后进行显示。 辅助的功能有:PSOC4片内含有一个温度传感器,可以直接进行温度探测。本项目采集温度的意义在于不同的的温度下,传感器的输出有不同的偏差,可以进行软件修正补偿。UART模块可以通过电平转换模块实现工业环境中常见的MODBUS通信。在本项目中将信号通过PSOC4KIT传递到PC上,没有外接RS485之类的电平转换芯片。 暂时打酱油的功能:用采集到的气体传感器信号电压值控制PWM模块的占空比,实现LED的亮度控制。其实际的项目意义在于可以控制外置运放实现低成本的工业仪表4~20mA电流环输出。
整体程序框图:
相对于之前的版本,修改为更加简单的TIA方式,运放工作于电流方式,即I/V转换,仅需要一个电阻即可实现转换,更加简单。之前需要3个电阻来进行转换。
LCD部分:LCD是4位的7段数码管。气体浓度和温度显示只需要前3位即可。因此本应用中第四位一直处于空白中。
系统默认为7段LCD,不支持小数点的。可以直接对像素点进行操作,具体函数在LCD模块头文件内。
例如在我的程序中使用这个函数显示小数点: LCD_WritePixel( LCD_PIX30, LCD_PIXEL_STATE_ON);
OPAMP:
ADC:ADC采用插入扫描方式采集温度信号,根据上面的程序原理图可以看到温度传感器接在INJ接口上,这样做的好处是一直扫描采集气体传感器的信号,间隔采集温度信号,通俗点说就是“好钢要用到刀刃上”~
UART:使用PSOC4的P41引脚,通过线束引到开发板J8的P12_6引脚,即可在电脑上用串口软件接收数据了。
PWM:
PIN管脚分配:
实物演示:
目前程序为温度和传感器信号电压值轮流显示,实际应用中,温度是不显示的,只用于修正气体浓度。 当前温度27.7度(板子在电脑散热口,用红外温度枪测试温度为29度,手册说PSOC4内置温度传感器精度为±3度,可以接受):
实物整体照片,显示当前采集到的氧气浓度值:
更新氧气浓度显示:这里直接使用传感器在空气中的输出值为零点,可以直接显示氧气浓度为20.9%。实际产品是不允许直接这样处理的 ,气体探测器在使用时是需要标定的 。
最后发一张串口发送当前气体浓度到电脑串口的图片:
可以看到气体浓度逐渐下降到稳定值,这是因为气体传感器的特性决定的,所有的气体传感器在使用时均需要一定的稳定时间,来保证传感器的输出信号达到一个稳定值,即我们通常所说的“老化”。(该图片是后补的,没有等到气体传感器稳定,最终是可以输出20.9%这个值的,条件允许的话,后续再补一张图)
补充一张稳定后的输出值,目前程序设置为前后2次采集到的数值相同不发送,所有电脑端收到的数据每次都是不一样的。
总结:PSOC4芯片可以实现高度集成的气体探测器方案,相对于分立元件方案可以节省大量成本,且易于开发调试。
PSOC4集成的模块非常方便于快速实现所需的功能,集成的IDE更是强大的助手。熟悉芯片功能后,可以大大加快产品上市速度。只是不熟悉PSOC的人上手还是有些难度的,比如我这种初次使用psoc系统的人。官网的帮助文档比较有限且比较笼统,即便是英文的也没有更深入和详细的帮助文档。这方面建议cypress向ST学习。
遗憾之处:时间关系,仪表行业常用的4~20mA电流环和modbus通信尚未实现。另外,原本想评估一下PSOC4的低功耗的表现,也未能测试。这些功能希望在以后产品中进行详细评估和测试。
Lesson learn:
1. 中断需要在退出时手动清除标志位,具体的标志位需要自己在相应模块的头文件里面找。- 我在这里颇费了些时间才搞定。
2. OPAMP运放的引脚是有限制的,尽量按照手册里面的规定使用。
3. Creator内有诸多模块的例子,多参考参考。
PS : LCD段码驱动部分参考了 @蓝雨夜的教程,多谢他的共享{:soso_e181:}{:soso_e183:}
|