最近,做了一批板子,不像以前的板子一样,工作不正常。
花了将近5个工作日,终于把问题原因找到了:就是这个RC电路造成的。
如下图所示的电容滤波电路,在应用中很常见。
如果电容值选择不合适,会导致问题比较麻烦,特别是系统中还使用了看门狗电路。
下图是使用的系统构成框图。
有三部分:MCU电路,看门狗,模块。
MCU的复位由硬件看门狗提供。
看门狗的喂狗由MCU来完成。
模块的电源由MCU的一个IO口控制,缺省不上电。电路中电阻R0用于给电容提供放电回路。另外,模块的供电电源电路是厂家推荐电路。
基本工作流程: MCU工作后,初始化IO口,然后根据需要设置IO口,打开MOS管,给模块供电。同时,喂狗。
使用中,发现部分板子能够正常工作,大部分板子不能正常工作,用示波器检查看门狗的输出,发现:周期性的输出复位信号,但是该周期又不是看门狗芯片手册中的周期信号,其周期比不喂狗的周期短很多。
上电后,MCU工作。当打开MOS管给模块供电时,瞬时先对电容充电,充满到模块的正常工作的阈值后,模块可以工作。
但是,这个瞬时充电会导致3V3的供电电压有个波动。
由于看门狗的检测电压阈值是2.93V,当这个波动使得3V3跌落至2.93V以下时,看门狗就会输出复位信号,复位MCU。
然后,MCU有重复上面的过程,打开MOS管供电。。。
。。。
看门狗周期输出复位信号。
模块被周期上电。
。。。
减小电容的值(4.7uF -> 0.1uF),从而减少波动,即减小电源电压跌落的幅度。
使得电源跌落幅度维持在看门狗检测的阈值(2.93V)以上,这样,看门狗就不会输出复位,从而保证MCU正常工作了。
以前用同样大小的电容(4.7uF)从来没有发现问题,为什么这批板子就出问题呢?
回头再仔细考虑这个问题,发现并不简单,还有更深层的原因:采购。
这批板子采用的是新购买的电容,从淘宝上购买的,当时也没有要求精度。
测量后发现其值大概是5.9uF左右,与设计的4.7uF(原来是用的大厂的料)差距还是不小的。而原来采用的电容值还是比较靠谱的。
同时,也说明了一个问题:原来设计的4.7uF使系统工作在一个临界状态。
以下两点需要注意:
采购物料时,一定要从大厂采购,同时标明精度,如%1。
设计系统时,一定要留有余量,不要让系统工作在一个临界状态。虽然这种临界状态不好获知。就像电影《疯狂的石头》中,那个来自国外的“高手”在中国购买的登山绳长度就没有考虑余量,所以被坑了。
完成一个项目开发后,有关团队软件开发一些记录。
先尽可能多的了解要处理的任务,再启动编程。
分层设计代码,最好用现成的框架(framework)。
项目规划,模块化设计程序,能更灵活的适应新的需求变化。
一定用版本管理系统,如svn,git等。
先启动任务的主干,暂时抛弃不理解的部分,边做边加不理解的部分。
伪代码编程的使用。
开始编程前,编码格式规范的制定。
- 不使用魔鬼数字,使用具名常量代替。
- 状态变量只在状态机中改变。
- 好的代码、变量、函数命名本身就是注释。
- 等等
如果程序乱飞,有可能是堆栈溢出造成的。
调试方法:
- Error code变量引入。
- 输出错误信息。
- 显示错误信息。
- 等等
团队编码(peer to peer)以及SVN、git、eclipse等工具的使用(标签与分支,checkin,checkout)。
及时沟通、交流。
最后,多读书。推荐这3本:《代码大全》、《人月神话》、《编程珠玑》。
原理图设计基本原则:易于理解。
以下是我的原理图设计检查规范,按照序号顺序检查。
索引 | 项目 | 描述 | 备注 |
---|---|---|---|
1 | 工具 | Orcad Capture | |
2 | 图纸file name | 格式:编号.图纸名称 | |
3 | 图纸size | 公制,A4 | |
4 | 公司Name | xxx | 设置:Verdana, 常规,小六 |
5 | Title | 项目名称,板名-子部分名称 | 设置:Arial, 粗体,小五 |
6 | Document Number | 编号-日期等-图纸号 | 设置:Arial, 常规,小六 |
7 | Rev | X.XX | 设置:Arial, 常规,小六 |
8 | sheet number | X of Y X为当前原理图纸编号。 Y为总原理图纸数。 |
|
9 | 标注Annotate | 放置离页连接(Off-page)和交互页码 | 改版的原理图不要对器件重新编号,否则PCB Layout时会重新计算费用。 |
10 | 原理图上加上必要的标识说明 | Design Note用于原理图说明 CAD Note用于layout说明。 |
Arial, 常规,小六 |
11 | 图分块 | 将电路图按功能分块,尽量不要把多个电路放在一张图上 | |
12 | 开关的使用 | 使用了开关,要注明开关设置及功能分配 | |
13 | 信号命名 | 对于多功能使用,命名中包含各个功能、逻辑、电压、输入输出方向 对于GPIO引脚,标明GPIO port number |
|
14 | 被动元器件 | 如电阻、电容,要包含如精度、封装等信息 | |
15 | 不安装的元器件 | 标明“NM”字样 | |
16 | 0欧姆电阻 | 如是否添加jumper、switcher | |
17 | 连接器 | 添加信号分布说明,避免错误的插入或信号分配 | |
18 | 原理图最后检查 | 器件原理库文件是否正确; 工作原理连接是否正确; 封装名称; 板间连接的引脚分配是否需要翻转; 线缆与板连接引脚分配是否需要翻转; 标号复位后重新标注; 添加离页连接; |
|
19 | FPGA | 根据FPGA走线重新调整线序 | |
20 | 原理图器件库设计 | 器件具有相同名称的电源引脚、GND引脚,要将其属性设置为’Power‘。否则生成网表时会出现错误; 子板设计时,要注意两个插座的名称CN1/CN2,不要搞错。且位置要沿用以前的PCB设计。 |
|
21 | DRC检查 | 原理图完成后,一定要进行设计规则检查(DRC) | |
22 | 再版设计时 | 如果通过实验确定了有些器件(如0R/NM等器件)是否使用,那么可以适当删除这些器件。 |
以下是我的layout设计检查规范,按照序号顺序检查。
索引 | 项目 | 描述 | 备注 |
---|---|---|---|
1 | 设置布线规则 | normal线宽:8mil、6mil; 过孔/通孔尺寸:24D12; 整板盖油:过孔(tenting); 安装孔尺寸:250D125; Clearance:正常布线为6mil,铺地时为20mil; |
|
2 | 丝印文字尺寸 | 25*5 | 5倍比例,50*10(Truetype,Verdana) |
3 | 器件封装 | ||
4 | 板子尺寸 | ||
5 | 器件布局 | 是否合理,能否顺利安装、组装,插接件能否契合安装 | |
6 | 金属铺地 | 是否绕开了机械层(挖洞) | |
7 | 内层分割 | 是否绕开了机械层(挖洞) | |
8 | 禁止布线区域 | 设置是否合理 |
索引 | 项目 | 描述 | 备注 |
---|---|---|---|
1 | 电源线 | 弄清需要的供电能力(如,多少A),根据电源线的阻抗确定线宽(2mm/A),确保不要超过2A/mm,最好使用电源层;如果太窄了,还会有发热问题需要注意 如果使用了过孔,确保足够的过孔数量,以满足通过的电流量 |
|
2 | 地 | 模拟地对噪声敏感,避免从地引入噪声 模拟地、数字地,最好做到单点接地,连接时,两者可以通过一个噪声抑制器件进行连接,如,磁珠; 高频信号尤其要注意,如,pcb蓝牙天线下面不能有任何的地平面;及,信号与地之间的距离要注意,不能过近,确保距离大于2倍差分信号的的距离; |
|
3 | 屏蔽地 | 信号两侧的屏蔽地,确保接入地层,不要开路; 过孔之间距离5~10mm |
|
4 | 大面积闲置地 | 放置足够的过孔,以防焊接时,过加热炉时,铜层翘起 | |
5 | 芯片散热盘 | 仔细阅读相关器件手册,确保其腹部散热焊盘的连接,如,有些器件要求是要接地的; 同时,保证散热焊盘的尺寸达到散热的要求; 确保散热焊盘有足够的接地过孔 |
|
6 | 高速信号 | 指的是LPDDR4/DDR3,HDMI,PCIe,USB 3.0,SATA,USB 2.0,LVDS,CSI等,针对这些信号,需要仔细阅读相关模块的layout注意事项及指导; 如,差分对需要做等长,阻抗匹配; 做SI仿真; |
索引 | 项目 | 描述 | |
---|---|---|---|
1 | 器件封装 | 是否正确 | |
2 | 器件布局 | 是否合理(板子外形尺寸、关键器件、有利于安装、散热影响等等) | |
3 | 内层分割 | 是否绕开了机械层(挖洞) | |
4 | DRC检查 | 是否与原理图连接一致 | |
5 | 金属铺地 | 是否绕开了机械层(挖洞) | |
6 | 盖油处理 | 整板盖油:过孔(tenting) | |
7 | 丝印 | 大小要统一; 是否正确的放置在器件附近且大小一致; 不要放置在孔上; 是否方向一致; |
5倍比例,50*10(Truetype,Verdana) |
8 | Logo | 添加公司Logo | |
9 | 板名称 | 是否放置 | |
10 | 日期 | 添加设计完成日期 | |
11 | 防静电标志ESD | 是否放置 | |
12 | RoHS标志 | 是否放置 | |
13 | 标签标志 | (白色丝印条状)是否放置 | |
14 | 废弃物处理标志 | 是否放置 |
索引 | 项目 |
---|---|
1 | 加工数量 |
2 | 层数 |
3 | 叠层顺序 |
4 | 是否有阻抗要求 |
5 | 板厚 |
6 | 丝印颜色 |
7 | 阻焊颜色 |
8 | 是否金属包边 |
9 | 是否沉金 |
10 | 工艺边5mm |
当前,从速度上看,FlexRay总线处于比较尴尬的位置:比其低速上,用CAN(CAN-FD,CAN-XL)总线更广泛,而且,新的规范已经逼近甚至超过FlexRay;比其高速上,ethernet发展迅速。
FlexRay通信系统并非仅仅是一个通信协议,它还包括一种特殊设计的高速收发器,并定义了FlexRay节点不同部件间的硬件和软件接口。
FlexRay利用两条独立的物理线路进行通信,每条的数据速率为10Mbps。两条通信线路主要用来实现冗余,因此消息传输具有容错能力,也可利用两条线路来传输不同消息,这样数据吞吐量可加倍。这也是FlexRay的精华所在(提出了解决硬件可靠性的方法:双通信通道,有源星型连接器)。
与其它时间触发通信协议相同,作为数据时间确定性优点的叙述,不考虑通信受干扰,从而需要出错重发的情况,是不完整的。
重发的实行需通过调度在其它动态时间槽内安排,此时数据时间确定性就会有很大的变化。
当然,有两个通道同时送同一数据,出错的概率就会减少,但是,由于节点位置,电缆位置相同,通信口又在同一芯片上,接同一个电源,受干扰与出错的机会相差不会太大。