快捷搜索:

嵌入式产品开发的每一个阶段是怎样的

跟着我们进入遍及的物联网(IoT)天下,嵌入式设备的连接性是必弗成少的。嵌入式产品,与通俗电子产品一样,开拓历程都必要遵照一些基础的流程,都是一个从需求阐发到总体设计,具体设计到着末产品完成的历程。然则,与通俗电子产品比拟,嵌入式产品的开拓流程又有其特殊之处。它包孕嵌入式软件和嵌入式硬件两大年夜部分,针对嵌入式硬件和软件的开拓,在通俗的电子产品开拓历程中,是不必要涉及的。嵌入式产品的研发流程详细如下图:

下面,针对嵌入式产品的开拓历程中的各个阶段,我们进行具体探究。

阶段1:产品需求

在这一个阶段,我们必要弄清楚的是产品的需求从何而来,一个成功的产品,我们必要满意哪些需求。只有需求明确了,我们的产品开拓目标才能明确。在产品需求阐发阶段,我们可以经由过程以下这些道路获取产品需求:

1)市场阐发与调研,主如果看市场有什么需求,还有便是前沿的技巧是什么(站在做一款产品的角度);2)客户调研和用户定位,从市场广大年夜客户那获取最准确的产品需求(要留意阐发市场,产品生命周期,进级是否方便);3)利润导向(资源预算);

4)假如是外包项目,则必要我们的客户供给产品的需求(直接从客户那获取,让客户签协议);当一个项目做完的时刻,假如客户忽然又增添需求,增添功能,将导致你的项目周期严重迁延,资源剧烈上升,并且测试好的产品可能要整个从新测试,蓝本的设计可能将不会满意当前的要求,以是做项目之前,最好要跟客户把需求确定下来,并且签定一份协议,否则,你费力若干个日昼夜夜,获得的将是一个无法料理的烂摊子!

阶段2:产品规格阐明

在前一个阶段,我们汇集了产品的所有需求。那么在产品规格阐明阶段,我们的义务是将所有的需求,细化成产品的详细的规格,就比如一个简单的USB转串口线,我们必要确定产品的规格,包括:

- 产品的外不雅;

- 产品支持的操作系统;

- 产品的接口形式和支持的规范;

等等诸如斯类,牢记,在形成了产品的规格阐明后,在后续的开拓历程中,我们必须严格的遵守,没有200%的来由,不能随意变动产品的需求。否则,产品的开拓历程必将是一个反复无期的历程。

《产品规格阐明》主要从以下方面进行斟酌:

- 斟酌该产品必要哪些硬件接口;

- 产品用在哪些情况下,要做多大年夜,耗电量若何。假如是破费类产品,还跟设计美不雅,产品是否便于携带,以确定板子大年夜小的需求,是否防水;- 产品资源要求;

- 产品机能参数的阐明(例如互换机,假如是百兆的速度,用于家庭和一样平常公司;假如是用于全部省的互换,那设计的速度肯定命十万兆以上了)以是说,产品机能参数的不合,就会影响到我们设计斟酌的不合,那么产品的规格自然就不合了;- 必要适应和相符的国家标准,国际标准,或行业标准;阶段3:产品总体设计规划。

在完成了产品规格阐明今后,我们必要针对这一产品,懂得当前有哪些可行的规划,经由过程几个规划进行比较,包括从资源、机能、开拓周期、开起事度等多方面进行斟酌,终极选择一个最得当自己的产品总体设计规划。

在这一阶段,我们除了确定详细实现的规划外,我们还必要综合斟酌,产品开拓周期,若干人月的事情量,必要哪些资本或者外部帮忙,以及开拓历程中可能碰到的风险及应对步伐,形成全部项目的项目计划,指示我们的全部开拓历程。

阶段4:产品概要设计

产品概要设计主如果在总体设计规划的根基长进一步的细化,详细从硬件和软件两方面入手:

硬件模块概要设计

硬件模块概要设计,主要从硬件的角度启程,确认全部系统的架构,并按功能来划分各个模块,确定各个模块的的大年夜概实现。首先要依据我们到底要哪些外围功能以及产品要完成的事情,来进行CPU选型(留意:CPU一旦确定,那么你的周围硬件电路,就要参考该CPU厂家供给的规划电路来设计)。然后再根据产品的功能需求选芯片,比如是外接AD照样用片内AD,采纳什么样的通讯要领,有什么外部接口,还有最紧张的是要斟酌电磁兼容。

一样平常一款CPU 的生计周期是5-8年,你斟酌选型的时刻要留意,不要选用快停产的CPU,以免呈现这样的终局:产品辛费力苦开拓了1到2 年,刚开拓出来,还没赢利,CPU又停产了,又得要从新开拓。很多公司就逝世在这个上面。

软件模块概要设计

软件模块概要设计阶段,主如果依据系统的要求,将全部系统按功能进行模块划分,定义好各个功能模块之间的接口,以及模块内主要的数据布局等。

阶段5:产品具体设计

硬件模块具体设计

主如果详细的电路图和一些详细要求,包括 PCB和外壳互相设计,尺寸这些参数。接下来,我们就必要依据硬件模块具体设计文档的指示,完成全部硬件的设计。包括道理图、PCB的绘制。

软件模块具体设计

功能函数接口定义,该函数功能接口完成功能,数据布局,全局变量,完成义务时各个功能函数接口调用流程。在完成了软件模块具体设计今后,就进入详细的编码阶段,在软件模块具体设计的指示下 ,完成全部系统的软件编码。

必然要留意必要先完成模块具体设计文档今后,软件才进入实际的编码阶段,硬件进入详细的道理图、PCB实现阶段,这样才能只管即便在设计之初就斟酌全面,避免在设计历程中反复改动。前进开拓效率,不要为了图一时之快,没有完成具体设计,就开始实际的设计步骤。

阶段6&7:产品调试与验证

该阶段主如果调剂硬件或代码,修正此中存在的问题和BUG,使之能正常运行,并只管即便使产品的功能达到产品需求规格阐明要求。

硬件部分:

- 目测加工会得PCB板是否存在短路,器件是否焊错,或漏焊接;- 测试各电源对地电阻是否正常;

- 上电,测试电源是否正常;

- 分模块调试硬件模块,可借助示波器、逻辑阐发仪等根据。

软件部分:

验证软件单个功能是否实现,验证软件全部产品功能是否实现。

阶段8:测试

功能测试(测试不经由过程,可能是有BUG);

压力测试(测试不经由过程,可能是有BUG或哪里参数设计分歧理);机能测试(产品机能参数要提炼出来,供将来客户参考,这个便是你的产品特性的一部分);其他专业测试:包括工业级的测试,例如含抗滋扰测试,产品寿命测试,防湿润测试,高温和低温测试(有的产品有很高的温度或很低的温度事情不正常,以致竣事事情)。

有的设备电子元器件在特殊温度下,参数就会非常,导致全部产品呈现故障或掉灵征象的呈现;有的设备,零下几十度的环境下,根本就启动不了,开不了机;有的设备在高温下,电容或电阻值就会孕育发生物理的变更,这些都邑影响到产品的质量。这里要引出一个话题,工业级产品与破费类产品有什么差别呢?工业级的产品就要避免这些非常和特殊问题,有的产品是在很深的海里事情,或者在寒冷的岩穴事情,或者火热沙漠事情,或者波动的设备上,比如汽车;或者是必要防止雷击;以是这便是工业级产品跟破费类产品的差别,破费类的产品就不必要做这么多的测试。

阶段9:产品

经由过程上一阶段完备测试验证,在此阶段,即获得我们开拓成功的产品。在此阶段,可以对照实际的产品和最初的形成的产品规格阐明,看颠末一个完备的开拓历程,是否产品完全相符最初的产品规格阐明,又或者,半途发明产品规格阐明存在问题,对它进行了若干改动呢?

附录:嵌入式硬件开拓流程

之前,我们具体讲述了嵌入式产品的研发流程,那么在这一节,我们详细以嵌入式产品的硬件部分为例,再次解说其开拓历程,盼望经由过程这一节,大年夜家能对嵌入式硬件开拓流程有更深刻的熟识,在今后的进修和事情中,加倍规范化和标准化,前进开拓技能。嵌入式硬件开拓流程一样平常如下图,分为8个阶段:

嵌入式产品的硬件形态各别,CPU 从简单的4 位/8位单片机到32 位的ARM处置惩罚器,以及其他专用IC。别的,依据产品的不合需求,外围电路也各不相同。每一次硬件开拓历程,都必要依据实际的需求,斟酌多方面的身分,选择最相宜的规划来。

硬件阶段1:硬件产品需求

和通俗的嵌入式产品需求一样。阶段1:产品需求。

硬件阶段2:硬件总体设计规划

一个硬件开拓项目,它的需求可能来自很多方面,比如市场产品的必要或机能提升的要求等,是以,作为一个硬件设计职员,我们必要主动去懂得各个方面的需求并阐发,根据系统所要完成的功能,选择最相宜的硬件规划。

在这一阶段,我们必要阐发全部系统设计的可行性,包括规划中主要器件的可采购性,产品开拓投入,项目开拓周期估计,开拓风险评估等,并针对开拓历程中可能碰到的问题,提前选择应对规划,包管硬件的顺利完成。

硬件阶段3:硬件电路道理图设计

在系统规划确定后,我们即可以开展相关的设计事情,道理设计主要包括系统总体设计和具体设计,终极孕育发生具体的设计文档和硬件道理图。

道理设计和PCB设计是设计职员最主要的两个事情之一,在道理设计历程中,我们必要筹划硬件内部资本,如系统存储空间,以及各个外围电路模块的实现。别的,对系统主要的外围电路,如电源、复位等也必要仔细的斟酌,在一些高速设计或特殊利用处合,还必要斟酌EMC/EMI等。

电源是包管硬件系统正常事情的根基,设计中要具体的阐发:系统能够供给的电源输入;单板必要孕育发生的电源输出;各个电源必要供给的电流大年夜小;电源电路效率;各个电源能够容许的颠簸范围;全部电源系统必要的上电顺序等等。

为了系统稳定靠得住的事情,复位电路的设计也异常紧张,若何包管系统不会在外界滋扰的环境下非常复位,若何包管在系统运行非常的时刻能够及时复位,以及若何合理的复位,才能包管系统完备的复位后,这些也都是我们在道理设计的时刻必要斟酌的。

同样的,时钟电路的设计也是异常紧张的一个方面,一个不好的时钟电路设计,可能会引起通信产品的数据丢包,孕育发生大年夜的EMI,以致导致系统不稳定。

道理图设计中要有“拿来主义”!现在的芯片厂家一样平常都可以供给参考设计的道理图,以是要只管即便的借助这些资本,在充分理解参考设计的根基上,做一些自己的发挥。

硬件阶段4:PCB图设计

PCB设计阶段,等于将道理图设计转化为实际的可加工的PCB 线路板,今朝主流的PCB 设计软件有PADS,Candence 和Protel几种。

PCB设计,尤其是高速PCB,必要斟酌EMC/EMI,阻抗节制,旌旗灯号质量等,对PCB 设计职员的要求对照高。为了验证设计的PCB是否相符要求,有的还必要进行PCB 仿真。并依据仿真结果调剂PCB 的结构布线,完成全部的设计。

硬件阶段5:PCB加工文件制作与PCB打样

PCB绘制完成今后,在这一阶段,我们必要天生加工厂可识别的加工文件,即常说的光绘文件,将其交给加工厂打样PCB 空板。一样平常1~4层板可以在一周内完成打样。

硬件阶段6:硬件产品的焊接与调试

在拿到加工厂打样会的 PCB空板今后,接下来我们,必要反省PCB空板是否和我们设计预期一样,是否存在显着的短路或断痕,反省经由过程后,则必要将前期采购的元器件和PCB空板交由临盆厂家进行焊接(假如PCB 电路不繁杂,为了加快速率,也可以直接手工焊接元器件)。

当PCB 已经焊接完成后,在调试PCB之前,必然要先卖力反省是否有可见的短路和管脚搭锡等故障,反省是否有元器件型号放置差错,第一脚放置差错,漏装置等问题,然后用万用表丈量各个电源到地的电阻,以反省是否有短路,这样可以避免贸然上电后毁坏单板。调试的历程中要有平和的心态,碰见问题是异常正常的,要做的便是多做对照和阐发,慢慢的扫除可能的缘故原由,直致终极调试成功。

在硬件调试历程中,必要常常应用到的调试对象有万用表和示波器,逻辑阐发仪等,用于测试和察看板内旌旗灯号电压和旌旗灯号质量,旌旗灯号时序是否满意要求。

硬件阶段7:硬件产品测试

当硬件产品调试经由过程今后,我们必要对比产品产品的需求阐明,一项一项进行测试,确认是否相符预期的要求,假如达不到要求,则必要对硬件产品进行调试和改动,直到相符产品需求文明(一样平常都以需求阐明文档作为评判的一句,当然显着的需求阐明差错除外)。

硬件阶段8:硬件产品

我们终极开拓的硬件成功。一个完备的,完成相符产品需求的硬件产品还不能阐明一个成功的产品开拓历程,我们还必要按照预定计划,定时高质量的完成。才是一个成功的产品开拓历程。   在PIC的单片机中有多种型号有内部RC振荡器的功能,从而省去了晶振,不只节省了资源,并且我们还多了两个IO端口可以应用。

然则,因为RC振荡器中电阻、电容的离散性很大年夜,是以,在有内部RC振荡器的单片机中,它的内部RAM中都邑有一个名为OSCCAL的校准寄存器,经由过程置入不合的数值来微调RC振荡器的振荡频率。并且,单片机的法度榜样存储器中,也会有一个特殊的字来储存工厂临盆时测得的校准值。下面我以常用的12C508A和12F629为例加以阐明。

PIC单片机RC振荡器的应用及校准措施

12C508A的复位矢量是法度榜样的最高字0x1FF,这个字节临盆商已经固定的烧写为MOVLW 0xXX,指令履行后,W寄存器中即为校准值XX,当我们必要校定时,那么,在紧接着的地址0x0应该是一条这样的指令:MOVWF OSCCAL。接下去RC振荡器就会以标准的振荡频率运行了。

12F629的校准值也寄放在最高字--0x3FF中,内容是RETLW 0xXX,但它的复位矢量却是0x0。这样,在我们必要校准RC振荡器时,在初始化历程中要加高低面两句:

CALL 0x3ff

MOVWF OSCCAL

当然,你还要留意寄存器的块选择位。

曩昔,我在做项目时,没太留意这个问题,这是由于在应用12C508A时,HI-TECH在进行编译时已经偷偷地替我们做了这项事情。它会在法度榜样的0x0处自动加一条MOVWF OSCCAL。用12F629做接管解码代替2272时也没发生什么问题,然则在用被它作滚动码解码器时却发明接管间隔的离散性很大年夜。经多次试验终于找出是没对振荡器的振荡频率进行校对所至。

是以,必要别的编写用于校对的语句,我用了两种措施来实现这个目的:

1、用内嵌汇编的形式

#asm //此段汇编法度榜样用于将位于法度榜样段3FFH的call 3ffh //内部RC振荡器的校准值放入校准寄存器,bsf _STATUS,5 //在进行C说话调试时应樊篱这段法度榜样movwf _OSCCAL#endasm

2、用C说话标准形式

const unsigned char cs @ 0x3ff; //在函数体外。。。

OSCCAL=cs; //仿真时樊篱此句

用这两种措施都有一个小缺陷--仿真时,法度榜样无法运行,这是因为C编译器并没有为我们在0x3FF放置一条RETLW 0xXX的语句。是以,法度榜样运行到这里之后,并没有把一个常数(校准值)放入W寄存器然后返回,而是继承履行这条语句的下一句--0x0及其之后的法度榜样,也便是说法度榜样到此就乱了。是以如法度榜样后面注释所示,在仿真时,应先樊篱这几句法度榜样。在法度榜样调试完成后,必要烧写时,把注释符去掉落,再编译一次就可以了。

我还有一种设法主见,不用樊篱语句,那便是用函数来实现,便是在0x3FF起建立一个函数,函数体内只有一条语句,如下:

char jz()

{

return 0;

}

当然,还要斟酌C函数返回时,必然会选择寄存器0,实际上这个函数的肇端地址应小于0x3FF。然则我找了我所能找到的参考资料,并上网找了多次,也没找到为函数绝对定位的措施,盼望有知道的同伙辅导一下。

还有,12C508A是一次性编程的,并且0x1FF处的内容,我们是无法改变的,也便是说你在此处编写任何指令,编程器都不会为你烧写,或者说纵然烧写了也不会改变此中的内容。

可12F629是FLASH器件,可多次编程,假如你没有有意选择,正品的编程器(如Microchip的PICSTART PLUS)是不会对存有校准值的法度榜样空间进行编程的。纵然你无意中对这个法度榜样空间进行了编程,你也可以用一条RETLW 0xXX放在0x3FF处再编程一次就可以了,但这个XX值可能是不精确的,需经实验确定(请参考后面阐明)。

为了查验OSCCAL的值对振荡器频率的影响,特编写了下面一个小法度榜样进行验证:

#include

//奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS & BOREN & PROTECT & CPD);//内部RC振荡器通俗IO口;无效看门狗;上电延时;内部复位;掉落电复位;代码保护;数据保护//奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫#define out GPIO0 //定义输出端#define jc GPIO3 //定义检测端

//奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫void interrupt zd(); //声明中断函数//主函数奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫void main(){

CMCON=7;

OPTION=0B00000011; //分频比为1:16,

TRISIO=0B11111110;

GPIO=0B00000000;

WPU=0;

T0IF=0;

GIE=1;

T0IE=1;

while(1){

if(jc)OSCCAL=0xFF;

else OSCCAL=0;

}

}

//中断函数奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫奸淫*void interrupt zd(){

T0IF=0;

out=!out;

}

法度榜样着实很简单,便是在中断中让out脚的电平翻转,翻转的光阴为4096个指令周期,电平周期为8192个指令周期。而指令的周期又抉择于RC时钟频率。在主法度榜样中,赓续的检测JC端口的电平,然后根据此端口电平的值改动OSCCAL寄存器的值。当然,着末从OUT脚的波形周期上反应出了OSCCAL寄存器的值改变。

经用示波器丈量(歉仄,手边没有频率计),JC端接地时,OUT真个电平周期为9.5毫秒阁下;而JC端接正电源时,OUT真个电平周期为6毫秒阁下。也便是说OSCCAL的值越大年夜,单片机的时钟频率越高。并且,这个变更范围是很大年夜的,是以,假如应用PIC单片机的内部RC振荡器时,对其振荡频率进行校对是十分需要的。这也是我在做滚动码接管解码器时,产品离散性很大年夜的缘故原由。望大年夜家今后应用内部RC振荡器时能够留意到此点。

但还有一点要留意,纵然你对RC振荡器进行了校对,你也别指望这个4MHz的RC振荡器肯定会很标准,实际上它照样一个RC振荡器,它的振荡频率是电压、温度的函数,也便是说这个振荡频率会跟着电压和温度的变更而变更,只是经校对后的值更靠近4MHz罢了,这在产品开拓的一开始就要留意的。

滥觞:中国电子网

您可能还会对下面的文章感兴趣: