技术文档

点温枪单片机 单片机小制作,感温彩虹杯垫

小编 2024-10-06 技术文档 23 0

单片机小制作,感温彩虹杯垫

有一位波兰爱好者制作了一款感温LED杯垫,如图8.1所示。这款杯垫可以感知杯中的饮料温度,并根据温度驱动板上的LED,发出暖色或冷色的光芒。这个设计创意得到了很多电子爱好者的关注。但是笔者个人认为,原版的设计存在一些可以改进的地方。比如,由于温度测定不需要精确,温度传感器不必使用独立芯片,片内二极管测温即可。另外,原设计中的LED采用并联结构,不能够独立控制颜色,尚有改进余地,于是我设计了这一款改进型的感温彩虹杯垫。

图8.1 波兰爱好者制作的感温杯垫

元件选择

为尽可能减少元件数量,我使用一片ATTINY24单片机,同时完成温度测量以及LED灯的控制。为了减少LED驱动所需元件以及简化布线,LED采用了ST505042。这款LED内置有ST313控制器,可以用串行双极性信号直接驱动,并可直接串联,减小了PCB绘制的难度。此外,由于这款控制器是采用恒流驱动方式,所以不会有闪烁的问题,同时也可以在3~5V下的任一电压处工作良好,不会出现因为电阻限流发生电压改变时出现的偏色问题。因此,无论是干电池、锂电池,还是5V或3.3V电源,都可以使电路良好工作。

设计原理

这个制作的电路结构比较简单,电路原理图如图8.2所示,PCB图如图8.3所示。设计时,为避免电源反接导致电路烧毁,在电源路径上串联了1个肖特基二极管。之后,使用去耦电容来滤除电源上的干扰。

图8.2 彩虹杯垫电路原理图

图8.3 彩虹杯垫PCB图

电路使用单片机内部的PN结测温,通过软件即可读到温度值。单片机使用一个I/O口连接到两个阻值相同的分压电阻,这样当I/O口输出电平时,两个电阻的中点电平为高/低电平,而当I/O口转为高阻状态时,电阻中点电平即可输出1/2VCC,由此可以生成驱动LED所需的双极性信号。

LED内置的ST313控制器使用1.2MHz以下的信号来传输信息,用1/2VCC后接低电平表示逻辑0,用1/2VCC后接高电平表示逻辑1,以此来表达每个LED所需的18bit颜色信号。当数据线闲置60µs以上时,ST313将移位寄存器中的数据锁存至LED的电流控制器中,以改变LED的颜色。由于我们的连线距离很短,所以不用考虑电磁干扰对于数据正确性的影响。但当长距离传输时,由于有1/2VCC的存在,可能会导致LED颜色出现混乱,需要采取措施减少干扰的影响。将LED串行连接,在第1个LED上接入单片机信号,就可以根据单片机输出的电平信号单独控制任何一个LED的RGB颜色了。

编程调试

为了对单片机进行编程,一般使用ISP(在线编程)功能进行程序下载。可是这一功能通常需要6条线,至少也需要除电源线外的4条线。这对于自行制作的单面电路板布线是有一定难度的,而且会部分破坏电路的美观。一种解决方式是使用单片机烧写座进行编程,这种方法的缺点是烧写座价格不菲,而且芯片焊接后较难再次编程。

我采用的解决方案是使用AVR的单线调试功能(debugWIRE)实现程序修改。DebugWIRE是使用单线双向接口的片上调试系统,除电源线外,仅需要1条线就可以实现程序的修改和调试。但是为开启debugWIRE功能,仍然需要焊接飞线来修改芯片的熔丝位。设置熔丝位完成后,即可撤除飞线,仅使用复位线这1条线来控制芯片的程序。这种方式唯一的要求是需要一个原厂的调试工具,如AVR Dragon或MKII。之后就可以在AVR Studio中直接仿真程序,并按需要插入断点,实时查看各变量的值,以调试程序的正确性。

需要注意的是,每次断点的使用都将减少Flash的寿命,所以最好不要用同一块芯片调试过多的程序,但调试完直接使用是没有什么问题的。正常结束调试后,芯片不会在上电时执行程序,在调试运行时拔掉调试线,即可让程序正常运行。使用debugWIRE时,复位线上不要有其他元件。不过,debugWIRE会略微增加休眠功耗,故对功耗要求高的应用最后要将其关闭。

温度标定

使用单片机测定温度时,需要考虑传感器的误差。由于单片机测温是使用片上二极管测温,所以误差比较大。在不经标定的情况下,可能只有±10℃的精度,所以需要使用标定方法来提高精度。对于电子测量来说,我们是用电信号来表达另一个物理量,也就是用电压来表示温度,并用ADC来转换为数字量。因此,我们需要电压与温度的函数关系,才能够用电压值来反推温度值。显然,我们需要知道单片机测量到的真实温度。我们可以用一个较高精度的温度计来获得温度值,市售的玻璃水银温度计、指针温度计或远程温度计均可,也可使用万用表附赠的热电偶,或者是经过激光标定的传感器,比如18B20。如果Geek精神够足,使用冰水混合物等非主流方法亦可。

得知温度后,接下来就是建立电压与温度的函数关系。由于我们最终要由ADC转换为数字量,所以数字量输出和温度的函数关系也是等价的。理想的情况下,我们要取到尽可能多的温度点,使任何一个输出值都被覆盖到,使用查找表即可用输出值反推温度值。但是,这么多温度点的覆盖往往是不现实的,我们只能采集有限个数据点,并拟合出函数曲线。一般来说,函数的次数要低于采样的数据点数,可以使用最小二乘法来拟合曲线。如果只需要结果,excel就能做到这一点。另外,如果想知道穿过所有点曲线的形状,可以尝试使用拉格朗日插值法来获得函数。一般工程上,采用等距离采集多个数据点,然后分段直线拟合就能得到比较不错的效果。

这个制作由于对精度要求不高,而且追求简单,我们假设数字量输出和温度的函数关系是线性的,而且每1℃的变化对应数字输出量变化1。我们只需要1个点就能确定函数的位置。当然,这一点处于待测区间之中会使精度高一些。在这种情况下,只要把待测点的输出值和标定点的输出值求差,并把这个差加到标定点的真实温度值上,就可以求到待测点的真实温度值。虽然精度仍然不高,但对于这个制作绰绰有余。

另外,传感器测定出的温度值可能会有少许的抖动,这会导致系统在临界温度上在两种模式间来回切换。所以,在温度的判定上,我采用了滞回算法,即在温度上升到40℃时切换到高温模式,而下降到35℃才能切换回普通模式。低温也应用类似算法。这样,系统不会被传感器的抖动所干扰,工作较为稳定。

制作方法

为组装整个杯垫,需要将PCB裁为六边形,并裁取一块与之形状一致的有机玻璃板,可以在确定切割线后用钢尺辅助,以钩刀划开。之后,在有机玻璃板中央钻孔,但要注意钻头速度不能太快,进刀量不要太大,以避免温度过高,导致孔边缘熔化。在有机玻璃板中央钻孔。如果有机玻璃板上出现了划伤,可以用热风枪加热损伤部分,有机玻璃的小划痕会在高温下消失。之后在PCB上打上热熔胶,将有机玻璃板粘接在PCB上。最后将导热胶从有机玻璃板开孔处注入,将开口的上表面和单片机连接成一体。这样单片机就可以测量到杯垫表面的温度了。制作出来的实物如图8.4所示。至此,将杯垫连接上电源,整个杯垫就会点亮,发出彩色的光芒,如图8.5所示,并可以根据杯垫上饮料的温度,变换出不同的颜色了。

图8.4 制作出的杯垫实物

图8.5 发光效果

单片机开发关键环节,单元测试详解

单元测试

单元测试是软件测试的最根本单位,是由开发人员执行以保证其所开发代码正确的过程。开发人员应该提交经过测试的代码。未经单元测试的代码在进入软件后,不仅发现问题后很难定位,而且通过系统测试是很难做到对代码分支的完全笼罩的。TDD就是基于这个层次的开发模式。

单元测试的粒度一般是函数或者类,例如下面这个常用函数:

这是一个功能非常单一的函数,所以单元测试对它非常有效。能够通过单元测试验证下列情况:

1.一般正常调用,如”9”,”1000”,”-1”等

2.空的nptr指针

3.非数字字符串,”abc”,”@#!123”,”123abc”

4.带小数点的字符串, “1.1”,”0.111”,”.123”

5.超长字符串

6.超大数字,”999999999999999999999999999”

7.超过一个的-号和位置错误的-号,”—1”,”-1-“,”-1-2”

假如atoi通过了以上测试,我们就能够放心的将它集成到软件中去了。由它再引发问题的概率就很小了(不是完全没有,由于我们不能遍历所有可能,只是挑选有代表性的异常情况进行测试)。

文章相对比较长,字数比较多,大家可以先打开头像关注我,之后慢慢看,///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像左下角黑色字体加我也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///

以上的例子能够说是单元测试的典范,但现实中中却常常不是这么回事。我们常常发现写好的函数很难做单元测试,不仅工作量很大,效果也不见得好。其根本的理由是,函数没有遵循好一些原则:

1.单一功能

2.低耦合

反观atoi的例子,功能单一明确,和其他函数简直没有任何耦合(我上面并没有写atoi的代码达到,大家能够自己达到,希望是0耦合)。

下面我举一个现实中中的例子。

这是一个简略的TL1命令发送和解析软件,功能需求描述如下:

?通过telnet与TL1效劳器通讯

?发送TL1命令给TL1效劳器

?解析TL1效劳器的响应

TL1是通讯行业广泛运用的一种协议,为了给不熟悉TL1的朋友简化问题,我定义了一个简化的格式:

举例:

命令:GET-IP-CONFIG:1:;

结果:

命令:SET-IP-CONFIG:2:172.31.2.100,172.31.2.1,172.31.2.3;

结果:

软件的最上层可能是这样的:

以GET_IP_CONFIG为例,这个函数应该完成的功能包含:

ü建设telnet连接,假如连接尚未建设

ü构造TL1命令字符串

ü发送

ü接管反应

ü解析反应,并给IP_CONF构造复制

ü返回

我们当然不希望每个这样的函数都反复达到这些功能,所以我们定义了几个模块:

1.Telnet 连接管理

2.TL1命令构造

3.TL1 结果解析

这里我们来分析TL1结果解析,假设设计为一个函数,函数的原型如下:

这个函数的功能是承受一个字符串,假如它是一个合法且已知的TL1回应,则将其中的结果提取出来,放入一个字典对象中。

这原本会是一个很便于进行单元测试的例子:输写各种字符串,检查返回结果是否正确即可。但是在这个软件中,有一个很特殊的问题:

TL1Parse在解析一个字符串时,它必需要知道当前要处理的是哪条命令的回应。但是请注意,在TL1的回应中,是不包含命令的名字的。唯一的办法是运用CTAG,这个命令和回应一一对应的数字。Tl1Parse首先提取出CTAG来,其次查找运用这个CTAG的是什么命令。这里产生了一个对外调用,也就是耦合。

有一个对象维护了一个CTAG和命令名字对应关系的表,通过CTAG,能够查询到对应的命令名,从而知道怎么样解析这个TL1 response.

如此一来,TL1Parse就没法进行单元测试了,至少不能轻易的进行。通常的桩函数的办法都不好用了。

怎么办?

重新设计,打消耦合。

将TL1Parse拆分为两个函数:

这两个函数都能够单独进行完整的单元测试。而这两个函数的代码根本就是TL1Parse切分了一下,但是其可测试性得到了很大的提高,得到一个可靠的解析器的可能性自然也大大提升了。

这个例子演示了怎么样通过设计来提高代码的可测试性—这里是单元测试。一个随意设计,随意达到的软件要进行单元测试将会是一场噩梦,独有在设计的时候就考虑到单元测试的须要,才能真正的进行单元测试。

圈复杂度测量

模块的复杂度直接影响了单元测试的笼罩率。最著名的度量代码复杂度的方法是圈复杂度测量。

计算公式:V(F)=e-n+2。其中e是流程图中的边的数量,n是节点数量。简略的算法是统计如 if、while、do和switch 中的 case 语句数加1。合适于单元测试的代码的复杂度一般认为不应该超过10。

扇入扇出测量

扇入是指一个模块被其他模块所引用。扇出是指一个模块引用其他模块。我们都知道好的设计应该是高内聚低耦合的,也就是高扇入低扇出。一个扇出超过7的模块一般认为是设计欠佳的。扇出过大的模块进行单元测试不管从桩设置还是笼罩率上都是艰难的。将系统的传出耦合和传入耦合的数量联合起来,构成另一个度量:不稳定性。

不稳定性 = 扇出 / (扇入 + 扇出)

这个值的范围从0到1。值越接近1,它就越不稳定。在设计和达到架构时,应当尽量依赖稳定的包,由于这些包不太可能更改。相反的,依赖一个不稳定的包,发生更改时长承受到伤害的可能性就更大。

框架对单元测试的意义

框架的应用在很大程度上能够帮助进行单元测试。由于二次开发者被限定达到特定的接口,而这些接口势必都是功能明确,简略,低耦合的。之前的框架示例代码也演示了这一点。这再次证明了,由高水平的工程师设计出的框架,能够强制初级工程师产生高质量的代码。

对单片机感兴趣的朋友可以找我,我录制了一些关于单片机的入门教程,有需要的童鞋找我拿就像,免费的,私信我“林老师”就可以拿~点击打开我的头像就能领取。

相关问答

温枪 主控芯片的功能特点是什么?

额温枪的关键技术在红外测温传感器和温度补偿算法额温枪通过检测人体辐射出的红外线计算出体温。任何物体只要温度高于绝对零度,就会向外辐射红外线,人体也不...

我想知道!受欢迎的超市扫描枪多少钱,超市扫描枪服务态度好...

[回答]方法/步骤分步1/5步,引进小财迷收银系统以后,你要相应的配以硬件设置,你需要准备一台普通的电脑、一个条码扫描枪,一台小票打印机,一个钱箱,条件允...

主板上的BGA芯片,是不是一定要使用BGA焊台来焊接?要注意什么?

但是也有很多维修的师傅,是通过热风枪吹的,经验比较丰富、手法非常精妙。BGA的手工焊接使用热风枪或者焊台都可以,但是都需要多练习、需要经验。BGA焊接方法...

51 单片机 上贴片芯片能否替换?

看封装,如果是引脚较少的话可以用电烙铁搞,如果引脚多的话,你要有个热风枪,没有的话就放弃吧,把坏的单片机吹出来,在焊盘上涂上松香,再搞点焊锡到焊盘上去...

盘点器扫不上码:盘点器有些条码扫描没反应,显示条码错误怎么处理?

如果用到电脑,则串口扫描枪接电脑或工控机,LCD也接电脑,然后电脑做一个小软件,监控串口读到扫描的条码,就去数据库查询商品条码对应产品名称,然后在LCD屏幕...

通讯板故障怎么查?

坏...❷看贴片电容和贴片电阻有裂痕或者发黑并且用万用表测量蜂鸣器响,说明电容、电阻损坏。❸给整个直流电路(从整流管处断开)或部分直流电路或某个器件(自...

电热炮自制方法是什么?_住范儿家装官网

电热炮的原理完全不同于电磁炮,其结构也有多种形式.最简单的一种是采用一般的炮管,管内设置有接到等离子体燃烧器上的电极,燃烧器安装在炮后膛的末...

大专工科类,略懂电路,想自学电子电路,倾向于学电路设计类,需要哪些书和工具?

略懂电路,相信你应该对电阻、电容、电阻等基础电子元件都认识要想以后从事电路设计,一要电路看得懂、理论要理解,二要画图软件使得好。书籍建议学习模电、数...

硬件工程师在工作中会用到哪几个软件?

它是目前最为出色的仿真单片机及外围器件的工具。相必大家都有这样的疼点,在我们想做一个实验的时候,因为缺少一个电子元器件,而不得不中止整个实验的进行,这...

罗茨流量计按用途分类可分为什么?

[回答]损失小、量程比宽,适用于微流量的测量。4.特殊工艺处理使流量计运转更可靠、使用寿命...3.始动流量小、压力损失小、量程比宽,适用于微流量的测量...

猜你喜欢