解决噪声问题的最佳途径在源头。
去耦电容:
1、容量应足够大以在转换时间内提供所需的电流。
2、应足够小以使时钟频率小于电容的谐振频率。
还应遵守:
1、所有电源/地线对中尽可能是均衡电流。
2、除ESD保护外,应避免在内部连接电源引脚和接地引脚。
3、芯片上使用独立的电源-地线对来把有噪声的电路和敏感电路隔离开。
竞态条件定义了一种条件,即:器件输出取决于输入端两个或多个事件,导致设备输出的转换。这就额外增加了系统噪声。
降低系统工作频率至绝对值最小值。
驱动器对于负载充电的速度快于负载所需速度时,过快的沿速度会将导致过充或下冲。快的转换速率会导致噪声以信号反射、串扰和接地反射等形式产生。
不要试图使用最快的转换速率和最大的驱动电流。减小EMI最重要的设计考虑是从输入及内部驱动器获得适当的上升时间和使峰值电流最小化。
不需要时钟时应关闭时钟及振荡器。一个好的方法是宁可支持各种低功耗模式,而不是将时钟限制在较低的频率或完全关闭它。
非重叠时钟:具有非一致边沿转换的时钟。非重叠时钟边沿通过多时钟系统的连续脉冲边沿之间的过渡时间,有助于消除竞态条件和亚稳态问题。

从EMC的角度看,加入时钟边沿之间的过渡时间会降低可观察道德峰值电流和电流谐波的峰值幅度。平均电流从时间跨度看保持大致相同,但幅度和频谱形状会发生变化。
另一个技术:调节时钟的上升/下降时间至最小值。
避免在常用频率下运行时钟,防止共振增加噪声。

图中是具有多个基准时钟输入的SoC,每个时钟输入馈入SoC中的一个高速区域。
时钟选择不同频率,以便在1GHz以下不会出现同频的谐波。
若占空比正好是50%,所有能量都在奇数谐波。这样,工作在50%的占空比通常是最坏情况。当占空比高于或低于50%,引入了偶次谐波,EMI将按正常情况分布。

A是所有8条线紧密排列的典型总线布局,这样会引入串扰。
B则通过增加数据线之间的距离来降低噪声。
C则每隔两条数据线插入一条地线。
D接地线与每条数据线交错放置,对全面降低开关噪声非常有效。
硬件层级完全消除瞬态效应不切实际且费用高昂。
所有常规IO引脚必须在内部有到地和到电源的ESD保护二极管。

对于具有瞬态波形噪声带宽以外工作带宽的电路,可以使用低通滤波器、高通滤波器或带通滤波器来实现保护。
对于输入的标准保护是低通滤波器。

串联电阻限制了注入电流。并联电容把瞬态电流分流至接地系统,因为它要保持电压在稳态值。
针对系统中数字输入比较脆弱的情况,可以使用软件滤波消除由外部噪声导致的输入引脚短时脉冲波干扰。
参考前面消抖算法。
用户软件应当经常更新输出和关键寄存器,它们控制输出引脚以确保任何轻微故障都会纠正而不发生大问题。
大多数MCU中,在调试或编程时复位引脚是置高的(低电平复位),因此从地到复位引脚只需要保护二极管。

复位从外部驱动,需要另一级别的保护。

电容帮助吸收瞬变电压。
两个二极管把引脚电压钳定在GND-0.7V至VDD+0.7V之间。
最脆弱的引脚:高阻抗模拟引脚。如用在振荡器电路、锁相环和模拟信号输入的引脚。设计PCB时让这些引脚远离噪声。可将一些数字引脚滤波技术应用到模拟信号输入引脚,如馈入ADC中。
任何受到噪声影响的系统可能代码跑飞而使系统处于未知状态。一个良好的看门狗定时器应当能够将系统带回安全状态。
1、看门狗定时器宽度应当能覆盖系统中所有可用时钟源的超时范围。尽可能保证用最短的看门狗超时周期以确保代码跑飞状态不会持续太久。
2、看门狗定时器时钟源应独立于其监控的系统的时钟源。
3、看门狗向系统发出故障信号的方法必须是能自身容错的。
4、看门狗关键控制和配置就寄存器位应当有写保护。
5、刷新看门狗的方法应当使跑飞的代码意外刷新的机会最小。
6、反应应当迅速。
7、看门狗的正常运行应当是可测试的。
8、应当能帮助诊断导致看门狗超时的故障。
9、软件实现看门狗(使用噪声关键应用不推荐),避免将看门狗刷新放在中断程序中。
10、任何服务看门狗的循环应当能在有限的时间内给出超时状态。、
迅速从跑飞代码状态中恢复系统的另一个可能途径:在出现非法指令/非法地址时产生复位。
LVD(低电压检测)或LVW(低电压警告)增加了器件的敏感性,对电源线(VDD)的电气干扰和传导噪声提供了更好的抗干扰性。
低电压MCU的性能就无法保证,最坏的情况可能导致数据损坏。强烈建议MCU在这种状态下应自动重置以防止不可预测行为。
LVD应在电源低于Vfail时产生静态复位,直到电压上升到Vrise之上。
Vfail应大于Vrise
LVD应当是可编程的。

相邻的接地和电源引脚、多个接地和电源引脚、将电源和接地引脚放在中心都有助于将电源与接地电流路径间的互感最大化,并将自感最小化,减小电源电流的回路面积,使去耦更有效。
频率越低越能减少EMI。

终于看完这本书了,本来计划上个月看完的,因为疫情(主要是因为懒)等原因,结果这个月才看完。综合来说这本书知识点还是很丰富的,也学到了很多东西,但是这本书很多知识点又不够具体,还是得自己多想多思考。接下来打算仔细看看sky的课(花了我3799大洋,心疼),学学VCS、Verdi、DC和Spyglass等新思全家桶(工作要用),再研究研究STA(非常重要,准备边看书边看邸志雄的课)。
前两天看到自己居然有三个粉丝了,小感动,接下来努力创作一些更有用的东西吧。
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称
我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0
我正在寻找一个用ruby演示计时器的在线示例,并发现了下面的代码。它按预期工作,但这个简单的程序使用30Mo内存(如Windows任务管理器中所示)和太多CPU有意义吗?非常感谢deftime_blockstart_time=Time.nowThread.new{yield}Time.now-start_timeenddefrepeat_every(seconds)whiletruedotime_spent=time_block{yield}#Tohandle-vesleepinteravalsleep(seconds-time_spent)iftime_spent
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
如果用户是所有者,我有一个条件来检查说删除和文章。delete_articleifuser.owner?另一种方式是user.owner?&&delete_article选择它有什么好处还是它只是一种写作风格 最佳答案 性能不太可能成为该声明的问题。第一个要好得多-它更容易阅读。您future的自己和其他将开始编写代码的人会为此感谢您。 关于ruby-on-rails-如果条件与&&,是否有任何性能提升,我们在StackOverflow上找到一个类似的问题:
为了在我的mac上为一个rails项目安装mysql,我遵循了安装Homebrew软件和删除mac端口的在线建议。这是问题开始的地方。rails项目不会构建,我得到这个:[rake--prereqs]rakeaborted!dlopen(/Users/Parker/.rvm/gems/ruby-1.9.3-p448/gems/nokogiri-1.6.0/lib/nokogiri/nokogiri.bundle,9):Librarynotloaded:/opt/local/lib/libiconv.2.dylibReferencedfrom:/Users/Parker/.rvm/gem
我安装了ruby、yeoman,当我运行我的项目时,出现了这个错误:Warning:Running"compass:dist"(compass)taskWarning:YouneedtohaveRubyandCompassinstalledthistasktowork.Moreinfo:https://github.com/gruUse--forcetocontinue.Use--forcetocontinue.我有进入可变session目标的路径,但它不起作用。谁能帮帮我? 最佳答案 我必须运行这个:geminstallcom
我编写了一个Ruby应用程序,它可以解析来自不同格式html、xml和csv文件的源中的大量数据。我如何找出代码的哪些区域花费的时间最长?有没有关于如何提高Ruby应用程序性能的好资源?或者您是否有任何始终遵循的性能编码标准?例如,你总是用加入你的字符串吗?output=String.newoutput或者你会使用output="#{part_one}#{part_two}\n" 最佳答案 好吧,有一些众所周知的做法,例如字符串连接比“#{value}”慢得多,但是为了找出您的脚本在哪里消耗了大部分时间或比所需时间更多,您需要进行分
写在之前Shader变体、Shader属性定义技巧、自定义材质面板,这三个知识点任何一个单拿出来都是一套知识体系,不能一概而论,本文章目的在于将学习和实际工作中遇见的问题进行总结,类似于网络笔记之用,方便后续回顾查看,如有以偏概全、不祥不尽之处,还望海涵。1、Shader变体先看一段代码......Properties{ [KeywordEnum(on,off)]USL_USE_COL("IsUseColorMixTex?",int)=0 [Toggle(IS_RED_ON)]_IsRed("IsRed?",int)=0}......//中间省略,后续会有完整代码 #pragmamulti_c