硬件设计专业暑假实习总结
今年的暑假是在一个专门为烟草行业制造自动化生产设备的公司实习。实习的原本计划是看能不能将ARM+Linux这样的软硬件平台应用到烟草行业中。
我们总共三个人,我和我们班的一个,还有一个研究生,实现的地方由导师安排。 实习的公司叫“圭彬光电”,公司有两处工作地点,我们所在的这一处位于宝鸡市高新区,主要做烟草行业自动控制设备和系统管理软件。
在这里,我们被安排在硬件设计部门。起初觉得完全和自己所学的不同,觉得公司的安排真是不合理。起初几天也没什么事,期间我们从资料室借来了公司以前使用ARM7做的“张力控制板”,资料很完整,从硬件设计到软件程序和调试。其中给了硬件原理图。起初一看就傻眼了,虽然在之前也零星的看过一下原理图,可都是比较小的,现在整个一个系统硬件图摆在眼前,连线错综复杂,使用的芯片又多,并且结合设计资料看的时候,其中的许多专业概念一点都没有。忽然觉得自己学的简直太少了,知道的太少了。在学校的时候,就软件方面而言,还自认为学的挺多,本以为凭这就可以做点什么。可现在,随便一个系统,要用所学的做出来,那简直还太远。因为软件是基于硬件写的,而在嵌入式这一行业中,每个硬件平台基本上都不相同。以前总以为硬件都是差不多的,在学习中,忽略了硬件平台对软件的影响。
于是开始学习硬件的知识。起初是以张力控制板的资料为主,看其用到的硬件,查其使用的芯片的手册,学着看原理图,看其软件的编写。其原理图是用Protel **SE画出来的,于是也开始学习protel的使用,渐渐接触了硬件设计的许多知识,比如封装,网络连接,硬件设计的一些规则等。
在这里做的第一件事算是做一个实际的项目,是一个关于金拉线控制的项目,当然是在这里一个工作经验丰富的硬件设计工程师的带领下做的。具体给我们安排的是使用ARM控制伺服电机的转动,并采集数据显示出来。涉及到对频率信号的处理,要将频率信号转换成电压来控制伺服电机。前期我们做的是一些探索性的实验,在工程师的提示下,我们使用ARM的定时器采集频率信号,将其转化成数字量,然后在使用D/A转化成电压值。经过几天的试验,发现其精度太差,无法达到精确控制的要求,于是就放弃了这种方法,改用硬件实现频率信号都电压信号的转换,而是用ARM只做数字显示的部分。硬件部分我们使用LPC2103作为MCU,并参考了之前所看的张力控制板的硬件设计部分,使用Protel **SE完成原理图的绘制。由于刚刚接触Protel,所以芯片的封装部分由带领我们的工程师完成。软件部分涉及到A/D转换,三位数码管的动态显示,我们也在EasyARM2200实验平台上试验通过。到此算是完成了第一个项目。
接下来的一段时间里,我们主要继续学习硬件的设计,查阅各种芯片的资料,并重点学习了Altium Designer(Protel的升级版)硬件设计工具的使用。由于在烟草行业中,Linux还应用的很少,公司以前也没有做过这样的东西,和部门经理交流之后,他安排我们先做一些探索性的东西,首先从简单的串口通信开始。为了充分考虑用户的使用习惯,他给了我们一个windows他们经常使用的串口工具,我们使用linux平台下的图形化开发库GTK和C语言完成,这个主要由研究生完成。我们另一个同学主要做从Linux平台访问MS SQL2000数据库的探索。因为在烟草行业中,应用最多的数据库系统就是MS SQL2000和sybase,如果要应用linux平台,数据访问必然是要做的一部分。
经过在网上的搜索,我们确定使用FreeTDS作为数据库访问开发库,他最早是为解决从类UINUX平台访问sybase数据库而开发的,后来也支持了对MS SQL2000数据库的访问,正好符合我们的需求。FreeTDS是一个开源软件,资料都是英文的,所以对于其编程接口,配置等的学习都是查阅其官方网站上的英文资料。我们还搭建了测试环境,使用VirtualBox虚拟机软件,安装Ubuntu Linux发行版系统作为linux环境,Windows XP作为MS SQL2000个人版数据库服务器运行环境。在linux环境下,使用FreeTDS的编程接口编写测试程序访问MS SQL2000数据库。在测试中,发现了不少的问题,比如字符编码问题,访问数据库获取的中文数据显示是乱码,访问获得的数据类型的错误等。于是我们使用vim + cscope + ctags作为源码阅读工具,深入FreeTDS的源代码解决问题。最后我们写了一个文档和一个为具体应用提供的更方便的编程接口。文档是详细介绍了FreeTDS的安装,配置,附图说明了我们搭建的测试环境的过程。缩写的编程接口主要是对FreeTDS提供的接口进行再次封装,达到让用户可以只输入SQL语句就可以访问数据库,包括常用的查询,插入,更新,删除,新建数据库,新建表等,支持让用户通过简单的参数或者修改配置就可以将操作的结果输出到标准输出或者输出到文件中。
在之后的半个多月中,我继续深入学习了硬件设计方面的知识,主要是使用PCB设计软件Altium Designer设计PCB。最先是下载一些教程学习,学习Altium Designer的使用,学习硬件设计中注意的问题,学习制作电子元器件原理图和制作电子元器件的封装。难点要算是封装了,因为要对应到实际芯片,元件等的尺寸,必须非常精确。在学习中,我最先以做一个周立功公司的EasyARM2103的JTAG接口作为实例。由于原理图已经有了,主要就是做元件封装的设计和PCB布局(对各种电子元器件的合理放置)和布线(对各种元器件有电气连接的管脚使用导线进行连接)。经过几天的努力,测量电阻,电容,芯片的尺寸做封装,按照PCB设计的规则布局和布线,终于做出了一个像样的PCB板。
完成JTAG的设计后,我在同学的建议下,也是出于实际的考虑,现在的大部分台式机没有并口,只有串口,而笔记本串口和并口都没有,这给做嵌入式的人带来了极大的问题。虽然现在网上有卖的USB转JTAG和串口的接口,但价格很贵(200元左右),于是决定做一个USB转JTAG和串口的接口。在许多时间内,都是查阅网上已有的资料,整理出用到的芯片,一一查阅其硬件手册,完成了原理图和封装的设计。由于使用的电子元件比较多,并且都非常小,所以手工布局和布线花费了不少的时间。
在之后剩下的时间里,我主要对周立功公司的EasyARM2103开发板进行了重新设计,添加了数码管和蜂鸣器等器件。这个算是我在实习期间做的最大的一个硬件设计,用到了各种电子元器件,电气参数各异,尺寸封装也有许多没有现成的,于是每天忙在查资料,修改设计中。在设计的后期阶段,布局和布线着实费了一番功夫,考虑到用户对已有的EasyARM2103开发板的布局的习惯,所以布局遵从已有的布局,这样给布线带来了很大的问题。在设计中,体会最深的就是布局比布线更重要,一个好的设计,不仅是电子元件连接的正确就可以了,还要综合考虑信号的差异来布局,比如高频信号和低频信号,模拟信号和数字信号等,这些都应该分开,而这些都最终体现在一个好的布局上。最主要的是一个最优的布线时绝对建立在最优的布局的基础上。由于舍弃了布局的最优,所以布线非常麻烦,总共涉及到的电子元器件的之间的连线游1500多条,错中复杂,横竖交叉,花费了一周的时间才完全弄好。
经过一个暑假,不仅学到了许多,也有许多感受。这个公司没有像我们在学校里听说的那种严格的管理制度(也许是我们没有见到),对员工这样那样的限制(起码我所在的硬件设计部门是这样的),每个人都很自由。上班时间大家也是自由分配,只要完成定期的任务就好。这里的每个人都是综合实力非常强的人。因为是搞硬件设计,对各种电子元器件的参数,功能等自然是非常的清楚,对于一个卖好几万的板子,一个人几个月就可以完成,许多带有自能控制的板子,涉及到了软件的编程,汇编,c语言等也是非常精通。这里的每个人都很独立,一个项目基本上都是一个人做,从硬件设计到软件设计,全部是一个人完成。这没有深厚的知识基本是绝对不行的。
在这里的生活算是还比较好,公司管饭,一天两顿。周末吃饭有点麻烦,公司的食堂周末的时候就没饭了,到附近的村子吃饭要走大概半个小时才能到。每天下班吃完饭后还打1个小时左右的乒乓球娱乐一下,虽然也有唱歌的地方,可一直没有去,关键是不会唱,呵呵。乒乓之后,就在办公室看看电影,在网上四处娱乐一下,也有许多时间是在查资料,泡论坛,看硬件设计的一些经验型的东西。平时也有出去逛,刚来的时候就去了钓鱼台,感受了一下姜子牙当年的钓鱼的悠闲。最近还去了炎帝陵,不过正在修建,也没多少景物,不过山上的那种鸟鸣山更幽的感觉还是非常好的。在有规律的生活之余,偶尔也感受一下山野数目的杂乱无章却也深感爽快。
一个暑假,虽然和原先设想的有些差距,不过也学到了另一些,获得了更多的一些,感受了企业的生活,有忙碌也有清闲,有上班时的认真的工作态度,也有下班后唱歌时候的纵情高唱,还是比较丰富多彩的。从正式员工真正做的东西来看,我们所学的太少,还相差甚远。革命仍在继续,我们更需努力。唯有多学,才能缩小我们和企业所需的人才之间的差距,才能使自己更有价值。