就以这篇文档来开始我的csdn吧。
2021TI杯电赛结束了,趁着现在刚刚结束还对一些细节能记起来的时候,来写一份总结文档。
先介绍一下工程吧,这次电赛选题选了H题用电器分析识别装置,题目要求能够采集交流电路上的用电器特征参数显示并识别出来。在第一天选题的时候我们有两个选题方向,第一个是一道信号采集分析的题,需要做傅里叶分析,和专业相关度高,而且有经验,但是必须采用TI公司的单片机。本来我提前已经准备过一些ad采集的代码,但是是基于stm32的,没有用过msp430系列,需要重新学习,导致最后放弃了这个,做了另一个算是比较简单的H题。H题不限制器件,可以使用集成好的模块,指导老师带过17年的电赛,了解这个模块,也就做了,模块可以采集电路的电压,电流,功率,功率因数信息,也就是说不需要我们去采集电路的信息,只要和模块通信就可以了,可以说是相对很简单了,软件只需要通信和显示就可以,就是我只需要写这两个部分代码就行了。显示由于在暑假准备电赛的时候就做好了,也就是说准备通信就可以了。器件购买以后看说明文档,有串行UART接口和485通信接口,没有接触过485就选择了串行TTL,所以第一天下单采集模块后就去重新复习了串口通信,看正点原子的视频,单片机和电脑使用串口调试助手通信没有任何问题,收发都非常稳定,当时已经注意到模块使用的其实是modbus通信协议,但是由于对通信协议并没有很多了解,就选择性的忽视了这个部分。这也就为后边出现的问题埋下了隐患。第一天调试好串口后也没啥事就早早回去睡觉了。第二天起来硬件还没做好,也还是没啥事,就优化了一些代码,其实也基本属于没做什么。
第三天硬件搭好了,下午模块也到了,开始调试,发现不管怎么发送指令,模块毫无反应,甚至上边的一个小灯都没点亮,一直以为是代码问题,就整整调了一下午代码却毫无反应,直到晚上一个同学说上边怎么还有个小灯,我们意识到问题,去找器件的老板去问那个小灯的情况,老板说那是供电指示灯,只要通电就会点亮,才发现原来是5v直流供电电源出现了问题,模块的地线和电源的地线没接上,是硬件的问题。于是去另一套硬件去调试,上电之后果然小灯点亮。确实是上一套硬件的问题,这个教训告诉我们,千万不要过于相信硬件。本来以为这次换了硬件之后应该就没问题了,但还是不行,最开始的时候单片机给模块发送指令,小灯还会闪一下,只不过没有收到返回的数据信息,后来不管怎么发指令,小灯都不闪了,再三确认软件没问题后就去调试硬件,通过示波器能看到发送数据没有问题会出现方波抖动,但是模块收到指令以后没有闪烁,就去下一节电路调试发现模块收到指令并没有返回数据,应该是模块的通信出现了问题,去问老板,老板说板子上自带了485通信,串口可能不太行,于是,我们去了解了ttl转485通信接口的芯片,只需要在原有基础上加一路控制信号就可以,发送前高电平,发送数据后,再拉回低电平等待接受数据返回,果然加上之后,小灯开始有闪烁了,证明小灯收到了我们发送的数据,但是没有单片机没有数据显示,应该是传回数据的通路出现了问题,通过示波器一级一级分析,单片机的RXD引脚也收到了返回数据,但是数据没解析出来,分析是通信协议出了问题,到这个时候已经是7号凌晨4点了,由于下一步调整需要很多时间,就先放下睡觉去了。
6点起床后,开始和几个同学分析通信,一步步捋下来,最有可能问题出现在通信协议上,于是,去查看文档,就是之前的提到的modbus通信协议,分析他的帧结构,发现我们发送数据的指令没问题,接受到数据之后解析数据时有问题,这就解释的通之前我们发送数据小灯会闪,却没有收到返回数据的现象了。于是着手解决串口接受数据的中断服务程序的问题,经老师提示,忽视了协议中原有的CRC校验码的存在,将返回的数据无论对错全部存储下来,在帧结构中直接取出需要用到的数据字节,对其他识别控制纠错字节一律丢弃,改过后的代码经电脑测试可以任意收发数据,取出的数据也正确没有问题,但是在和硬件联合调试过程中却问题重重,于是在另一位同学指导下,对程序设置断点一步一步分析寄存器和串口数据的传送来优化代码,最终能够出现正确数据,虽然在噪声的影响下并不是百分百能够解析出正确数据,但是好歹能出来数据了,这时已经是7号中午12点多了,代码烧写后经过一系列测试发现可以成功,包括自制用电器的测量数据也基本吻合,于是便暂时放下吃饭了,吃完饭回来着手开始编写整个工程流程的程序,包括按键,学习,识别等功能。通过电脑串口模拟,在开发板上几乎可以实现整个流程了,就差数据的存取和识别。这个时间所有组的硬件都几乎已经调节好了,需要配合软件进行测试,于是我将写好的程序进行测试,硬件收发没问题的板子数据解析却全是乱码,这个时间已经来到了下午5点左右还有3个小时比赛即将截止,出现的问题却无从下手,最后的最后,也还是没有解决这个问题,比赛结束封箱。
回顾整个比赛,最大的失误就是在于最开始没有重视通信协议的问题,经过这次也才意识到通信接口和通信协议两个部分的区别与联系,接口规定了硬件的一系列标准,包括收发电平等一系列与硬件有关的参数。而协议的功能则是用来生成通过接口发送数据帧的内容,和收到一帧数据后对整个帧的解析。最后,我在比赛结束后休息洗澡时终于想到怎么继续调试验证了,就是将模块和电脑通过串口调试助手来进行收发数据的对比,经过这一环节就能验证到底是哪个部分出现了问题需要解决,不过比赛已经结束了,我也没有时间再继续做完这个东西了,就把它写下来希望某天如果需要用到这个东西时提供一个解决方法吧。
最后,经过这次比赛,实践能力提升不少,第一次对整个工程有了一个从设计到实践再到验真调试的过程,之前虽然也有一次比赛参加经历,不过那次更多的是对老师的设计进行了复刻,并没有很多自己的思考,之前做的一些小实验也更多的像是对设计者设计的复刻,自己的想法能够被实践的很少。再有就是本来比赛的目的是为了考研专业课模电和数电的,可是做的内容却并没有什么直接关系,又浪费了五天时间,需要在之后的40多天里更加努力地复习了。最后呢就是在比赛中遇到了很多很优秀的同学,虽然他们可能在一些实践上没有什么经验,但是他们无论是在调试过程还是代码编译中都帮了我很大的忙,有很多我自己没想到的东西都是他们帮我注意到的,同时还学到了以前根本不会的程序单步执行验证的方法。就像是我第一次的时候也是没有什么头绪,每个人总要经历一个成长的过程的,希望他们也能够从这次比赛了解到自己的不足并着手开启自己的电子工程师的旅途。
|