在04年刚刚毕业时,有幸进入了TPMS行业,和几个同时兴致勃勃的干了起来,当时并不知道TPMS是个什么东西,也不会象现在这样对行业有什么研究,只知道把工作做好,拿到应得的工资,但也是拉开了大干一场的架势,毕竟刚毕业,对技术也是很有神秘感,特别是感觉自己写的程序烧进片子后,她按照自己的思路跑起来时的飞速的快感,于是不分昼夜的干,从11月份搞到05年的1月份,终于出了样机,当时的样机现在看来,就是在学校里做的演示板,就是四个发射模块发射程序,一个接收模块接收数据,然后加四展灯显示哪个模块收到信号了,但当时可没有象现在这样对这个事情斥之一鼻,那时可是兴奋的不得了,当时我们的副总可能是为了培养我们的情绪能维持下去,“产品”简单但也是陪我们喝酒喝了两个小时,唱歌唱了两个小时,老板也在旁边“瞎起劲”,每个人给了我们5K的奖金,当时自己感觉就是最厉害的人物了,感觉技术也不过如此,TPMS,靠,也就是这个diao样!!!
趁着兴奋劲,马上开始进行下一步的动作,出正式样机,装车测试,又奋斗了几个月,产品出来了,一装车傻眼了,有如下几个问题:
一、 信号质量差
产生这种问题的原因当然是高频没有做好了,想想就可笑,当时的公司连台示波器都没有,就不用说什么品谱仪啊、信号发生器啊、网络分析仪啊等等,连听都没听过,你想,高频能做吗,不客气的批评自己,连什么叫高频都不知道!!!后来闷了几个昼夜,访亲问友,求遍了人,终于搞明白,搞技术,特别是搞高频,原来还需要示波器,信号发生器这种“高档”的仪器,呵呵,可笑吧!!于是马上买仪器,买设备,学习操作方法,调匹配,调频偏,提高灵敏度,增加发射功率,装车,拆下来,再装,再拆……;不分昼夜的忙活了三个月,终于装在轮胎上能收到信号了,你还别说,效果还算可以(我现在想,当时应该是蒙对的);
然后就是装车测试,那两天时间也够爽的,每天早晨起来,开着装着产品的车,把东莞的大街小巷逛了个边(当然路边的美女也是不放过,要多盯两眼的,嘿嘿),但是,有一天正看着路边的"野花"时,问题出现了,而且是大问题;
二、 漏气误报警
“左前漏气轮胎漏气警告”,同时,刺耳的蜂鸣声也同时响起,把我们三个人瞎坏了(同时也有点窃喜,终于发挥作用了),”轮胎漏气了,快停车”,几个人同时喊,于是马上停车,几双眼睛同时盯着显示器,看气压数据是否改变,盯了10分钟,气压一点没变,10分钟内,漏气报警发生了三次,于是灰溜溜的跑回了办公室,马上检查软硬件,当时那个水平,根本就查不到原因的,还是我们副总厉害,想到了用电脑连接串口,显示原始数据,在事故发生点接收原始数据,然后保存,回来分析,发现在那个地方,每搁一段时间,就会有错误数据被接收,当然漏气标志位也是非法存在;
几个人抓掉了几千根头发,同时又是访亲问友,模拟测试等等,最后终于知道问题可能出现在两个方面:
1、 漏气判断方法不合理
最古老的判断方法是,在多长时间内,气压变化了多少,就认为是漏气,没有采取特殊处理,所以,在温度生高或者降低时,气压会随着温度变化,同时,对于变化的气压没有经过特殊处理,就是判断当时的气压和原始的气压,所以会产生这个现象,在这里,建议大家采用最大最小代替加时间累计法则,这样,误报的问题减少70%;
2、 校验程序不合理
最古老的高频校验数据,是累加数据归零法则,这种校验方式,做做DEMO板还可以,但真正装在轮胎内,能把你害死,在特定的环境里,能接收一大堆的错误数据,并且校验也可以通过,在这里,建议大家用CRC校验法,最好后CRC16的,更稳定,相关CRC16的检验原代码在本人的相关文章里,有提到,在这里就不增加字符了(可参考本人在ALIBABA的博客或者在2@1@IC论坛里本人发的帖子);
以上两种方式都加上后,对于漏气误报的问题,已经解决,当然结
构方面也是解决误报的重要因素,但在软件硬件方面,本人做的产品到现在为止,还没有听说有误报警的现象,当然其他人做的也应该没有,也许还会有更好的办法去解决这个问题,但不管是黑猫还是白猫,抓到老鼠就是好猫,因此,那些仍然利用累加校验法则的商家需要注意了,请升级你的产品!!!
QQ:55839373 09年7月29日夜
已验证并投入使用的小程序:lol
*****************************************
**名称: CRC_SOFT
**功能:完成对接收到的数据进行CRC检验计算
**输入:DATA------DATA+8
**输出:BUFFH,BUFFL
****************************************
LOW_Polynomial equ $10 ;CRC校验
HIGH_Polynomial equ $08
CRC_SOFT:
clrx
clrh
clra
mov #LOW_Polynomial,DAT3
mov #HIGH_Polynomial,DAT4
mov #$ff,BUFFL
mov #$ff,BUFFH
mov #!56,COUNT
mov #8,NUM0
LDX #NB_DATA
ADD DATA-1,X
STA DA_BUFF
DECX
CRC16_loop0:
STA $FFFF
clr DAT2 ;x1
clr DAT1 ;x0
brclr 7,BUFFH,CRC16_loop1
bset 0,DAT1
CRC16_loop1:
clc
lda NUM0
cmp #0
bne CRC16_loop2
ADD DATA-1,X
STA DA_BUFF
DECX
mov #8,NUM0
CRC16_loop2:
STA $FFFF
lsl DA_BUFF
dec NUM0
bcs CRC16_loop3
bclr 0,DAT2
jmp CRC16_loop4
CRC16_loop3:
bset 0,DAT2
CRC16_loop4:
lda DAT1
eor DAT2
sta DAT1
brset 0,DAT1,yihuo
jmp CRC16_loop5
yihuo:
lda BUFFL
eor DAT3
sta BUFFL
lda BUFFH
eor DAT4
sta BUFFH
CRC16_loop5:
lsl BUFFL
rol BUFFH ;CRC_H
lda BUFFL
ora DAT1
sta BUFFL ;CRC_L
STA $FFFF
dbnz COUNT,CRC16_loop0
RTS
CRC_Check:
JSR CRC_SOFT
LDA BUFFL
CMP DATA+1
BNE Check_Bad
LDA BUFFH
CMP DATA
BNE Check_Bad
RTS
Check_Bad:
RSP
sta $ffff
JMP Loop
MAIN:
Loop:
JSR RECEIVE_IN
BSR CRC_Check
STA $FFFF
JMP LOOP