在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1714|回复: 0

[资料] 【原创】基于MSP430的湿度计及定标

[复制链接]
发表于 2012-8-5 00:24:57 | 显示全部楼层 |阅读模式

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

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

x
       这算是我最后一个用单片机做的项目,到现在已经隔了2年多了。发现对软件上很多细节的地方都生疏了,而硬件则还好。可能是太久没摸单片机的缘故,也可能是用习惯了FPGA,针对任何应用首先考虑的方案都是使用FPGA的解决方案。当然,对于商业应用FPGA还远没有达到取代单片机,甚至完全取代dsp的程度。我想,随着FPGA的普及,尤其在我们这代,学DSP的人越来越少,MCU又五花八门,arm/CorteX有计算机的抢饭碗,学电子的大多都会选择FPGA。就我所在的小圈里,真正能接触到科技前沿的毫无例外全是FPGA,其他的大多数只能停留在商业层面。话虽如此,不过现今赚钱才是硬道理,行行都能出状元。前段时间看科技频道我爱发明,就有一个人发明了一个光控锁发家了。这也充分说明了单片机也有大智慧,不必一味的追求高科技。

      下面和大家一起分享一下这个湿度计,顺便我也小总结一下。
      实物图如下:


                               
登录/注册后可看大图


上位机软件GUI界面:


                               
登录/注册后可看大图

        系统功能概述:该湿度计由湿度采集和显示两部分组成,显示部分通过串口排线与采集部分相连,并采用7段式LED显示湿度值,定标所需的最小二乘法直线拟合参数由上位机软件计算完成并将参数发回湿度计进行定标处理。软件的定标也分手动和自动两部分,定标功能和湿度控制器类似。参见http://bbs.ednchina.com/BLOG_ARTICLE_3006306.HTM


       由于湿度显示部分较简单,接下来主要介绍湿度采集部分和上位机软件部分。
       湿度采集板概述:该板的主要特点就是小,板子的尺寸只有54*11(mm)。在这个尺寸上放置了单片机MSP430F2132、CD4046、MAX3232、MC34063以及相关的外围电路等。至于电路原理和湿度控制器一样。印象最深的就是手工焊接的时候老是丢东西,而且这款430小单片机不是被静电打坏,就是被焊坏。开关电源的开关芯片也是如此。所以,以后要是再有类似的活我肯定是不合格的,得请专业人士来弄。
     上位机软件概述:该软件是在串口调试助手代码的基础上修改的,当时并不是不熟悉VC或者其他语言,主要考虑到自己是学电子,以后主要从事信号处理的研究。参考上面贴出来的GUI界面,简单介绍一下各部分功能。

左板块:串口调试功能。扩展了10进制显示,uint32与float32发送。

右板块:湿度定标功能

1:设定任意5个由低到高的标准湿度环境

2:手动读取湿度值,记录读取次数,5次循环显示,清除数据。

3:定时自动读取湿度值,可设置环境切换时间与取样等待时间。

4:5次取数后进行数据拟合,打开图形窗打印拟合曲线与样点。同时得到拟合曲线方程系数,等待发送。

PS:通过调试已经加入了系统运行调试操作出错处理消息框。


        从打印出的菜单中可以看到有0~4这五种操作模式,单片机的程序和网上很多开发板的test程序类似。
       接下来参考我以前写过的文档,将当时联调所遇到的问题以及怎么解决的总结一下(解决是解决了,但分析的原因可能不正确)。

所遇到的问题解决办法
1.如何通过430单片机发送数据到PC中使Matlab GUI中的Edit控件换行,用于美化打印的命令菜单。原因:Edit控件接收两种换行命令ASCII码10(LF),16(CR),使用10容易出现跑死,猜测是因为串口接收过程中,定时回调函数与输入缓冲区满回调函数对Edit控件的赋值过程冲突,造成程序跑死。而使用16正常。
2.如何通过PC向430单片机发送4个byte以内的各种数据类型。在发送4byte数据时,单片机中uint32能实时转化保存,而float32不行原因:之前的接收方法多此一举。因为经过调试发现串口发送的本就是相应数据的数据格式,不必接收后转化为相应类型再保存,可直接受完将缓冲数组保存至FLASH,读取时使用指向需要类型的指针即可。
3.MSP430F2132单片机在IAR环境中,调试容易出现堆栈溢出现象,FLASH各种数据类型存储不方便。系统涉及到长字符串的处理,C语言处理麻烦。设想使用C\C++混编。堆栈溢出的原因:在2132接收中断处理函数中分支语句不能嵌套2层以上,特别对于分支较多的程序,不能使用switch语句,容易堆栈溢出,同时不能过多的在函数中设定static变量。设定IAR堆栈不能超过250。深层次的原因不详。对于FLASH操作可使用C++中函数重载的方式,对于字符串问题可使用C++中string类,效率比较谁高谁低占不清楚。


        经过这两个单片机项目的洗礼,可以说当时几乎把MSP430大小系列的单片机拥有的资源都用了一遍。相比早前用的STC,ARM7,她最大的优势就是低功耗编程模式。所有的代码都是在中断响应内完成的。这完全得益于430较其他单片机复杂的系统时钟结构。最近,我刚接触到了日本的Renesas(瑞萨)M16C/62P系列单片机。要知道,在十大芯片供应商中,以单片机为主的就是瑞萨。我个人认为瑞萨应该就是单片机之王。而在我们身边,又有多少人了解这种单片机。真正看过德国人和日本人做的东西的人就知道,他们一直用的东西到我们手里后,大多都被认为是我们已经被淘汰的东西,但结果却是他们的产品反到经久耐用。我想这就是大量引进外资,进口芯片让我们思想上形成的弊病,求新求快,反正有钱好办事。在这样的思维方式的牵引下,要想摆脱制造转型设计不知道有多难。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-20 04:09 , Processed in 0.022846 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表