硬件工程师修炼真经

2019-04-13 11:36发布

导师分配课题项目做了,我想选择硬件,毕竟大学本科从事过电子大赛,熟悉一些,对这方面感兴趣,深知自己没有熟练掌握硬件技术,所以从网上搜索了硬件工程师所要学习的知识和技能,和大多数初学者一起共享。加油! 1. 不管你以后想做哪一个方向---模拟、电源、射频、EMC等,基础如电路分析、模电、数电、非线性电路越扎实你以后的层次会“越高”,相信我没错。 2. 至少掌握一种layout软件,什么Protel、Candance、Pads之类的,会一种,其他的触类旁通。最终画PCB好与坏,还是要看自己对电路理解深度和经验了。 3. 至于C语言这个你得掌握吧,汇编能掌握那最好不过了。 上面的应该是最基本的,要想更NB ,FPGA、单片机、ARM、DSP最好能精通其中的一种吧,其他的根据需要吧,就像电磁场理论(RF)、自动控制原理(开关电源)等等。 其实我个人认为还有重要的两点,一个是“兴趣”,硬件工程师工作有时会很枯燥,知识没有可以再学习,没有兴趣这个就难办了。另一个就是不要走两个极端,过于注重理论少实践或者只动手不联系理论。 ===============================================================================================================      嵌入式系统工程师,包括硬件工程师嵌入式软件程序员,嵌入式系统多用于工业等领域。在这些领域中,嵌入式系统应用面千变万化,技术成熟程度、可靠性、成本等是决定系统选型的核心问题。成为高级嵌入式系统硬件工程师要具备的技能?           对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。随着技术的发展,出现了模拟电路数字化,比如手机的Modem射频模块,都采用成熟的套片。            另一类就是数字部分了,在大方向上又可分为51/ARM的单片机类,DSP类,FPGA类, 国内FPGA的工程师大多是在IC设计公司从事IP核的前端验证。            一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪。            因此想成为一个优秀的嵌入式系统工程师,需要对系统整体性的把握和对已有电路的理解。其次是电路的调试能力和审图能力,但最最基本的能力还是原理图设计PCB绘制,逻辑设计这块。            这是指的硬件设计工程师,从上面的硬件设计工程师中还可以分出ECAD工程师,就是专业的画PCB板的工程师,和EMC设计工程师,帮人家解决EMC的问题。硬件工程师再往上就是板级测试工程师,就是C语功底很好的硬件工程师,在电路板调试过程中能通过自已编写的测试程序对硬件功能进行验证。 ======================================================================= 精通C编程.. 精通微处理器结构 熟悉外围接口 应该是很好的嵌入式工程师 了. ================================================================ 这年头不浮躁的工程比较少了,哈哈,赞一个~~~ 底层,会设计电路(这个最难),不过开始不用急,学好几个经典外围凑合用着。 会画PCB,可以专业画,但是也可以业余画.......反正简单的单双层版属于必会的知识。 精通C语言,会一门汇编,相辅相成。这阶段最辛苦,不要以为C很简单,看过那些专业的程序会让你感觉到自己的C怎么会烂的那么离谱 ...... (测试一下自己对函数指针理解怎么样吧)案头上摆两本C语言教程,一本数据结构,最好顺便买本算法放到那里 ..... 这阶段耗精力,成效不明显 .... 好了,差不多该“时髦”一下,跑一下操作系统了,下个uCOS看代码,案头上又多了1-2本操作系统原理的书,好了,发现自己的C语言真的不过关,很多代码看不懂,又跑回去啃C语言 ....... 操作系统的基本原理看过一遍,突然发现“噢,原来操作系统就这么一回事而已”开始动了邪念,自己写一个吧,要求不高,实现一下任务调度,时间调度也好~~酷一把~~ 耗了1-2个月,慢慢挣扎,写了个任务调度器出来,噢,精力耗尽了。作品比较烂,不过敢用到项目中倒是一股勇气~~~不过醉翁之意不在酒,这过程中学到的东西是在其他地方学不到的,安心吧。 一天不懂编译原理和装载的原理,程序在你面前还是一团雾,看不透的。有两条路可以走,跟你的编译器打好关系,了解它的一切,另外一条路就是 ..... 自己动手写编译器,这个是激难的东西,够胆就把头砸进去.....他会让你知道什么叫程序,什么叫算法..... 另外,作为新手,手工反汇编是必须学的,将一个一个机器码翻译成汇编指令。学完这个发现汇编编译是怎么一回事,CPU执行指令是怎么一回事,大有裨益。虽然很多人不学汇编,不过汇编是好东西,在汇编的世界有着跟C很不同的写程序处理办法,所以用起来很别扭,不过到某天你冲破这种障碍的话,那是很惬意的事情。 到了这个阶段,会很自然有种会回头的了,真正难的是硬件设计,模拟电路,数字电路,两们当初可能被很多人忽视的物体。这才是根本。 在学习的过程中难免要接触一些外文资料。在中国书籍“天下一大抄”的情况下,真诚的奉劝大家去看原文资料,编译器的文档,芯片datasheet等,有空就不要玩那么多游戏,去逛逛外国网站,看看人家怎么做东西的。 最后,想怎么检验自己合格了? 1,最多一个星期的时间,学会一种以前没有接触过的,新的单片机。 2,拿到一个芯片,根据一份英文的datasheet,在不参考任何程序的情况下,将这个芯片给驱动了。 3,不是抄板,是设计外围电路,将每个元件的模拟特性,频率响应,时序什么乱七八糟的东西默念在心。 不知道这些东西有多少人能做到?有多少人能坚持做到?,不用多想,每天需要做的事很简单,看一遍《不要做浮躁的嵌入式工程师》,然后埋头去写程序,去捉虫(debug),然后去整理程序,将实验的东西抽象升华为经验。最后就是,不断的积累 ...... 以上说的是单片机 ...... 如果有意转ARM,DSP,FPGA 等的话,有好心理准备,等待你的将会是不知多少个难关 ..... 这个就是嵌入式,一个外人看来神奇,内人看来痛苦,不过如果你看到驱动两个LED闪动的时候,会有种莫名其妙的兴奋的话,那欢迎你,咱们是同类。 一时感触,写多了,怎么自己毕业一年多就变成完完全全的大叔了? ...... OTL ......X1000000 -================================================================================== 刚看到这个题目以为是别人的总结,正好进来解决自己怎么多天的迷茫。原来大家和我一样有着这样的困惑。 就这个问题大家一起讨论。 我毕业快5年了,前1年半是当老师,可以说是虚度光阴。 后面的时间在深圳的一家小公司做开发到现在,一直没有跳,没有时间,都快30了,还折腾? 本科毕业,所以学的不多,还好公司没有限制我的发展,只要我愿意学,公司就不会阻拦,当然,没有老师指点。 工作的任务就是根据客户的要求出原理图,编写程序调试,出样品。 一直没有接触PCB和上端软件。 后来发现这个行业必须要CPLD,所以就自学了CPLD,前段时间刚做完一个项目,用的是1508,比较小,但可以说是会用了,呵呵,辛苦没有白费。 后来又发现ARM,于是立刻学习ARM,手头这个项目用ARM7也在进行中,说来惭愧,还没有上系统。没玩过,不敢上。 到目前为止,收获:精通51,熟悉PIC,了解ARM,CPLD,能用以上器件开发产品。主要偏软件。 缺的:不会画板,不能用操作系统开发产品,没有用过FPGA,ARM9,英文阅读能力差,IC的驱动开发速度慢,PC软件还没有大致的概念。: 看来会的少,不会的多啊,:'( 。 讲了这么多,比较乱。 我认为做这行: 1.要有自信,毅力,兴趣。个人认为这个是最重要的。 2.有较强的建模能力,把实际问题转化成电路和软件框架 3.精通1种以上8位单片机,熟悉1种主流32位单片机(ARM) 4.精通汇编和C 5.有丰富的项目经验,较强的项目控制能力 6.熟悉工具软件如(keil,protel,ads) 7.熟悉运用CPLD/FPGA 8.能用1种高级语言开发PC软件 9.无障碍阅读数据手册 10.能运用1种以上嵌入式操作系统 11.快速开发各种主流IC的驱动 12.有良好的开发习惯,如开发文档的编写。 就写这些了,MD,领导开会要结束了,要做事了。 ================================================================================== 说说我自己。我对电子技术这一行,非常感兴趣。中学时便开始看电视原理图等各种电路图。大学是物理专业。2002年,大三,获过电子设计的省级一等奖,是我带领另外两个同学做的。 然后做过公司的项目设计,很小,但是所有都是我独立完成,从电路设计,电源,驱动等,PCB,51汇编(不到1K行),调试等等都做了。然后又做过类似的几个项目。从那以后,开始逐渐深入嵌入式系统的设计。 2003年,本科毕业设计开始学C51。那时英文阅读能力不强,回到老家也没有网络,我耗了一个春节假期,每天睡到凌晨两三点,用老师的一个很慢的东芝笔记本,生生把Keil的所有公开的代码看完,通过不断的试验了解了它是怎么编译的,C是怎么和硬件打交道的。这段学习经历,方法很笨,不过很有收获。 本科的毕设是给煤矿升降机做的一个保护仪,包括电路设计(电源,霍尔,光耦隔离,继电器驱动,232电平转换等等),固件设计(C51写的大约编译后6K的代码),软件设计(上位机上VB程序通过232通讯),现场调试。没有用操作系统。这是像模像样的一个工业控制系统,现在还是那个公司的主要产品之一。最后一个遗留问题是,在煤矿的电机房里,干扰很大,继电器通断产生的浪涌脉冲通过了开关电源导致51程序跑飞。听说他们换了线性电源好点了。这个我没管,留给公司技术员了那时我已经在读研究生,忙不过来。 这个项目硬件就是51的一个基本系统加上一些需要的外围。感受最深的是软件和固件,因为是自学自编,程序框架改了无数次。在这中间,学到不少东西,如C中宏的各种技巧,在处理复杂问题时很有用。还有就是加强了程序和数据分开的设计思想。记得当时在C51BBS上发布自己发现的C的技巧,被一个老鸟教训到,去看看某某C语言深入编程的书第几页。 博士的课题是关于高频(500MHz)和FPGA控制方向的一个科研项目。500M下变频到50M,用高速AD以40M的频率做IQ采样,然后经过PID控制算法。通过160M的DA输出50M的中频信号,上变频到500M。这个项目很费钱,主要是用了许多高频模块,还有Altera的Stratix2和Xilinx的Vertex4板子。这个项目里我是主要理论和技术上的骨干。现在已经完成了。 现在让我学一个新东西,首先我去找文档。当然,最新的文档是英文的,譬如Altera的一个手册就2000多页。文档到手,浏览一下就是了,知道哪里有什么内容,下次能找到就行。看英文datasheet驱动芯片,也没有问题,不论使用MCU还是FPGA。 关于设计电路,通用的各种各样的电路都见过,各种需要注意的参数也都了解。 现在: 数学物理基础不错。庆幸学了物理,现在做什么都理解的比较深刻。 建模仿真,分析评估一个系统没有问题。各种仪器,不在话下。 电路设计有经验,PCB制版有经验,高速板布线注意事项也熟悉。高频模块使用有经验。 51非常熟,Keil里的bug都找到过。32位的软核Nios2,和SOPC设计熟悉。DSP、ARM都有硬件开发板,可是我还没有时间去做。但是我一点也不担心,8位16位32位,都一样。 嵌入式C很熟悉,C++不常用。UC/OS2熟悉,uCLinux还没有用过。TCP/IP熟悉。 像VB,VC,Labview,Matlab等很熟,其他的类似的工具也是要用就学,没问题。 高端低端FPGA应用很熟。比较喜欢在Simulink里做事。我自己写了一些代码把Simulink工程转换成与厂商无关的HDL,很好用。 做了一个FPGA图像处理的项目就是用上述方法做的。 英文阅读技术资料很流畅,口语也没有问题。 现年28岁。 我看到一台嵌入式设备,我基本上就能想到它里面是怎么处理的,让我做我也能做出来。 今年要毕业,水平在同学中是非常突出的,当然比资深工程师还有差距。累计起来,我项目设计的经验也有5年了,且涵盖各种领域。就这样,工作还没有着落。51job一个人力资源咨询对我说,按你的水平,应该拿不错的薪水,不过公司都很精明,看你是应届毕业,可能就不会给很多钱。我倒是也不想一开口要多少,只要有事做,自有我展示能力的时候。如果那个老板看中了,我就跟他去了。我在上海。