w嵌入式分享合集66
自己的原文哦~ https://blog.51cto.com/whaosoft/14132240
一、STM32的NRST管脚异常复位问题
这个问题是客户对开发的平台做EMS 浪涌测试的时候发生的,平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的EMS 测试中, 客户发现MCU有时候会异常复位而影响平台的稳定工作。
MCU 异常复位问题的通常解决思路:
我们知道, 导致MCU异常复位的原因有很多, 比如外部复位电路被干扰, MCU 电源的异常跌落, 看门狗不能正常喂狗导致的复位等等。
STM32 MCU 的复位标志位寄存器可以帮助我们发现导致异常复位的线索。
复位标志位的相关信息可以在STM32 MCU 的Reference Manual 中找到。在RCC 节的RCC_CSR 寄存器中,我们可以看到:
图中红色围住的部分就是复位标志相关的寄存器。
LPWRRSTF:低功耗模式复位标志位, 被置1 表示发生了非法的STOP, SLEEP 或SHUTDOWN 等低功耗模式进入。
WWDGRSTF: 窗口看门狗复位标志。
IWDGRSTF: 独立看门狗复位标志。
SFTRWTF: 软件复位标志位。
BORRSTF: 欠压复位标志位。
PINRSTF: 从NRST引脚输入产生的复位的标志位。
OBLRSTF: 加载选项字节产生的复位的标志位。
以上的标志位被置1 表示发生了相关的复位。
这些被置1的标志位可以通过向RMVF 位写1清除。
在一次正常的MCU上电过程中, 电压的上升和 PDR 电路的工作必然会导致BORRSTF 和PINRSTF 被置位1, 因此在做EMS实验前, 需要先通过向RMVF 写1将所有复位标志位清除, 然后观察在EMS 测试导致的复位后, 哪些复位标志位被置位了。
例如,当观察到BORRSTF 被置1表示发生了欠压复位, 需要重点检查MCU供电电路包括滤波/退耦电容的设计和布局等等。
PINRSTF 位被置1表示MCU 的NRST 管脚接收到了能够触发复位的异常低电平, 需要检查NRST 的外围电路是如何被干扰的, 或设法增加滤波电路滤除干扰。
WWDGRSTF 或 IWDGRSTF 被置1表示喂狗不正常导致了复位,一般是由程序在 EMS测试中运行不正常进入死循环导致,MCU 被EMS干扰影响的途径相对难以判断,可能是地或某个/些GPIO管脚被EMS 干扰侵入而影响了MCU 的正常运行。
通过观察异常复位发生后的复位标志位,可以使我们避免解决问题时在不相关的电路上浪费时间, 比如如果只有BORRSTF 被置位, 我们需要重点关注供电电路, 而不需要在复位管脚相关电路做无用的调整。
在客户开发平台上的排查:
根据上面描述的思路,我们在客户的平台上排查发生异常复位的原因, 通过检查STM32G4 的复位标志位,发现复位发生后PINRSTF 被置 1 了。
这似乎是个简单的NRST 复位管脚被干扰的问题。
但是观察客户的设计, NRST 管脚并没有外接比较长走线的外部电路, 只是在管脚放置了一颗0.1UF 的电容。按常理这样的电路一般不会将干扰引入NRST 管脚。
为了避免是0.1UF 电容将地噪声引入管脚, 拆除这颗电容后再做浪涌实验, 结果PINRSTF 还是被置位。
STM32G4有一个新功能, NRST 管脚可以被复用为一个GPIO PG10, 当这个管脚被定义为PG10后, 加在这个管脚的低电平干扰将不会再导致MCU 复位。但是奇怪的事情发生了,STM32G474第7脚由NRST 改定义成PG10后(Option byte中修改),浪涌实验中依然发生了PINRSTF 被置位的现象。
这时候看来不能只局限于NRST 管脚的探查了,干扰是不是从其它GPIO 窜入MCU 并进一步通过耦合影响了复位电路的工作呢?
在LQFP的封装中,由于MCU 内部并行的较长的bonding线的存在, 相邻的GPIO之间 最可能产生耦合干扰, 所以我们从第7脚相邻的第6和8脚开始排查。分别将它们的外部信号断开。通过排查, 第8脚信号断开没有解决问题。
但是当将第6脚相连的晶振和电容断开,并改用内部HSI 时钟源后, 异常复位问题消失了, PINRSTF 不再被置位。看来干扰是从第7脚进入的。观察客户的PCB 设计, 发现晶振的LOAD 电容接地并不是直接接地平面, 而是经过一根细长的地走线后才由一个过孔连接到地平面,很明显这根细长的地走线在浪涌测试中作为天线接收了干扰并经电容传递到了MCU 内部。
总结
MCU 内部是远比 MCU 外部电路更复杂的微电子电路,内部线路间距小,不同功能间可能只是由电子开关或多路复用器做选择,当高频干扰进入MCU 后,干扰可以在看似不直接相连的电路间耦合而影响MCU 的正常工作。
重要的是避免干扰进入MCU。在排查干扰传递的路径时,不要将目光局限于直接相连的电路或管脚。
.
二、EMC整改流程及常见问题
首先我们来从EMC测试项目构成说起,EMC主要包含两大项:EMI(干扰)和EMS(抗干扰和敏感度)。这两大项中又包括许多小项目,如下图:
EMC整改意见
1.首先需要双方的沟通相关信息,如验收的标准、摸底的报告、PCB图等信息;为什么要确定这么多信息呢?举例标准方面在车载行业,如五等级跟二等级那差距就大了去了。在提供相关资料和沟通后,我们会给出初步的整改建议,定位好EMC整改计划。
2.定位手段,对于这里小编觉得主要可以分为两点。
第一:经验判断,根据双方沟通情况,根据工程师的经验结合数据及测试情况来进行判断。
第二:比较测试,根据再次测试仪器所提供的数据来进行分析问题。Tip:我们有自己的实验室,可以方便各位亲测试哟
EMC整改流程
1.RE超标整改流程
2.电源电缆导致辐射超标定位子流程:
3.信号电缆导致辐射超标定位子流程:
4.屏蔽体泄漏整改流程:
EMC整改的一些小建议 1.电容的滤波作用
即频率f越大,电容的阻抗Z越小。当低频时,电容C由于阻抗Z比较大,有用信号可以顺利通过;当高频时,电容C由于阻抗Z已经很小了,相当于把高频噪声短路到GND上去了。2.电容滤波在何时会失效整改中常常会使用电容这种元器件进行滤波,往往有“大电容滤低频,小电容滤高频”的说法。以常见的表贴式MLCC陶瓷电容为例,进行等效模型如下:
容值10nF,封装0603的X7R陶瓷的模型参数如下:
由于等效模型中既有电容C,也有电感L,组成了二阶系统,就存在不稳定性。对电路回路来说,就是会发生谐振,谐振点在如下频率处:
下图是谐振曲线的示例:
即常说的在谐振点前是电容,谐振点之后就不再是电容了。3.LC滤波何时使用如果串联电感L,再并联组成C,就形成了LC滤波:
单独一个电容C是一阶系统,单独一个电感L也是一阶系统,在幅值衰减斜率是-20dB。但LC组成的二阶系统,幅值衰减斜率是-40dB,更靠近理想的“立陡”的截止频率的效果,即滤波效果更好。
4.PWM频率到底是多少往往提到PWM,比如会说用20kHz PWM驱动电机等。
但实际上,这个20kHz仅代表PWM的脉冲周期是50us
对于阶跃信号来说,由于上升时间tr无穷小,则频率f无穷大。当频率高了之后,寄生参数则不能在忽略,会引发很多谐振的问题。从信号上来看,就是很陡峭的阶跃信号会有过冲和振荡的问题。简单来说就是频率f越大,则噪声所占的频率就会越宽泛,即EMC特性就会越差。
5.如何将原理图和PCB对应起来由于细分工种的问题,原理图和PCB被割裂开来,由两组人进行分工作业:
例如在原理图上有如下的电路:
其隐含一个问题就是在PCB上其实V1的负极和C1的负极是有一条线(PCB layout工具软件中用的词比较准确,Trace,踪迹/轨迹)。往往在设计阶段A->B->C是都会关注的。如果EMC出现问题,除了要在原理图上查找电路参数的问题,还需要特别关注C->D,即回流路径。
如果回流路径不顺畅,会造成信号的畸变。
比如在EMC试验时,MCU的ADC采集到的信号被干扰到了,则除了在原理图上分析外,在PCB上讲该信号高亮出来,然后再耐心寻找该信号的回流路径是否有不顺畅的地方:对着信号线头脑中想象回流路径,有点意识流的感觉。
总结
.
三、PID
这个之前发过 再来一遍 可好
PID,就是“比例(proportional)、积分(integral)、微分(derivative)”,是一种很常见的控制算法。
PID已经有107年的历史了
它并不是什么很神圣的东西,大家一定都见过PID的实际应用。
比如四轴飞行器,再比如平衡小车......还有汽车的定速巡航、3D打印机上的温度控制器....
就是类似于这种:需要将某一个物理量“保持稳定”的场合(比如维持平衡,稳定温度、转速等),PID都会派上大用场。
那么问题来了:
比如,我想控制一个“热得快”,让一锅水的温度保持在50℃,这么简单的任务,为啥要用到微积分的理论呢
你一定在想:
这不是so easy嘛~ 小于50度就让它加热,大于50度就断电,不就行了?几行代码用Arduino分分钟写出来。
没错~在要求不高的情况下,确实可以这么干~ But!如果换一种说法,你就知道问题出在哪里了:
如果我的控制对象是一辆汽车呢?
要是希望汽车的车速保持在50km/h不动,你还敢这样干么。
设想一下,假如汽车的定速巡航电脑在某一时间测到车速是45km/h。它立刻命令发动机:加速!
结果,发动机那边突然来了个100%全油门,嗡的一下,汽车急加速到了60km/h。
这时电脑又发出命令:刹车!
结果,吱...............哇............(乘客吐)
所以,在大多数场合中,用“开关量”来控制一个物理量,就显得比较简单粗暴了。有时候,是无法保持稳定的。因为单片机、传感器不是无限快的,采集、控制需要时间。
而且,控制对象具有惯性。比如你将一个加热器拔掉,它的“余热”(即热惯性)可能还会使水温继续升高一小会。
这时,就需要一种『算法』:
- 它可以将需要控制的物理量带到目标附近
- 它可以“预见”这个量的变化趋势
- 它也可以消除因为散热、阻力等因素造成的静态误差
- ....
于是,当时的数学家们发明了这一历久不衰的算法——这就是PID。
你应该已经知道了,P,I,D是三种不同的调节作用,既可以单独使用(P,I,D),也可以两个两个用(PI,PD),也可以三个一起用(PID)。
这三种作用有什么区别呢?客官别急,听我慢慢道来
我们先只说PID控制器的三个最基本的参数:kP,kI,kD。
kP
P就是比例的意思。它的作用最明显,原理也最简单。我们先说这个:
需要控制的量,比如水温,有它现在的『当前值』,也有我们期望的『目标值』。
- 当两者差距不大时,就让加热器“轻轻地”加热一下。
- 要是因为某些原因,温度降低了很多,就让加热器“稍稍用力”加热一下。
- 要是当前温度比目标温度低得多,就让加热器“开足马力”加热,尽快让水温到达目标附近。
这就是P的作用,跟开关控制方法相比,是不是“温文尔雅”了很多
实际写程序时,就让偏差(目标减去当前)与调节装置的“调节力度”,建立一个一次函数的关系,就可以实现最基本的“比例”控制了~
kP越大,调节作用越激进,kP调小会让调节作用更保守。
要是你正在制作一个平衡车,有了P的作用,你会发现,平衡车在平衡角度附近来回“狂抖”,比较难稳住。
如果已经到了这一步——恭喜你!离成功只差一小步了~
kD
D的作用更好理解一些,所以先说说D,最后说I。
刚才我们有了P的作用。你不难发现,只有P好像不能让平衡车站起来,水温也控制得晃晃悠悠,好像整个系统不是特别稳定,总是在“抖动”。
你心里设想一个弹簧:现在在平衡位置上。拉它一下,然后松手。这时它会震荡起来。因为阻力很小,它可能会震荡很长时间,才会重新停在平衡位置。
请想象一下:要是把上图所示的系统浸没在水里,同样拉它一下 :这种情况下,重新停在平衡位置的时间就短得多。
我们需要一个控制作用,让被控制的物理量的“变化速度”趋于0,即类似于“阻尼”的作用。
因为,当比较接近目标时,P的控制作用就比较小了。越接近目标,P的作用越温柔。有很多内在的或者外部的因素,使控制量发生小范围的摆动。
D的作用就是让物理量的速度趋于0,只要什么时候,这个量具有了速度,D就向相反的方向用力,尽力刹住这个变化。
kD参数越大,向速度相反方向刹车的力道就越强。
如果是平衡小车,加上P和D两种控制作用,如果参数调节合适,它应该可以站起来了~欢呼吧
等等,PID三兄弟好像还有一位。看起来PD就可以让物理量保持稳定,那还要I干嘛?
因为我们忽视了一种重要的情况:
kI
还是以热水为例。假如有个人把我们的加热装置带到了非常冷的地方,开始烧水了。需要烧到50℃。
在P的作用下,水温慢慢升高。直到升高到45℃时,他发现了一个不好的事情:天气太冷,水散热的速度,和P控制的加热的速度相等了。
这可怎么办?
- P兄这样想:我和目标已经很近了,只需要轻轻加热就可以了。
- D兄这样想:加热和散热相等,温度没有波动,我好像不用调整什么。
于是,水温永远地停留在45℃,永远到不了50℃。
作为一个人,根据常识,我们知道,应该进一步增加加热的功率。可是增加多少该如何计算呢?
前辈科学家们想到的方法是真的巧妙。
设置一个积分量。只要偏差存在,就不断地对偏差进行积分(累加),并反应在调节力度上。
这样一来,即使45℃和50℃相差不太大,但是随着时间的推移,只要没达到目标温度,这个积分量就不断增加。系统就会慢慢意识到:还没有到达目标温度,该增加功率啦!
到了目标温度后,假设温度没有波动,积分值就不会再变动。这时,加热功率仍然等于散热功率。但是,温度是稳稳的50℃。
kI的值越大,积分时乘的系数就越大,积分效果越明显。
所以,I的作用就是,减小静态情况下的误差,让受控物理量尽可能接近目标值。
I在使用时还有个问题:需要设定积分限制。防止在刚开始加热时,就把积分量积得太大,难以控制。
PID到底怎么调?
PID参数调整口诀:
参数整定找最佳,从小到大顺序查
先是比例后积分,最后再把微分加
曲线振荡很频繁,比例度盘要放大
曲线漂浮绕大湾,比例度盘往小扳
曲线偏离回复慢,积分时间往下降
曲线波动周期长,积分时间再加长
曲线振荡频率快,先把微分降下来
动差大来波动慢。微分时间应加长
理想曲线两个波,前高后低四比一
一看二调多分析,调节质量不会低
若要反应增快,增大P减小I
若要反应减慢,减小P增大I
如果比例太大,会引起系统震荡
如果积分太大,会引起系统迟钝
四、用MOS管还是三极管
三极管
三极管,全称应为半导体三极管,也称双极型晶体管、晶体三极管,是一种控制电流的半导体器件,其作用是把微弱信号放大成幅度值较大的电信号, 也用作无触点开关。
晶体三极管,是半导体基本元器件之一,具有电流放大作用,是电子电路的核心元件。三极管是在一块半导体基片上制作两个相距很近的PN结,两个PN结把整块半导体分成三部分,中间部分是基区,两侧部分是发射区和集电区,可分为PNP和NPN两种。
场效应晶体管
场效应晶体管(Field Effect Transistor缩写(FET))简称场效应管。
主要有JFET、MOSFET两种类型:
结型场效应管(junction FET—JFET)和金属 - 氧化物半导体场效应管(metal-oxide semiconductor FET,简称MOS-FET)。由多数载流子参与导电,也称为单极型晶体管。
它属于电压控制型半导体器件。具有输入电阻高、噪声小、功耗低、动态范围大、易于集成、没有二次击穿现象、安全工作区域宽等优点,现已成为双极型晶体管和功率晶体管的强大竞争者。
场效应管(FET)是利用控制输入回路的电场效应来控制输出回路电流的一种半导体器件,并以此命名。由于它仅靠半导体中的多数载流子导电,又称单极型晶体管。
选用MOS管还是三极管?
成本考量
在满足工程需求的条件下,成本是在二者之间选择的关键。而成本又分为元器件价格与元器件自身功耗两方面。
价格方面,三极管价格便宜,场效应晶体管贵。
功耗方面,三极管损耗大,场效应晶体管损耗较小。
特性区别
1、场效应管是电压控制元件,而三极管是电流控制元件。在只允许从信号源取较少电流的情况下,应选用场效应管;而在信号电压较低,又允许从信号源取较多电流的条件下,应选用三极管。
2、场效应管是利用多数载流子导电,所以称之为单极型器件,而三极管是即有多数载流子,也利用少数载流子导电。被称之为双极型器件。
3、有些场效应管的源极和漏极可以互换使用,栅压也可正可负,灵活性比三极管好。
4、场效应管能在很小电流和很低电压的条件下工作,而且它的制造工艺可以很方便地把很多场效应管集成在一块硅片上,因此场效应管在大规模集成电路中得到了广泛的应用。
5、场效应晶体管具有较高输入阻抗和低噪声等优点,因而也被广泛应用于各种电子设备中。尤其用场效管做整个电子设备的输入级,可以获得一般三极管很难达到的性能。
6、场效应晶体管常用来电源开关,以及大电流地方开关电路。MOS管用于高频高速电路,大电流场合,以及对基极或漏极控制电流比较敏感的地方。
.
.
五、MOS管驱动电路
MOS管因为其导通内阻低,开关速度快,因此被广泛应用在开关电源上。而用好一个MOS管,其驱动电路的设计就很关键。下面分享几种常用的驱动电路。
1 电源IC直接驱动
电源IC直接驱动是最简单的驱动方式,应该注意几个参数以及这些参数的影响。
①查看电源IC手册的最大驱动峰值电流,因为不同芯片,驱动能力很多时候是不一样的。
②了解MOS管的寄生电容,如图C1、C2的值,这个寄生电容越小越好。如果C1、C2的值比较大,MOS管导通的需要的能量就比较大,如果电源IC没有比较大的驱动峰值电流,那么管子导通的速度就比较慢,就达不到想要的效果。
2 推挽驱动
当电源IC驱动能力不足时,可用推挽驱动。
这种驱动电路好处是提升电流提供能力,迅速完成对于栅极输入电容电荷的充电过程。这种拓扑增加了导通所需要的时间,但是减少了关断时间,开关管能快速开通且避免上升沿的高频振荡。
3 加速关断驱动
MOS管一般都是慢开快关。在关断瞬间驱动电路能提供一个尽可能低阻抗的通路供MOSFET栅源极间电容电压快速泄放,保证开关管能快速关断。
为使栅源极间电容电压的快速泄放,常在驱动电阻上并联一个电阻和一个二极管,如上图所示,其中D1常用的是快恢复二极管。这使关断时间减小,同时减小关断时的损耗。Rg2是防止关断的时电流过大,把电源IC给烧掉。
如上图,是我之前用的一个电路,量产至少上万台,推荐使用。
用三极管来泄放栅源极间电容电压是比较常见的。如果Q1的发射极没有电阻,当PNP三极管导通时,栅源极间电容短接,达到最短时间内把电荷放完,最大限度减小关断时的交叉损耗。
还有一个好处,就是栅源极间电容上的电荷泄放时电流不经过电源IC,提高了可靠性。
4 隔离驱动
为了满足高端MOS管的驱动,经常会采用变压器驱动。其中R1目的是抑制PCB板上寄生的电感与C1形成LC振荡,C1的目的是隔开直流,通过交流,同时也能防止磁芯饱和。
六、电解电容为什么会爆炸
01 电解电容
电解电容是通过电解质作用在电极上形成的氧化层作为绝缘层的电容,通常具有较大的容量。电解质是液体、胶冻状富含离子的物质,大多数电解电容都是有极性的,也就是在工作时,电容的正极的电压需要始终比负极电压高。
电解电容的高容量也是牺牲了很多其它的特性换来的,比如具有较大的漏电流、较大的等效串联电感和电阻、容值误差较大、寿命短等。除了有极性的电解电容之外,也有无极性的电解电容。在下图中,就是有两种1000uF,16V的电解电容。其中,较大的是无极性,较小的是有极性的。
(无极性和有极性电解电容)电解电容内部可能是液体电解质或者固态聚合物,电极材料常用铝(Aluminum)或者钽(Tandalum)。下图是常见的有极性铝电解电容内部的结构,两层电极之间有一层浸有电解液的纤维纸,再加一层绝缘纸转成圆柱形,密封在铝制壳内。
(电解电容内部结构)
解剖开电解电容,可以清楚地看到它的基本结构。为了防止电解液的蒸发和泄露,电容引脚部分使用了密封橡胶进行固定。
当然,图中也显示了有极性和无极性的电解电容的内部体积的差别。在同样容量和耐压等级下,无极性的电解电容比有极性大了一倍左右。
(无极性和有极性电解电容内部结构)这样的差别,主要来自于两种电容内部电极的面积出现了较大的差异。下图左边是无极性的电容电极,右边是有极性的电极。除了面积差异之外,两种电极厚度也有区别,有极性的电容电极厚度较薄。
(电解电容铝片不同的宽度)
02 电容爆炸
当电容施加的电压超过其耐压时,或者对于有极性电解电容电压极性加反时,都会引起电容漏电流急剧上升,造成电容内部热量增加,电解液会产生大量的气体。
为了防止电容爆炸,在电容外壳的顶部压制有三条凹槽,这样便于电容顶部在高压下率先破裂,释放内部的压力。
(电解电容顶部的爆破槽)
但是,有的电容在制作过程中,顶部的凹槽压制不合格,电容内部的压力会使得电容底部的密封橡胶被弹出,此时电容内部的压力突然释放,就会形成爆炸。
1、无极性电解电容爆炸
下图显示了手边一颗无极性电解电容,它的容量为1000uF,耐压16V。在施加电压超过18V之后,漏电流突然增加,电容内部的温度和压力增加。最终,电容底部的橡胶密封圈炸开,内部电极像爆米花一下被砸松散。
(无极性电解电容过压爆破)
通过在电容上捆绑一个热电偶,可以测量电容的温度随着施加的电压增加变化的过程。下图显示了无极性电容在电压增加过程中,当施加的电压超过耐压值,内部温度继续增高的过程。
(电压与温度之间的关系)下图显示了在同样的过程中,流过电容的电流变化。可以看到,电流的增加是造成内部温度上升的主要原因。在这个过程中,电压是成线性增加,随着电流急剧升高,供电电源内组使得电压下降。最终,当电流超过6A之后,随着一声巨响,电容炸开。
(电压与电流之间的关系)
由于无极性的电解电容内部体积大,电解液多,所以在过流之后所产生的压力巨大,导致了外壳顶部的泄压槽没有破裂,而电容底部的密封橡胶被炸开了。
2、有极性电解电容爆炸
对于有极性的电解电容,施加电压。当电压超过电容的耐压时,漏电电流也会急剧上升,造成电容过热爆炸。
下图显示了有极限的电解电容,它的容量为1000uF,耐压16V。在过压之后,通过顶部泄压槽释放内部气压过程,因此就避免了电容爆炸过程。
下图显示了电容的温度随着施加电压的增加变化的情况,当电压逐步接近电容的耐压后,电容的留点电流增加,内部的温度继续上升。
(电压与温度之间的关系)下图是电容的漏电电流变化情况,标称为16V耐压的电解电容,在测试过程中,当电压超过15V之后,电容的漏电便开始急剧上升了。
(电压与电流之间的关系)
通过前面两个电解电容的实验过程遭遇,也可以看到对于此类1000uF普通电解电容耐压限制情况。为了避免电容被高压击穿,因此在使用电解电容的时候,需要根据实际电压波动情况,留下足够的余量。
03 电解电容串联
在适当的情况下,可以通过并联和串联来分别获得更大的电容容量和更大的电容耐压。
(过压爆破之后的电解电容爆米花)
在有些应用场合,施加在电容上的电压是交流电压,比如扬声器的耦合电容、交流电相位补偿、电机移相电容等,需要使用无极性的电解电容。
在一些电容制造商给出的使用手册上,也给出了使用传统的有极性电容通过背对背的串联,即将两个电容的串联在一起,但极性相反来获得无极性电容的效果。
(过压爆破之后的电解电容)
下面对比一下有极性电容在施加正向电压、反向电压、两个电解电容背对背串联成无极性电容三种情况下,漏电流随着施加电压增加变化情况。
1、正向电压与漏电流
通过串联一个电阻来测量流过电容的电流,在电解电容(1000uF,16V)的耐压范围内,从0V开始逐步增加施加的电压,测量对应的漏电电流与电压之间的关系。
(正极性串联电容)下图显示了有极性铝电解电容的漏电流与电压之间的关系,这是一个非线性的关系,漏电电流在0.5mA以下。
(正向串联之后电压电压与电流之间的关系)
2、反向电压与漏电电流使用同样的电流测量施加方向电压与电解电容漏电电流之间的关系,从下图可以看出,当施加的反向电压超过了4V之后,漏电电流便开始快速增加。通过后面的曲线斜率来看,反向的电解电容相当于一个阻值 为1欧姆的电阻。
(反向电压电压与电流之间的关系)
3、背对背串联的电容将两个相同的电解电容(1000uF,16V)背对背串联在一起,形成一个无极性等效的电解电容,然后测量它们的电压与漏电流之间的关系曲线。
(正反极性串联电容)
下图显示了电容电压与漏电流之间的关系,可以看到在施加的电压超过4V之后,漏电流会增加,电流幅值小于1.5mA而这个测量结果的确有点令人感到意外,你会看到这两个背对背串联电容的漏电流,居然大于单个电容正向施加电压时漏电流。
(正反向串联之后电压电压与电流之间的关系)
不过,由于时间原因,对于这个现象后面没有进行重复测试,也许其中一个电容使用的是刚才反向电压测试的电容,内部已经有了损坏,所以才产生了上面的测试曲线。
.
七、如何进行阻抗匹配?
一件器材的输出阻抗和所连接的负载阻抗之间所应满足的某种关系,以免接上负载后对器材本身的工作状态产生明显的影响。
什么是阻抗
在电学中,常把对电路中电流所起的阻碍作用叫做阻抗。阻抗单位为欧姆,常用Z表示,是一个复数:
Z= R+i( ωL–1/(ωC))
具体说来阻抗可分为两个部分,电阻(实部)和电抗(虚部)。
其中电抗又包括容抗和感抗,由电容引起的电流阻碍称为容抗,由电感引起的电流阻碍称为感抗。
阻抗匹配的理想模型
信号源与传输线之间匹配,分为两种情况:
- 使信号源无反射,方法是接入信号源与传输线之间接入匹配装置
- 信号源共轭匹配,方法是信号源与被匹配电路之间接入匹配装置,这种情况下多属于有源电路设计
射频工程师大都遇到过匹配阻抗的问题,通俗的讲,阻抗匹配的目的是确保能实现信号或能量从“信号源”到“负载”的有效传送。
如下图所示,其最最理想模型当然是希望信号源Source端的输出阻抗为50欧姆,传输线的阻抗为50欧姆,负载Load端的输入阻抗也是50欧姆,一路50欧姆下去,这是最理想的模型。
然而实际情况是:源端阻抗不会是50ohm,负载端阻抗也不会是50ohm,这个时候就需要若干个阻抗匹配电路。
而匹配电路就是由电感和电容所构成,这个时候我们就需要使用电容和电感来进行阻抗匹配电路调试,以达到RF性能最优。
阻抗匹配的方法
阻抗匹配的方法主要有两个,一是改变阻抗力,二是调整传输线。
改变阻抗力就是通过电容、电感与负载的串并联调整负载阻抗值,以达到源和负载阻抗匹配。
调整传输线是加长源和负载间的距离,配合电容和电感把阻抗力调整为零。
此时信号不会发生发射,能量都能被负载吸收。
高速PCB布线中,一般把数字信号的走线阻抗设计为50欧姆。一般规定同轴电缆基带50欧姆,频带75欧姆,对绞线(差分)为85-100欧姆。
阻抗匹配(Impedance matching)其实是微波电子学里的一部分,主要用于传输线上,是为了达到所有高频微波信号都能传至负载点的目的,不会有信号反射回源点。
大体上,阻抗匹配有两种:
- 一种是通过改变阻抗力(lumped-circuit matching)
- 调整传输线(transmission line matching)
要匹配一组线路,首先把负载点的阻抗值除以传输线的特性阻抗值来归一化,然后把数值划在史密夫图表上。
改变阻抗力
把电容或电感与负载串联起来,即可增加或减少负载的阻抗值,在图表上的点会沿著代表实数电阻的圆圈走动。如果把电容或电感接地,首先图表上的点会以图中心旋转180度,然后才沿电阻圈走动,再沿中心旋转180度。重复以上方法直至电阻值变成1,即可直接把阻抗力变为零完成匹配。
调整传输线
由负载点至来源点加长传输线,在图表上的圆点会沿著图中心以逆时针方向走动,直至走到电阻值为1的圆圈上,即可加电容或电感把阻抗力调整为零,完成匹配。
阻抗匹配则传输功率大,对于一个电源来讲,当它的内阻等于负载时,输出功率最大,此时阻抗匹配。最大功率传输定理,如果是高频的话,就是无反射波。对于普通的宽频放大器,输出阻抗50Ω,功率传输电路中需要考虑阻抗匹配,可是如果信号波长远远大于电缆长度,即缆长可以忽略的话,就无须考虑阻抗匹配了。阻抗匹配是指在能量传输时,要求负载阻抗要和传输线的特征阻抗相等,此时的传输不会产生反射,这表明所有能量都被负载吸收了。反之则在传输中有能量损失。高速PCB布线时,为了防止信号的反射,要求是线路的阻抗为50欧姆。这是个大约的数字,一般规定同轴电缆基带50欧姆,频带75欧姆,对绞线则为 100欧姆,只是取个整而已,为了匹配方便。
.
八、STM32中的上/下拉电阻
STM32中的GPIO
以STM32中的GPIO为例,如上图是GPIO的结构图。
从上图中标号2处可以看到,上拉和下拉电阻上都有一个开关,通过配置上下拉电阻开关,可以控制引脚的默认电平,这里有三种状态:
- 开启上拉时,引脚默认电压为高电平
- 开启下拉时,引脚默认电压为低电平
- 上拉和下拉不开启时,这种状态我们称为浮空模式
STM32上下拉及浮空模式的配置是通过GPIOx_CRL和GPIOx_CRH寄存器控制的,可以通过《STM32F1xx 中文参考手册》查阅。
开启上拉电阻或下拉电阻的作用
STM32内部的上拉其实是一个弱上拉,也就是说通过此上拉电阻输出的电流很小,如果想要输出一个大电流。那么就需要外接上拉电阻了,其实就是增加导线的输出电流。
下拉电阻情况相反,让STM32的CPU引脚输出低电平,结果由于后续电路影响输出的低电平达不到GND。所以接个下拉电阻,其实就是为了降低导线的输出电流。
另外当上下拉电阻都不开启,此时是浮空模式,引脚的电压是不确定的,此模式下的管脚电压会时不时改变。
所以为了防止引脚悬空,产生积累电荷、静电荷,造成电路不稳定。一般情况下,我们都会给引脚设置成上拉或者下拉模式,使它有一个确定的默认电平状态。
以上拉电阻举例,在STM32刚上电的时候,芯片引脚电平是不确定的。特别引脚是接按键的时候,必须给他个确定的电平。下拉电阻的作用就是,强制让电平保持在低电平。
上下拉电阻阻值的大小
根据拉电阻的阻值大小,可以分为强拉或弱拉(weak pull-up/down)。拉电阻阻值越小则表示电平能力越强,为强拉,可以抵抗外部噪声的能力也越强,相应的功耗也越大。
举个例子:
按键的上拉电阻可以选择3.3k、4.7k、5.1k、10k等,但是电阻越小,电流越大,功耗也越大。10k的上拉电阻带来的电流,是大多数芯片所能识别到的引脚电流,如果电阻太大,电流太小,引脚识别不了,所以10k是个折中的方案。这里的电流,简单来说是根据公式VDD/R拉电阻计算出来的。
.
九、使用ADC精确测量电阻阻值
现在很多单片机都有ADC功能了,10位或者12位的,使用ADC测量电压是很方便的,测量电阻阻值的话可以使用欧姆定律进行分压然后测量分压后的电压即可计算出电阻阻值,最简单的电阻测量电路如下图:
这时候测量点的电压计算公式为:Vo=R2 / (R1 + R2) * Uref。
这是最简单的测量计算方法。但是因为简单也会导致不少小问题,比如如果R1取值为2K,Uref为5V,而R2的阻值范围在5到10欧姆左右,那么R2分得的电压Vo=0.01247到0.02488,电压变化的范围过小,如果ADC是12位的,ADC的参考电压为3.3V,这时候ADC的采集值的范围在15到30,也就是AD值的变化范围有30-15=15个,而电阻的变化范围为10-5=5欧姆,也就是5欧姆的变化范围用15个AD值的变化来计算,那么AD测量的精度就是:5欧姆 / 15个 = 0.33欧姆,也就是AD值加1,计算得到的电阻值就要加0.33欧姆,这精度着实让人接受不了。
再比如R1和Uref的值不变,而R2的阻值范围在1K到2K之间,同样的计算方法得到R2的分压值Vo=1.1到1.65伏,AD值的范围为1365到2048,AD的测量精度为:1K/(2048-1365)=1.46。奇怪的是为什么AD值的范围这么大了,精度反而更很差劲呢?因为电阻的取值范围很宽,导致精度降低了。
怎么办?我想要测量一个比较精密的电阻的阻值R2,该怎么办?下面的方法是网上的电桥测量电阻的方法,我为了测量方便有所修改。电阻网络电路如下图:
R2的电阻阻值大约在100到200欧姆,我们取一个参考电阻R3为100欧,R1和R3阻值相同为2K。这样得到了U1和U2两个分压值,U2为固定电压U2=100 / (100+2000) * Uref。U1的值根据R2的变化而改变:U1=R2 / (R2+2000) * ref。得到了U1和U2之后可以计算压差:
△U=U1-U2,将这两个电压输入到运算放大器中去进行合理放大,使得得到的输出电压范围在ADC参考电压范围内尽可能的宽,这样使用ADC就能更加精确地测量到电压值。使用运放进行放大的电路如下图:
在R5=R6,R7=R8的情况下,运放的放大倍数m=R7 / R5。电路中的放大倍数为m=20。经运放放大后得到了Uo送到单片机系统的ADC中去进行AD采样。那么我们可以计算一下ADC测量得到的AD值和电阻R2之间的关系。
现在假定ADC系统的参考电压为Uadc,ADC采样位数为12位,ADC的测量值为A,那么Uo的计算公式如下:
Uo = A / 4096 * Uadc
而Uo也是运放的输出电压,根据电桥网络和运放进行计算可以得到:
Uo = (U1-U2) * m = ( (R2/(R1+R2) - R4/(R3+R4) ) * Uref * m
也就是说:
( (R2/(R1+R2) - R4/(R3+R4) ) * Uref * m = A / 4096 * Uadc ----------------------------①
上式中R1、R3、R4、m、Uref、Uadc都是已知的,那么根据ADC测量得到的值A’就可以轻松计算出来电阻R2的阻值。
上面说的是理论上的计算方式,的确是这样的,但是往往现实都比较残酷,由于电阻都有误差而且运放也不是绝对精密,那么已知的R1、R3、R4、m、Uref、Uadc几个参数都是和真实值有微小差别的,例如电阻R1的标称电阻为2K,误差为1%,万用表测量得到的阻值为1980欧姆,显然误差是有的,直接带入式子进行计算是不可行的。那怎么办呢?
解决办法总是有的。前面公式①中是根据ADC的测量值和几个已知参数来求电阻R2的阻值,那么我们就反过来,使用若干组已知的固定阻值的R2电阻接入电阻网络并测量出AD值A,来计算R1、R3、R4、m、Uref、Uadc几个参数,但是这几个参数有点多,6个未知参数需要6组式子才能解出来,非常的费劲,那么我们就简化一下计算方式。
我们将R4设为0欧姆,也就是U2接到GND,U2=0,这样式子①就能简化成:
R2/(R1+R2) * Uref * m = A / 4096 * Uadc ----------------------------②
这不简单多了!好,现在我们要求出式子中的R1的阻值和放大倍数m,两个未知数我们就需要两组已知的点(R2,A)来求出参数R1和m。这样取第一个点的测试电阻为R21,AD值为A1,第二个点的测试电阻为R22,AD值为A2,带入到式子②中去得到:
R21/(R1+R21) * Uref * m = A1 / 4096 * Uadc
R22/(R1+R22) * Uref * m = A2 / 4096 * Uadc
上面的式子除以下面的式子可以得到:
(R21/(R1+R21)) / (R22/(R1+R22)) = A1 / A2
进过整理之后得到:
R1=(R21 * R22) * (A2 - A1) / (R22A1 - R21 * A2)
这就求出来了R1的阻值了。
然后我们再求m的值,根据式子②可以得到m的计算公式为:
m = (A / 4096 * Uadc) / (R2/(R1+R2) * Uref)
我们将电阻网络的电源和ADC系统的参考电源连接到一起,也就是说Uref=Uadc,我们要保证电源的稳定性,可以使用TL431或者REF3030等高精度稳压芯片生产稳定电压源为电阻网络和ADC系统供电。由于Uref=Uadc,这样的话上面的式子得到了简化:
m = (A / 4096) / (R2/(R1+R2))
整理得到:
m = A(R1+R2) / (4096 * R2) ----------------------------③
式子③中R1在前面已经算出来了,那么m也求出来了。
到这里我们已经求出来了R1和m的值,后面就能根据这两个参数和测量出来的AD值求出来待测电阻R2的值了。由于Uref=Uadc,式子②变成:
R2/(R1+R2) * m = A / 4096
整理得到:
R2 = A * R1 / (4096*m - A) ----------------------------④
式子④已经简单到只需要A、R1、m就能计算出来R2的阻值了,并且使用的R1和m都是我们自己计算出来的值,而不是直接使用理论计算出来的值,精度提高了不少。同时我们可以发现由于Uref=Uadc,上面的式子②两端约分了,所有计算竟然和Uref、Uadc没有关系了,也就是说不管Uref、Uadc怎么变动,只要Uref和Uadc一直是相等的,所有参数和阻值的计算都不涉及到Uref和Uadc。但是我们最好要保证Uadc的稳定,不然测量出来的AD值会不准确的。
.
十、ADC,内部原理
STM32包括ADC模块。ADC(Analog-to-Digital Converter)即模拟信号转换为数字信号的装置,是数字系统必不可少的组成部分。在STM32中,ADC模块分为多个硬件单元,可以通用于多种模拟输入信号。
1. ADC硬件结构
STM32的ADC模块通常包括多个单元,其中核心单元为ADCx(其中x表示数字)。每个ADC单元都可以转换多个模拟采样通道,并支持多路通道转换,其中ADC1/ADC2最多支持16通道,而ADC3最多支持18通道。而每个通道对应着一个和该通道关联的模拟输入引脚,这些引脚是由芯片的管脚引出。
ADC单元由以下几个部分组成:
①模拟参考电压:模拟输入信号的参考电压通常由最大模拟值(Vref+)和最小模拟值(Vref-)的差值所得。在STM32中,参考电压可以从内部的参考电路或外部引脚输入。
②采样保持电路:采样保持电路旨在在转换之前保持输入电平稳定。STM32采取了先进的可编程采样保持电路,可以实现各种采样时间和采样保持电压的组合。
③ADC时钟:ADC单元需要一个时钟来控制转换速率。时钟的频率由ADC预分频器控制,可以将外部时钟频率分频至合适的转换速率。
④转换器:ADC单元的核心部分是ADC转换器。在转换过程中,模拟输入信号被转换为数字信号,通过DMA通道传输到内存中,并在转换完成后触发中断。
2. ADC工作流程
ADC模块的工作流程可以分为以下几个步骤:
①初始化ADC单元:包括配置时钟、参考电压源、采样保持时间等。
②配置模拟输入通道和采样时间:确定要读取的模拟输入通道,以及采样保持时间。
③校准ADC单元:ADC单元需要在每次启动前进行校准。校准过程将自动调整内部参考电压,以保证准确的转换。
④启动ADC单元:在转换之前,通过软件启动ADC单元,开始进行转换。
⑤读取转换结果:当转换完成后,ADC单元会触发转换完成中断,并将转换结果存储在寄存器中。此时,可以使用DMA通道将转换结果传输到内存中,也可以直接读取寄存器中的值。
如果要对每个通道进行连续转换,可以使用扫描模式。扫描模式允许一次启动多个转换,并允许设置转换顺序。
用了这么久ADC,从没细看过ADC的内部原理和如何获得最佳精度,今天看到一篇ST的官方文档讲的不错,这里整理分享给大家
SAR ADC内部结构
STM32微控制器中内置的ADC使用SAR(逐次逼近)原则,分多步执行转换。转换步骤数等 于ADC转换器中的位数。每个步骤均由ADC时钟驱动。每个ADC时钟从结果到输出产生一 位。ADC的内部设计基于切换电容技术。
下面的图介绍了ADC的工作原理。下面的示例仅显示了逼近的前面几步,但是该过程会持续到LSB为止
SAR切换电容ADC的基本原理(10位ADC示例)
带数字输出的ADC基本原理图
采样状态 采样状态:电容充电至电压VIN。Sa切换至VIN,采样期间Sb开关闭合
保持状态 保持状态:输入断开,电容保持输入电压。Sb开关打开,然后S1-S11切换至接地且Sa切换至VREF。
逐次逼近 1、第一个逼近步骤。S1切换至VREF。VIN与VREF/2比较
2、如果MSB = 0,则与¼VREF进行比较,S1切换回接地。S2切换至VREF。
3、如果MSB = 1,则与¾VREF进行比较,S1保持接地。S2切换至VREF。
重复如上步骤,直到LSB为止。可以简单理解为二分法逐次进行输入电压与参考电压的比较。首次于VREF/2比较,下次比较根据上次比较结果决定,如果MSB=1则与¾VREF比较。如果MSB=0则与¼VREF比较。后面决定与1/8VREF 3/8VREF、 5/8VREF、 7/8VREF之一做比较。循环直到输出LSB为止。
.
十一、解决RFID噪声
射频标签(RFID)是一项伟大的技术,但是有噪声的电源和其它一些因数可能会降低其性能。采用低频信号(比如130kHz)的RFID阅读器,如业内常用的TIRIS RFM-007B,对这个频率范围内的噪声就非常敏感。开关电源经常会产生这个频率范围内的噪声,因此为了得到最大的灵敏度,通常需要使用较重的、昂贵的线性电源。
然而,RFID阅读器的工作周期包含多个阶段,只有一个阶段对噪声敏感。这几个阶段分别是:大功率阶段(发射,功率10W,持续时间50ms);低功率阶段(接收,18ms);空闲阶段(最长33ms,取决于固件)。噪声只是在时间很短的接收阶段出现的问题。
本设计实例在接收和空闲阶段关闭了开关电源,让模块使用C2中存储的能量继续工作。
图1:选择性关闭电源的RFID。
像LM2576这样的降压转换器都有一个关断输入引脚,使得上述操作很容易实现。
MCU的RFID模块发射控制线(/TXCT)通过U3和Q1也可以控制关断线,若是需要还可以采用独立的MCU输出来控制关断线。
图2:典型的电源工作周期时序。
叉车经常使用RFID进行位置检测,从而实现自动物流以及限速等安全功能。
电动叉车所处环境的噪声特别大,电机驱动中所产生的高频调制大电流使RFID工作起来相当困难。若是使用本文介绍的控制技术,使RFID周期与修改后的电机驱动周期保持同步,由电机驱动干扰引起的灵敏度降低的问题就可以得到极大的改善。
.
十二、阻抗匹配
什么是阻抗
在电学中,常把对电路中电流所起的阻碍作用叫做阻抗。阻抗单位为欧姆,常用Z表示,是一个复数Z= R+i( ωL–1/(ωC))
具体说来阻抗可分为两个部分,电阻(实部)和电抗(虚部)。
其中电抗又包括容抗和感抗,由电容引起的电流阻碍称为容抗,由电感引起的电流阻碍称为感抗。
阻抗匹配的理想模型
射频工程师大都遇到过匹配阻抗的问题,通俗的讲,阻抗匹配的目的是确保能实现信号或能量从“信号源”到“负载”的有效传送
其最最理想模型当然是希望Source端的输出阻抗为50欧姆,传输线的阻抗为50欧姆,Load端的输入阻抗也是50欧姆,一路50欧姆下去,这是最理想的。
然而实际情况是:源端阻抗不会是50ohm,负载端阻抗也不会是50ohm,这个时候就需要若干个阻抗匹配电路
而匹配电路就是由电感和电容所构成,这个时候我们就需要使用电容和电感来进行阻抗匹配电路调试,以达到RF性能最优。
阻抗匹配的方法
阻抗匹配的方法主要有两个,一是改变阻抗力,二是调整传输线。
改变阻抗力就是通过电容、电感与负载的串并联调整负载阻抗值,以达到源和负载阻抗匹配。
调整传输线是加长源和负载间的距离,配合电容和电感把阻抗力调整为零。
此时信号不会发生发射,能量都能被负载吸收。
高速PCB布线中,一般把数字信号的走线阻抗设计为50欧姆。一般规定同轴电缆基带50欧姆,频带75欧姆,对绞线(差分)为85-100欧姆。
Smith圆图在RF匹配电路调试中的应用
Smith圆图上可以反映出如下信息: 阻抗参数Z,导纳参数Y,品质因子Q,反射系数,驻波系数,噪声系数,增益,稳定因子,功率,效率,频率信息等抗等参数。
是不是一脸懵,我们还是来看阻抗圆图吧:
阻抗圆图的构图原理是利用输入阻抗与电压反射系数之间的一一对应关系,将归一化输入阻抗表示在反射系数极坐标系中,其特点归纳如下:
1.上半圆阻抗为感抗,下半圆阻抗为容抗;
2.实轴为纯电阻,单位圆为纯电抗;
3.实轴的右半轴皆为电压波腹点(除开路点),左半轴皆为电压波节点(除短路点);
4.匹配点(1,0),开路点(∞,∞)和短路点(0,0);
5.两个特殊圆:最大的为纯电抗圆,与虚轴相切的为匹配圆;
6.两个旋转方向:逆时针转为向负载移动,顺时针转为向波源移动。
导纳圆图与阻抗圆图互为中心对称,同一张圆图,即可以当作阻抗圆图来用,也可以当作导纳圆图来用,但是在进行每一次操作时,若作为阻抗圆图用则不能作为导纳圆图。
Smith圆图中,能表示出一些很有意思的特征:
在负载之前串联或并联一个可变电感/电容,电路图如下图左侧4个图所示,将得到Smith圆图上右侧的几条曲线。对应Smith阻抗圆及导纳圆,其运动轨迹如下:
1、使用Smith阻抗圆时,串联电感顺时针转,串联电容逆时针转;
2、使用Smith导纳圆时,并联电感,逆时针转,并联电容顺时针转。
.
十三、单片机程序加密
为了防止大家的程序不被剽窃,本文给大家分享单片机加密的方法。攻防不分家
常见加密方法
程序写保护
这种方法是最常见,也是最简单的一种。现在的MCU基本都有写保护功能,但是这种容易被人破解。
烧断数据总线
这个方法听起来不错,但有损坏的风险,同样也能破解。
软件加密
是一些防止别人读懂程序的方法,单一的这种方法不能防止别人全盘复制,须配合其他的加密算法。
添加外部硬件电路的加密方法
这个方法效果看起来比较好,但会增加成本。
芯片打磨改型
这个方法改了型号能误导,但同时也增加成本,解密者一般也能分析出来。
通过通过联网加序列号加密
通过连接网络,在你的MCU中生成一个唯一的随机长序列号,并加入复杂的特种算法,或加入你们重新编码的企业信息在里面,每个芯片内不同,复制者只能复制到一个序列号。
通过MCU唯一的标识加密
以前很多MCU没有唯一标识码,现在的很多MCU都具有唯一标识码了。
这个方法比较好,简单省事,能很好的防止复制。
读保护 + 唯一ID加密
使用读保护 + 唯一ID的加密是最常用的一种方法,也是推荐大家使用的一种方法。
唯一ID
现在正规的芯片,每颗出厂的时候都带了一个唯一标识码,这个号码是唯一不重复的,比如STM32的就使用96位作为唯一ID。
和我们每个人的身份证号码一样,现在刚出生的婴儿,上户的时候就给他一个身份证号,那么每个芯片一生产出来,也就具备了这个身份证号。
加密原理
读保护就不用说了,增加被破解难度。
使用唯一ID加密的方法很多,这里说一种简单的方法:出厂时程序读取唯一ID并保存在一个位置,以后程序执行之前,要读取并匹配这个唯一ID,一致才执行程序。
当然,这种方法是最基础的原理,但也存在被破解的风险。所以,存储的数据,以及读取验证这两个地方需要进一步添加一些算法。
这样操作之后,即使别人读取了你的程序,也是无法正常执行。
单片机加密、解密
单片机(MCU)一般都有内部程序区和数据区(或者其一)供用户存放程序和工作数据(或者其一)。为了防止未经授访问或拷贝单片机的机内程序,大部分单片机都带有加密锁定位或者加密字节,以保护片内程序。
如果在编程时加密锁定位被使能(锁定),就无法用普通编程器直接读取单片机内的程序,这就叫单片机加密。
单片机程序基本上都存在于Flash中,大部分能够读取或者识别Flash上的数据就能够获得固件文件,从而给复制产品带来了机会。
单片机攻击者借助专用设备或者自制设备,利用单片机芯片设计上的漏洞或软件缺陷,通过多种技术手段,就可以从芯片中提取关键信息,获取单片机内程序这就叫单片机解密。
单片机解密又叫单片机破解、芯片解密、IC解密,但是严格说来这几种称呼都不科学,但已经成了习惯叫法,我们把CPLD解密、DSP解密都习惯称为单片机解密。单片机只是能装载程序芯片的其中一个类。
能烧录程序并能加密的芯片还有 DSP、CPLD、PLD、AVR、ARM等。当然具有存储功能的存储器芯片也能加密,比如DS2401、DS2501、AT88S0104、DM2602、AT88SC0104D等,当中也有专门设计有加密算法用于专业加密的芯片或设计验证厂家代码工作等功能芯片,该类芯片也能实现防止电子产品复制的目的。
单片机解密方法
1 软件攻击
该技术通常使用处理器通信接口并利用协议、加密算法或这些算法中的安全漏洞来进行攻击。
比如一个典型事例是对早期XXX系列单片机的攻击。攻击者利用了该系列单片机擦除操作时序设计上的漏洞,使用自编程序在擦除加密锁定位后,停止下一步擦除片内程序存储器数据的操作,从而使加过密的单片机变成没加密的单片机,然后利用编程器读出片内程序。
目前在其他加密方法的基础上,可以研究出一些设备,配合一定的软件,来做软件解密。
还有比如利用某些编程器定位插字节,通过一定的方法查找芯片中是否有连续空位,也就是说查找芯片中连续的FFFF字节,插入的字节能够执行把片内的程序送到片外的指令,然后用解密的设备进行截获,这样芯片内部的程序就被解密完成了。
2 电子探测攻击
该技术通常以高时间分辨率来监控处理器在正常操作时所有电源和接口连接的模拟特性,并通过监控它的电磁辐射特性来实施攻击。
因为单片机是一个活动的电子器件,当它执行不同的指令时,对应的电源功率消耗也相应变化。这样通过使用特殊的电子测量仪器和数学统计方法分析和检测这些变化,即可获取单片机中的特定关键信息。
3 过错产生技术
该技术使用异常工作条件来使处理器出错,然后提供额外的访问来进行攻击。使用最广泛的过错产生攻击手段包括电压冲击和时钟冲击。
低电压和高电压攻击可用来禁止保护电路工作或强制处理器执行错误操作。时钟瞬态跳变也许会复位保护电路而不会破坏受保护信息。电源和时钟瞬态跳变可以在某些处理器中影响单条指令的解码和执行。
该办法就是使得单片机异常运行从而使得单片机处于非保护状态。
4 探针技术
该技术是直接暴露芯片内部连线,然后观察、操控、干扰单片机以达到攻击目的。
如果芯片内部都完全暴露了,那么芯片相当于在裸奔!
单片机解密分类
为了方便起见,人们将以上四种攻击技术分成两类,一类是侵入型攻击(物理攻击),这类攻击需要 破坏封装,然后借助半导体测试设备、显微镜和微定位器,在专门的实验室花上几小时甚至几周时间才能完成。
所有的微探针技术都属于侵入型攻击。另外三种方法属于非侵入型攻击,被攻击的单片机不会被物理损坏。在某些场合非侵入型攻击是特别危险的,这是因为非侵入型攻击所需设备通常可以自制和升级,因此非常廉价。
大部分非侵入型攻击需要攻击者具备良好的处理器知识和软件知识。与之相反,侵入型的探针攻击则不需要太多的初始知识,而且通常可用一整套相似的技术对付宽范围的产品。
因此,对单片机的攻击往往从侵入型的反向工程开始,积累的经验有助于开发更加廉价 和快速的非侵入型攻击技术。
侵入式解密过程
侵入型攻击的第一步是揭去芯片封装(简称“开盖”有时候称“开封”,英文为 “DECAP”,decapsulation)。有两种方法可以达到这一目的:第一种是完全溶解掉芯片封装,暴露金属连线;第二种是只移掉硅核上面的塑料封装。
第一种方法需要将芯片绑定到测试夹具上,借助绑定台来操作。第二种方法除了需要具备攻击者一定的知识和必要的技能外,还需要个人的智慧和耐心,但操作起来相对比较方便,完全实验室中操作。
芯片上面的塑料可以用小刀揭开,芯片周围的环氧树脂可以用浓硝酸腐蚀掉。热的浓硝酸会溶解掉芯片封装而不会影响芯片及连线。该过程一般在非常干燥的条件下进行,因为水的存在可能会侵蚀已暴露的铝线连接 (这就可能造成解密失败)。
接着在超声池里先用丙酮清洗该芯片以除去残余硝酸,并浸泡。
最后一步是寻找保护熔丝的位置并将保护熔丝暴露在紫外光下。一般用一台放大倍数至少100倍的显微镜,从编程电压输入脚的连线跟踪进去,来寻找保护熔丝。若没有显微镜,则采用将芯片的不同部分暴露到紫外光下并观察结果的方式进行简单的搜索。
操作时应用不透明的物体覆盖芯片以保护程序存储器不被紫外光擦除。将保护熔丝暴露在紫外光下5~10分钟就能破坏掉保护位的保护作用,之后,使用简单的编程器就 可直接读出程序存储器的内容。
对于使用了防护层来保护EEPROM单元的单片机来说,使用紫外光复位保护电路是不可行的。对于这种类型的单片机,一般使用微探针技术来读取存储器内容。在芯片封装打开后,将芯片置于显微镜下就能够很容易的找到从存储器连到电路其它部分的数据总线。
由于某种原因,芯片锁定位在编程模式下并不锁定对存储器的访问。利用这一缺陷将探针放在数据线的上面就能读到所有想要的数据。在编程模式下,重启读过程并连接探针到另外的数据线上就可以读出程序和数据存储器中的所有信息。
还有一种可能的攻击手段是借助显微镜和激光切割机等设备来寻找保护熔丝,从而寻查和这部分电路相联系的所有信号线。
由于设计有缺陷,因此,只要切断从保护熔丝到其它电路的某一根信号线(或切割掉整个加密电路)或连接1~3根金线(通常称 FIB:focused ion beam),就能禁止整个保护功能,这样使用简单的编程器就能直接读出程序存储器的内容。
虽然大多数普通单片机都具有熔丝烧断保护单片机内代码的功能,但由于通用低档的单片机并非定位于制作安全类产品,因此,它们往往没有提供有针对性的防范措施且安全级别较低。
加上单片机应用场合广泛,销售量大,厂商间委托加工与技术转让频繁,大量技术资料外泻,使得利用该类芯片的设计漏洞和厂商的测试接口,并通过修改熔丝保护位等侵入型攻击或非侵入型攻击手段来读取单片机的内部程序变得比较容易。
对单片机加密几点建议
任何一款单片机从理论上讲,攻击者均可利用足够的投资和时间使用以上方法来解密。这是系统设计者应该始终牢记的基本原则。
因此,作为电子产品的设计工程师非常有必要了解当前单片机攻击的最新技术,做到知己知彼,心中有数,才能有效防止自己花费大量金钱和时间辛辛苦苦设计出来的产品被人家一夜之间仿冒的事情发生。
下面是根据某公司的解密实践提出的建议:
- 在选定加密芯片前,要充分调研,了解单片机破解技术的新进展,包括哪些单片机是已经确认可以破解的。尽量不选用已可破解或同系列、同型号的芯片选择采用新工艺、新结构、上市时间较短的单片机。
- 对于安全性要求高的项目,尽量不要使用普及程度最高,被研究得也最透的芯片。
- 产品的原创者,一般具有产量大的特点,所以可选用比较生僻、偏冷门的单片机来加大仿冒者采购的难度,选用一些生僻的单片机。
- 在设计成本许可的条件下,应选用具有硬件自毁功能的智能卡芯片,以有效对付物理攻击;另外程序设计的时候,加入时间到计时功能,比如使用到1年,自动停止所有功能的运行,这样会增加破解者的成本。
- 如果条件许可,可采用两片不同型号单片机互为备份,相互验证,从而增加破解成本。
- 打磨掉芯片型号等信息或者重新印上其它的型号,以假乱真。
- 可以利用单片机未公开,未被利用的标志位或单元,作为软件标志位。
- 你应在程序区写上你的大名单位开发时间及仿制必究的说法,以备获得法律保护;另外写上你的大名的时候,可以是随机的,也就是说,采用某种算法,外部不同条件下,你的名字不同,比如www.XXXXX.com、www.XXXXX.cn、 www.XXXXX.com.cn等,这样比较难反汇编修改。
- 采用高档的编程器,烧断内部的部分管脚,还可以采用自制的设备烧断金线,这个目前国内几乎不能解密,即使解密,也需要上万的费用,需要多个母片。
- 采用保密硅胶(环氧树脂灌封胶)封住整个电路板,PCB上多一些没有用途的焊盘,在硅胶中还可以掺杂一些没有用途的元件,同时把MCU周围电路的电子元件尽量抹掉型号。
- 可以用编程器把空白区域中的FF改成00,也就是把一些未使用的空间都填充好,这样一般解密器也就找不到芯片中的空位,也就无法执行以后的解密操作。
当然,要想从根本上防止单片机被解密,那是不可能的,加密技术不断发展,解密技术也不断发展,现在不管哪个单片机,只要有人肯出钱去做,基本都可以做出来,只不过代价高低和周期长短的问题,编程者还可以从法律的途径对自己的开发作出保护,比如专利。
.
十四、RISC-V将做为航天计算芯片
这个就像个广告哦~~ 就是看见了 发来一下
RISC-V,真的要上天了!
因为美国知名的RISC-V芯片设计厂商SiFive宣布:
NASA选中RISC-V,作为下一代高性能航天计算 (HPSC) 提供核心CPU。
SiFive声称,该处理器将提供至少100倍于当前航天计算机的算力,且将适用于从行星探索到月球和火星表面任务的所有类型的未来太空任务。
消息一传出,有网友表示惊讶:还以为NASA会选择一个已被检验过的CPU,没想到选了RISC-V。
那么这一选择背后的考量是怎样呢?赶紧来看看。
为什么会选RISC-V?
首先,让我们认识一下RISC-V芯片的载体——HPSC。
HPSC,是NASA正在打造的下一代高性能航天计算,其目标是取代老化的基于PowerPC的BAE系统的RAD750单板计算机。
美国宇航局高级航空电子设备首席技术专家Wesley Powell对此表示:
我们目前的航天计算机是近30年前开发的,虽然它们在过去的任务中表现出色,但未来的NASA任务需要显着提高机载计算能力和可靠性。
新的计算处理器将提供性能、容错性和灵活性所需的进步,以满足这些未来的任务需求。
正是基于此,符合这些条件的RISC-V也就顺势而出了。
据SiFive官网介绍,除了4个通用的SiFive RISC-V内核,HPSC还将使用8核的SiFive X280 RISC-V矢量核。
X280,是一个多核、多集群能力的 RISC-V处理器,提供了对RISC-V矢量扩展标准和SiFive智能扩展的全面支持,并针对边缘的AI/ML计算进行了优化。
这也意味着,X280在拥有比标准RISC-V内核高六倍的性能时,还能保持平台的低功耗。
此之外,在纯粹的性能外,用于外太空的芯片还必须可以应对恶劣的操作条件,而新的容错处理器正是X280的特点之一。
最后,也可能是最重要的,是RISC-V的开源属性。
根据SiFive业务发展高级副总裁Jack Kang的说法,RISC-V架构是最有可能在10年、15年甚至20年后拥有大量开发人员基础的架构之一,因此选择RISC-V将是NASA的一个安全赌注。
综上所述,高性能、低功耗、容错属性和长使用寿命,RISC-V能荣升宇航级应用也就不奇怪了。
关于SiFive
这次被NASA选中的公司SiFive,是一家处理器内核、AI加速器和SoC IP供应商,由加州大学伯克利分校教授、RISC-V创始人之一Krste Asanovic,和他的两名研究生共同创立。
虽然这家公司2015年才成立,但在短短几年时间里,已经发展成全球首家基于RISC-V定制化的半导体企业,其RISC-V架构处理器有超过100项专利。
今年3月更是宣布获得Coatue Management领投的1.75亿美元F轮融资,公司估值超过25亿美元,成为了RISC-V芯片阵营首个“独角兽”。
对于此次被NASA选中,SiFive业务发展高级副总裁Jack Kang表示:
我们一直说,SiFive的未来没有限制,我们很高兴看到我们创造的影响力远远超出了我们的星球。
.
十五、Buck电路
这个电路简洁而不简单
Buck、Boost、Buck-Boost作为直流开关电源中应用广泛的拓扑结构,属于非隔离的直流变换器。本期内容小编将对其中的Buck电路展开详细介绍。
降压式(Buck)变换器是一种输出电压≤输入电压的非隔离直流变换器。Buck变换器的主电路由开关管Q,二极管D,输出滤波电感L和输出滤波电容C构成。
接下来将从:1. 开关整流器基本原理 2. 传说中的“伏-秒平衡” 3. 同步整流死区时间等三部分详细介绍Buck电路的工作原理。
让我们打起精神,擦亮眼睛,深刻体会简洁而不简单的Buck电路吧!
Part 1 开关整流器基本原理
在[0,Ton]期间,开关导通;在[Ton,Ts]期间,Q截止。设开关管开关周期为Ts,则开关频率fs=1/Ts。导通时间为Ton,关断时间为Toff,则Ts=Ton+Toff。设占空比为D,则D=Ton/Ts。改变占空比D,即改变了导通时间Ton的长短,这种控制方式成为脉冲宽度调制控制方式(Pulse Width Modulation, PWM)。
Buck电路特征
• 输出电压≤输入电压
• 输入电流断续
• 输出电流连续
• 需要输出滤波电感L和输出滤波电容C
Part 2 传说中的“伏-秒平衡”
伏秒原则,又称伏秒平衡,是指开关电源稳定工作状态下,加在电感两端的电压乘以导通时间等于关断时刻电感两端电压乘以关断时间,或指在稳态工作的开关电源中电感两端的正伏秒值等于负伏秒值。
在一个周期 T 内, 电感电压对时间的积分为 0,称为伏秒平衡原理。正如本文开头视频中指出,任何稳定拓扑中的电感都是传递能量而不消耗能量, 都会满足伏秒平衡原理。
Part 3 同步整流死区时间
同步整流是采用极低导通电阻的的MOSFET来取代二极管以降低损耗的技术,大大提高了DCDC的效率。
物理特性的极限使二极管的正向电压难以低于0.3V。对MOSFET来说,可以通过选取导通电阻更小的MOSFET来降低导通损耗。
在开关电源系统中,死区时间(Dead Time)是指为了避免两个晶体管开关同时导通而引入的屏蔽时间。
连接的两个晶体管开关通过交互地闭合和关断来决定线圈中电流的增减。为避免两个晶体管同时导通造成不必要的电流浪涌,即需控制电路在开关动作引入死区特性。在死区时间内,需要完成对已导通晶体管的关断和另一晶体管的导通。
死区时间
• 设置必要的死区时间以防止短路。
• 死区时间越小,体二极管传导越少。
• 死区时间越小,损耗越小,效率越高。
十六、电烙铁焊锡有没有毒
电烙铁焊锡有毒吗?
有网友吐槽称,他在PCB工厂用电烙铁焊锡一年整了,都感觉到身体开始不舒服了,腹部有点胀,焊锡有毒吗?是不是会铅中毒。
其实这个还要看工作中用电烙铁焊锡的有铅焊锡丝还是无铅,并需要定期检查血铅,没有超标就完全不会有问题的,焊锡有毒吗?
正常来讲如果按照国家标准进行防护与原材料采购,焊锡是不会造成重大伤害的。现在基本上都是使用无铅的产品了。
铅是一种有毒物质,人体吸收过量会引起铅中毒,摄入低剂量可能会对人的智力、神经系统和生殖系统造成影响。
锡与铅的合金,就是常用的焊锡,它具有金属良好的导电性,溶点又低,所以,长期以来用于焊接工艺。它的毒性主要来自铅。焊锡所产生的铅烟容易导致铅中毒。
金属铅可能产生铅化合物,全被归类为危险物质,在人体中铅会影响中枢神经系统及肾脏。
铅对一些生物的环境毒性已被普遍证实。血液铅浓度达10μg/dl以上就会产生敏感的生化效应,若长期曝露使血液铅浓度超过60~70μg/dl就会造成临床铅中毒。
有铅的肯定是有毒的,先别说焊锡对身体影响大不大,就是一般的金属,多了也会中毒,焊锡的时候,会有烟雾出现,里面含有一种对身体有害的元素。
工作的时候,最好是带口罩, 但是多多少少还是会有点影响,当然如果能用无铅焊锡丝, 会比有铅的,要安全的多。
无铅焊锡有毒吗?
用电烙铁焊锡的材料焊锡丝,它虽然主要成份是锡,但也含有其他金属。主要分为有铅和无铅(即环保型)。随着欧盟ROHS标准的出台,现在越来越多的PCB焊接工厂选择了无铅环保型的,有铅焊锡丝也在慢慢被替用,不是环保的出不了口。无铅锡膏,无铅锡丝,无铅锡条是目前市场上的主要产品。
简单来说:一般用的焊锡因为熔点低,含铅60%、含锡40%左右,所以焊锡本身是有毒性的。而市场上大部分的焊锡都是中空的,内装有松香,所以你所说的气体,估计是焊接时焊锡内的松香熔化时所挥发出来的。
松香挥发出来的气体也是有些微毒性的,这种气体挺难闻的。焊锡在焊接时最主要的危害因素是铅烟,哪怕是无铅焊锡,其中多少都含有一定的铅。
铅烟在GBZ2-2002中的限值很低,毒性很大,需重点防护。由于焊接过程对人体和环境的破坏,在欧洲,对焊接工人的保护及对环境的保护已以立法的形式强制执行,在没有如何防护措施的条件下进行焊接是不允许的。在ISO14000标准中对生产环节产生的污染进行处理和防护有明确的规定。
锡都含有铅,以前焊锡丝内有铅把焊锡归类为职业危害岗位(在国家职业病目录中);现在我们一般企业都使用无铅焊锡丝了,主要成分是锡,疾病预防控制中心测的是二氧化锡;并不在国家职业病目录中。
无铅工艺(leadfree)一般来说铅烟是不会超标的,但是焊锡还存在其他的危害了,比如助焊剂(松香类物质)有一定的危害,得视具体情况来来看。员工平时可以看一下配发下来的锡是什么标识的,是属于哪一类的,这样可以有据可查及要求企业整改(可以提意见给工厂内部工会)。
要是配的锡是含铅的,肯定是对身体有害的。时间长了,它们在身体积累,对神经系统免疫破坏很大的。
无铅焊锡丝是环保的,但是无铅焊锡丝对人体也有害,无铅焊锡丝的铅含量低并不是不含铅,和含铅的焊锡丝相比,无铅焊锡丝对环境和人体的污染比含铅的要小。焊锡时产生的气体是有毒的,有松香油、氯化锌等气体蒸气产生。
电烙铁焊锡丝有毒怎么防范?
首先PCB工厂在用电烙铁焊锡焊接元器件时要使用ROHS的锡丝,并要做好防范工作:
比如带手套、口罩或防毒面具,工作场所注意通风,排风系统好,工作后注意清洗,喝牛奶的方法也是可以预防焊锡中的铅毒性的。
1、要休息一段时间,一般1小时要休息15分钟左右,缓解疲劳,因为疲劳时抵抗力最差。
2、少抽烟 多喝水 这样在白天可以排除大部分吸收的有害物质。
3、睡前饮绿豆汤或者蜂蜜水 这样可降火 对心情有帮助 而且绿豆和蜂蜜可以排除吸收的大量的铅和辐射。
4、可把烙铁搞的亮一点,尽量用PPD的焊头,这样温度达到了可以少用焊油和松香,减轻对身体的危害,
5、焊油焊锡冒烟时候尽量头向边上偏点 刷天那水时候也要把头偏到边上点 尽量屏住呼吸。
6、多用酒精,用酒精多刷一会效果差不多的。
7、焊接完要洗干净手。
8、睡觉前洗澡尽量早睡早起,保证充足的睡眠,只要睡的好,杂质基本都可随身体排出。
9、带口罩工作。