三电源切换电路
双电源切换我们都很熟悉,也很常用,一般是一个外部电源加一个内部电池,外部电源优先级高于电池。有电池,电池给系统供电,有外部电源,外部电源给系统供电,两者都有时,外部电源给系统供电,同时也给电池充电,外部电源意外断电,内部电池会续上。
前段时间画了一个三电源切换电路,我们一起来看下:
电路描述:
Q1、Q2为NMOS,Q3、Q4和Q5为PMOS管,D1为二极管。
BAT1和BAT2为电池,BAT2的容量比BAT1大,VIN_5V为外部电源,VOUT为输出,给系统供电。
VOUT会从优先级高的电源取电,优先用外部电源,其次容量大的电池,最后才是容量较小的电池,优先级排序:VIN_5V > BAT2 > BAT1。
工作原理:
接下来,我们再看一下电路的工作原理。
当只有BAT1时,Q2、Q3和Q5导通,VOUT从BAT1取电。
当只有BAT2时,Q1导通,Q2、Q3和Q5截止,Q4导通,VOUT从BAT2取电。
当只有VIN_5V时,VIN_5V通过二极管D1到VOUT,VOUT从VIN_5V取电。
当BAT2和BAT1同时存在,Q1导通,Q2、Q3和Q5截 ...
免费 mp3 下载网站
https://tools.liumingye.cn/music/?page=searchPage#/
免费的简历制作神器
https://codecv.top/
各种插件连接器图示介绍网站
https://connectorbook.com/
收集字体
前言这里主要收集一些免费字体网站
免费字体识别、字体转换、字体下载
https://fontmeme.com/zh/
ASCII码字体生成器
http://www.figlet.org/
google font
https://fonts.google.com/
DCDC的Layout终极奥义
前言很多DCDC芯片的手册都有对应的PCB Layout设计要求,有些还会提供一些Layout示意图,都是大同小异的。
比如我随便列几点buck的设计要点:
输入电容器和二极管在与IC相同的面,尽可能在IC最近处。
电感靠近芯片的SW,输出电容靠近电感放置。
反馈回路远离电感,SW和二极管等噪声源。
那你知道这些要点都是怎么来的吗?
如果拿到一个具体的芯片,因为芯片管脚分布的问题, 可能这些条件不能同时满足,那什么办?到底孰轻孰重?
举个Buck的例子
比如下面这个buck,它的管脚分布就不好。
SW在IN和GND之间,如果按照要点,直接将输入滤波电容放到IN和GND旁边,那么SW的信号就出不来,而电感也要求放在芯片旁边,这就矛盾了。
那我们看看这个芯片手册推荐的Layout
芯片手册推荐的layout倒是都就近放置了,但是它的方法是SW在输入滤波电容底下走线, 这是逗我吗?这在现实中能做到?
我们不能采用芯片手册推荐的这种方式,但事实是这种管脚分布的芯片多得是, 那我们的Layout如何布局布线呢?
这个问题先不回答,我给大家说一个最根本的方法:
DCDC的Layout终极奥 ...
一些通用的 Makefile 文件模板
前言对于Windows下开发,很多IDE都集成了编译器,如Visual Studio,提供了“一键编译”,编码完成后只需一个操作即可完成编译、链接、生成目标文件。
Linux开发与Windows不同,Linux下一般用的的gcc/g++编译器,如果是开发ARM下的Linux程序,还需用到arm-linux-gcc/arm-linux-g++交叉编译器。
Linux下也可以实现“一键编译”功能,此时需要一个编译脚本“Makefile”,Makefile可以手动编写,也可以借助自动化构建工具(如scons、CMake)生成。手动编写Makefile是Linux和Windows程序员的区别之一,一般地一个通用的Makefile能够适合大部分Linux项目程序。
这里提供了三个 Makefile 模板
编译可执行文件Makefile12345678910111213141516171819202122232425VERSION =1.00CC =gccDEBUG =-DUSE_DEBUGCFLAGS =-WallSOURCES =$(wildcard ./s ...
AT command 解析与处理
AT command 解析小组件AT command 在处理MCU端非常难处理,笔者接触到很好的框架如下:
rt thread 代码下的小组件功能, 解析AT指令思路很巧
在源码目录下: rt-thread/components/net/at/src
https://github.com/RT-Thread/rt-thread
AT Command 代码库,将 AT 命令解析做了成了一个库的形式,可以借鉴参考
https://gitee.com/tutubinary/AT-Command
如何简介而有有效的描述一个缺陷 Bug
前言在日常工作中,软件和硬件工程师(Bug修复者)经常会碰到各种Bug,但很多时候我们的精力都浪费在了和测试人员(Bug提交者)反复沟通上,因为我们搞不懂测试人员想要表达啥?
当你的软件或硬件出现不符合预期的问题时,我们希望它能够尽快修复,而不希望时间浪费在无效沟通上。
作为软件或硬件开发者,我们以工作为荣,但就像开发的任何方面一样,沟通至关重要。描述出了什么问题可能有些困难,但如果你能在一开始提供一个详尽的问题描述,这会加快问题的解决。
行业内对于如何描述Bug有各种思考,本文的三句话法是其中一种。下面的Bug模板用三句话来描述一个Bug:
复现 Bug 的步骤
步骤1
步骤2
…
2.期望的结果
3.实际的结果
复现步骤说明你是如何遇到错误或问题的,即使对你来说似乎很明显(对别人不明显)。
为什么提供重现错误的步骤很重要?
重现错误通常比实际进行修复的代码更耗时;大约80%的工作是找出最初出了什么问题!清晰地重现步骤,意味着我们可以大大缩短这段时间。
对发生了什么问题有一个清晰的描述,也给我的测试人员后续验证Bug是否修复提供了步骤,利人利己!
如何提供 ...
数字签名,加密方案
什么是数字签名和数字证书正文如果你能非常清晰的回答出以下问题,可以不用看这篇文章了:
非对称加密中公私钥都可以加密,那么什么时候用公钥加密,什么时候用私钥“加密” ?
什么是数字签名,数字签名的作用是什么?
为什么要对数据的摘要进行签名,而不是直接计算原始数据的数字签名?
什么是数字证书,数字证书解决了什么问题?
这篇文章,主要围绕 数字签名 和 数字证书 的原理以及它们的作用展开。
争取做到让不具备任何密码学基础知识的同学都能听懂,所以在这里需要先对齐一些加密相关的概念 。
什么是加密加密就是 对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“ , 密文通过”密钥“解密后还原出原来的明文,通过这样的途径可以达到保护数据不被非法人窃取、阅读的目的。
定义简单吧?那来看个题,考虑以下哪些属于加密方法:
AES
RSA
MD5
BASE64
SM4
这几种都是日常开发中常用的数据编码技术,但是只有 AES、RSA、SM4 才能算是加密方法。
为什么呢? 一个区分的简单方法就是看编码后的数据是否还能还原,能还原的是加密。
MD5 实际上是对数据进行有损压缩, ...















