本帖最后由 kpzclxtx 于 2013-8-13 23:29 编辑
斑竹原野建议我将内容整理一下,文字就不管了,想着把我修改的所有程序都传上来大家看着也没意思,本来就不是什么高深的东西,呵呵。
所以将我遇到的问题自己能够想到的不算是经验的经验给传上来,希望对做超声波的童鞋一点帮助(特别是我们学校的就爽了,不过尽量换方案吧,要不然又会说你抄袭,嘿嘿) ,将程序的源文件和HEX文件也传上来。
问题:
1、尽量不设全局变量:1).计算后重新调用时容易出错,造成在显示计算等发生调用错误eg:计算最小时只显示最小(num改为局部变量),通路显示错误等; 2).占用程序空间大,程序执行力变差。 2、由于程序执行以及距离计算比较快,故执行速度比较快,若外部中断使用跳变沿触发,则在每次计时开始后开启外部中断可能会产生一个微弱跳变沿,造成中断误触发,引起测距错误;故使用电平触发模式。
通过此可得出:delayms(1)盲区5cm,delayms(2)盲区12cm。
3、同上因,若使用单一中断(eg:INTR0),在第二次测量时,容易受到前次测量余波干扰,造成误动作,是第二次显示结果为盲区距离。
4、同上因,若使用单一定时器,会因为使用太快,定时期可能还未来的及复位造成误动作,引起第二次测量直接溢出。
使用双定时器非层次使用,结果稳定,但以结果不是很稳定。
5、在使用555时,发现理论计算40KHZ脉冲需要R1=15K,R2=5.7K左右,但在实际调试过程中,发现R2=1K左右可以形成稳定、占空比50%的稳定脉冲,原因不知;
6、同上,理论使用的1nf的电容,若使用瓷片电容不能形成理想40K脉冲,改为1nf独石电容解决此问题。
7、CX20106A的2脚电阻可以适当调节降低灵敏度提高准确度
尝试:使用P1.0口给CX20106A上电控制,不可行,原因:供电时间短,接收处理滞后
测温问题
1、18b20使用时问题:85度问题 由于18b20初始化默认0x0550即85摄氏度,解决这个问题刚开始设置转换温度后延时甚至已达3、4s,不仅容易陷入死循环,且没有解决问题。
后来从读字节时序命令开始重新修改延时操作,解决问题,发现是写操作(温度转换时)时程序容易写失败导致转换失败。
因为18b20对时序要求严格,手册建议使用汇编编写程序,C易出错。//这个,真不理解,很怀疑
2、对于85度问题网上有如下起因介绍,经排除发现是时序延时不准问题
1.电压不足,有小于4.8V只显示85度只说,故将其直接接标准5v未解决,由于万能版上各个器件之间的影响,18b20电压不足4.8V、
2.转换温度后延时不足,手册上说是大约750MS即可转换完成,
3.多测几次,舍弃首次测量值,尝试无效
4.将写时序延时修改之后,再将测量延时设置600MS基本解决问题,但程序运行缓慢,故将延时600改为显示1s左右解决问题同时,
不让上电后数码管显示落后显得程序的不足,可将其成为上电仪器预热过程,同时也不需延时就解决了初次测距显示FFF的问题
5.上电后延时太少,使18b20进入程序后还尚未进入工作状态,延时发现非此问题
还有其他问题想不起来了,有做这个东西的可以互相交流么。。。:lol
小弟在坛里潜水已久,一直没有啥贡献。看到这个活动瞬间心动。最近在做一个激光二极管的驱动,PCB刚出来,准备过几天放到LIANZAI连载那个活动里。这里就将以前大四自己做的第一个东西分享一下下。主要还是想吐槽一下下,各位大牛请拍砖、、、、、
楼主本科是在西安一所二本学校,专业是测控技术,光电方向。现在越来越觉得上一个好学校的优势:开放实验室、能够最早接触学习面相应用的能力,而楼主的学校说是光电方向、测控,可是向单片机这么重要的课程直到大三才开,还是草草讲一讲书本上的东西,没有人告诉你这个应用很重要,也没有足够的试验环境,一直浑浑噩噩的混学分、做兼职、靠四六级,第一次知道单片机可以做东西是生产实习,还是老师给好电路、元器件,安排好焊万能板的进程,程序也给你(最后还没有一个同学做出一个结果)。至于什么电子大赛,直到快比赛了才知道有这么回事,还是自己一不小心给导员整理东西发现的一个被埋没的报名通知。不过值得庆幸,那会楼主正准备考研,找方向,发现对这方面特别感兴趣,所以考验方向选择了北邮的模式控制。大四做毕业设计,也选了一个单片机的课题:超声波测距,只是要求实现单路测距就好了,至于精度什么玩意没有要求,经费也有限100块钱。
因为在论坛里看到别人做的东西,也看到了电赛的许多设计,特别喜欢。所以想做好毕业设计。于是狠心花了近300大洋买了郭天祥的51书和实验板,在考研复习时候抽出一点点时间学习,从流水灯,到定时器,到串口,到18B20测温,当时觉得很有成就感,现在看来当时还是太嫩,许多东西都没有深入理解,程序觉得就那么回事,自以为看懂就好了,都是直接复制粘贴,自己手打的也就流水灯了,这在后面做毕业设计吃了不少亏,而且对于PCB没有多少认识。
考完研,很遗憾,没有考上北邮,后来找调剂,最终找到北京工大激光研究院,迷迷糊糊的(最主要还是害怕没工作也没研读,至少是211、国家重点实验室不是)就到北京了。
大四下学期,一心想把毕设做好,拿一个优秀毕业设计也好啊。于是苦苦思索,看了很多资料,在各大论坛学习大牛们的经验,最后决定做4路超声波循环,看到温度对声速的影响,所以就再加了温度补偿模块。没有钱,毕设导师也不让画PCB,所以只是自己在万能板上搭电路。
最后连着两个月几乎每天都熬夜到3点多,将郭天祥的书重新学习了一遍,然后自己找方案,请教大牛,方案里面主要的超声波接收模块,当时觉得自己用运放做根本就不可能完成,就参考别人用了一个CX20106A的芯片,结果就因为这个芯片在最后答辩时候被答辩老师成为抄袭,波形产生我是直接就想到用的555,因为刚考过研考的是数电模电。硬件调试的时候,第一次一个人用示波器,没有老师指导,我竟然连最基本的共地都忘了,好长时间都看不到回波,而CX20106A芯片的外围电路的参数也画了好久才调的满意。最重要的我在调试555的时候发现,按照计算的参数搭电路,相同容值的独石电容相对瓷片电容出来的波形要好很多,当时很不理解,直到快毕业了某一日突然想到一个寄生电阻的问题,可是可是,可是,可是答辩时候我提出我的疑问发现,某一个白痴答辩老师说了一句:这么神奇,见识了:(:L汗死了。。。。。。
说了这么多,其实就想告诉大一大二的学弟学妹们,早点自己为自己铺路,自己想办法学习,靠学校不靠谱的
感觉做完毕设,才算是真正对单片机入门了,从硬件调试,到一句一句改变代码看对结果的影响,走了不少弯路,每一个模块的程序调试都花费了好长时间,一个小问题就问好多人才理解、修改正确,就简单的数码管显示都改了好多次参数才得到一个满意的显示结果。但确实知道了一个系统的完整的过程,并且真正的理解了什么叫调试。
遗憾的是以为上研后就不会再深入搞了,但暗暗决定自己业余一定要做点小东西。
所以今年(研一),发现实验室一个蝶形激光二极管驱动买下来竟然要2千多,就自告奋勇在实验室工作之余做一做,花了好长时间学习画PCB并且看了很多大牛的PCB揣摩经验,现在PCB已经出来了,具体的准备过几天放在“连载”活动,还请大牛到时候给给意见,帮忙看看,呵呵。
最最无奈的事情来了,本来对光纤激光器的相关已经学习好长时间了,而且跟师兄师姐也做了好多的实验,但是导师突然要开RFIC/MMIC方向,要我过去。但问题是已经快开题了啊,有点不愿意,但觉得跟模电相关又有点舍不得,纠结死了。总之现在已经注定几乎没有多少时间搞单片机了,郁闷了好多天了都。
废话不说了,估计吐槽多了也该呗关小黑屋了,版主手下留情啊~~拜谢
这个系统能够实现四路超声波测距,最远实测7m左右。使用555产生40KHz驱动发射超声波,CX20106A接收回波;DS18B20进行实时环境温度测量,对声速进行补偿,程序里也对由于程序执行时造成的误差实测进行了校正,3m内精度达到1mm实测没有问题,程序显示部分:首先显示环境温度,第一个数码管显示1、2、3、4表示方向,之后的表示距离,最后显示最小距离和方向,呵呵。
最终没有申请到院里毕设的优秀,原因有:1、没有PCB,老师觉得工作量少;2、我要申优的话许多材料需要某白痴老师写,而此老师开始说我硬件抄袭,在我拿出我是555驱动+是四路测量+温度补偿之后,又说我软件抄袭,在我当面30分钟之内重新写出温度测量程序和单路测量程序并演示正确后,不了了之。
最后最后,还是建议,给孩子选一个好学校吧,孩子们尽早自己给自己准备后路吧,靠别人不行的。考研一定要自己感兴趣的才行,不感兴趣甚至讨厌的专业宁愿不读也不要选。。。。
下面是几张图片,原理图+实物图+程序都放在这里,请大牛们拍砖。
正面
程序修改过程,听网友建议的,所以所有程序修改的都有存档,,呵呵
ceju.rar
(6.81 KB)
这个是源程序和HEX文件
程序 实测数据.rar
(16.75 KB)
这个是程序TXT保存的和最后一次测的数据
|