• 嵌入式硬件设计实例:基于STM32的流水灯原理图和PCB设计


    最近本来在忙别的事,大约忙到五一以后吧,没有时间研究一些深入的知识。本来想停更的,但是刚刚申请到博客专家,想想还是得更新点文章。这里就把一些以前我做过的一些简单的硬件设计拿来出来复习一下。

    本篇文章就来介绍一下,一个简单的STM32流水灯的开发板的原理图和PCB的设计流程和注意事项。

    1 目标和需求

    这篇文章就来实现一个简单的流水灯的硬件设计。
    (1)主控芯片:STM32F103
    由于只需要实现一个流水灯,只要有GPIO就可以实现了,这里我们选择STM32的芯片,具体哪一个型号,我建议去看看哪个型号的芯片便宜,就选哪个。
    (2)电路组成

    • 调试接口:4线SWD
    • 晶振
    • Buck降压电路:提供3.3V电压给主控
    • 8个LED灯

    电路组成实际上就是STM32最小系统,再加上8个LED灯。

    2 原理图

    2.1 电源部分

    一个硬件电路板最重要的就是电源部分,我们来分析一下需要什么:

    2.1.1 电源座子

    这里我有一个12V的适配器:
    在这里插入图片描述
    所以我就选择使用DC12的圆孔封装:
    在这里插入图片描述
    我没有搜到这个座子的实物图,但是我的原理图库有3D模型,就来看一下这个插座的模型。左图就是正面的圆孔插头了,右图是从下往上看,这个封装有3个引脚,实际上1个是12V,2个是GND。

    所以对于原理图库来说,设计如下:
    在这里插入图片描述
    实际的电路如下:
    在这里插入图片描述
    系统地电源就从引脚1进来。

    2.1.2 Buck电路

    对于STM32芯片来说,系统的电压是3.3V的,所以需要一个降压电路。简单地介绍一下Buck电路。

    2.1.2.1 原理

    Buck电路是一种常见的降压型(step-down)直流-直流(DC-DC)转换器电路。它的主要作用是将一个较高的直流电压转换为一个较低的直流电压。Buck电路的工作原理基于电感和开关元件的组合,通过周期性地打开和关闭电路中的开关元件来实现电压的降低。

    假设输入为15V,要降压为5V,中间是一个开关,输出连接一个电容。控制开关,闭合开关,将电容充电到6V时断开,到4V时再闭合开关。但刚开始电容相当于短路,此时电流非常大,会损坏电容,所以要在前面再串一个电阻。但电阻会消耗功率,所以不太合适。现在又不希望刚开始电容电流无限大,又不希望前面消耗功率。而电感可以阻碍电流的增大,它是BUCK电路中最核心的器件。
    在这里插入图片描述
    刚开始电感的阻抗无穷大,两端电压就等于输入电压,接着电感的压降越来越小,电流逐步增大,这样电流正好就满足了电容缓慢充电。电感的电流不会突变,但电压会突变,而这有后面的电容限制这个突变。

    开关断开时,由于15V还存在着,电感产生的感生电动势会到开关左端,从而产生电弧。所以要给电感一个回路。
    在这里插入图片描述

    • 放电时经过二极管放电,上端电压为-0.7V,所以开关的耐压要大于15.7V;二极管的耐压要大于15V。
      (1)开关闭合,电容短路,电感上电压等于15V,K=15/L
      (2)电感对电容充电,假设电容电压上升到2V,K=13/L
      (3)电感对电容充电,假设电容电压上升到5V,K=10/L
    • 电感上升阶段斜率逐渐变缓
      (4)刚闭合就断开,电容短路,电感两端压降被二极管钳位为0.7V,K=0.7/L
      (5)电容充电到2V时断开,K=2.7/L
      (6)电容充电到5V时断开,K=5.7/L
    • 电感下降阶段斜率逐渐变抖,最终会趋于稳定。
    2.1.2.2 Buck电路设计

    首先就是选择一个Buck降压芯片了,选型就不介绍了,这里我推荐使用MP2359。打开MP2359的手册,首先来看Package reference:
    在这里插入图片描述
    我们就在AD中把这个封装画出来,原理图库设计如下:
    在这里插入图片描述

    • 至于这里引脚间为什么空这么多栅格,主要是是为了后面原理图的美观(清晰)

    接下来我们再来看一下手册中给的典型设计:
    在这里插入图片描述
    其中:

    • R1和R2是反馈电阻,只要修改这两个电阻的值就可以控制输出的电压的大小。
    • 二极管D1是肖特基二极管,因为它有更好的快速开关特性(减少开关损耗)、抗热(高温反向漏电流小)、低正向压降(低功耗)。
    • CB提供Bootstrap电压,存储了开关周期内的电荷,当需要提供高侧驱动电压时,电容释放电荷。
    • 电感的作用前面提过了,C1和C2是输入/输出滤波电容

    现在我们就来参考这个设计图来设计自己的原理图:
    在这里插入图片描述
    使能引脚就默认使能了,其它基本上一致。至于这里的肖特基二极管的型号还是根据实际供货和价格来决定,不一定要使用B230A。

    至此我们就得到了3.3V的电压。

    2.2 STM32最小系统

    这里我选择的型号为STM32F103VET6,同样地根据官方的数据手册画出原理图,我这里就分为两个部分了,一个为系统电源部分,一个为其它的引脚部分。

    • 由于本例中没有用到特别多片上外设,其它的引脚就简单地都放在一起了,如果用上了,建议继续将引脚归类和细分,如SPI放一起,I2C放一起等;这样做不仅是为了美观,也是为了减少错误。

    电源
    在这里插入图片描述
    其它引脚:
    在这里插入图片描述
    接着就来添加晶振和调试引脚:
    在这里插入图片描述
    对于晶振来说,STM32中有两种:

    • OSC:连接8MHz的外部晶振。这个晶振通常用于提供系统时钟(SYSCLK)或主时钟。主时钟会影响整个芯片的运行速度,包括CPU、总线和外设等。通常用于提供较高的系统时钟频率。
    • OSC32: 连接32.768kHz的外部晶振。常用于RTC模块。32.768kHz的频率是实时时钟模块中常用的频率,因为它是2的15次方,方便在实时时钟中进行时间分频。

    实际上在我们这个这么简单的应用中,完全可以不接任何晶振,直接使用内部的晶振就可以了。

    对于复位引脚NRST的电容,主要是防止由于开关或其他外部因素引起的短时噪声或干扰对NRST引脚的误触发。

    如果接了一个按键用于复位的话,那电容还可以调整复位脉冲的上升时间,防止快速或突发的电平变化触发不必要的复位。

    2.3 流水灯

    如下图所示,原理图很简单,当GPIO输出高电平时,LED点亮,反之熄灭。至于电阻的大小,取决于你选择的LED的数据手册。
    在这里插入图片描述
    这么多引脚可以都可以使用,随便连,但是我这样连是有目的的,稍后画PCB的时候就知道了。

    3 PCB设计

    由于原理图非常简单,二层板足以。由于这部分设计更多地还是需要经验,这里我仅仅介绍一些值得注意的细节。

    3.1 封装选择

    对于PCB来说,首先当然是选择封装了。

    • 电阻和LED:选择0603封装的,由于是初学,就选择大一些的。注意,封装越小,能承受的功率越小。
    • 电容:对于前面的BUCK电路来说,输入和输出的电压很大,需要选择大一点的封装,所以C3和C4我选择C1206封装;其它的也选择0603的。
    • 肖特基二极管:查询你使用的二极管的手册,我这里是DO–216AA

    3.2 电源滤波考虑

    前面的原理图还差了一步,就是一般我们会在电源附近放一个阻值为104的滤波电容。这主要是为了提供电源稳定性、抑制高频噪声和过滤电源线上的尖峰。这是很多手册和很多有经验的硬件工程师都建议的。目的如下:

    • 抑制高频噪声: 104电容在电源引脚附近提供了低通滤波的效果,尤其是对高频噪声的过滤。这对于防止高频噪声进入芯片并影响其正常操作非常重要。
    • 提供瞬态稳定性: 在系统中发生瞬态负载变化时,例如突然的CPU活动或其他模块的切换,104电容可以提供额外的电荷,有助于维持电压的稳定性。
    • 降低电源线上的尖峰: 在电源线上添加104电容可以减小电源线上的尖峰,这对于防止电源波动进入芯片并引起干扰是有帮助的。

    所以在设计PCB的时候,会根据STM32芯片,或者其它的,如一些射频芯片的封装布局,来看一下有多少个104电容需要加上。接着在原理图中加上电容,更新到PCB中。然后布局的时候放在这个电源附近

    • 不是原理图引脚上写了几个电源就要加几个,如果两个电源引脚离得很近,就只需要加一个即可

    这里我加了6个104滤波电容:
    在这里插入图片描述
    对应放在STM32的几个电源附近,如下图绿框所示:
    在这里插入图片描述
    其中左下角那个引脚21和22的两个3.3V电源就共用一个就行了。

    3.3 Buck电路布局和布线

    一个系统重最重要的就是电源了,除了我们需要尽可能地将电源线弄宽之外,我们主要来看一下Buck电路的布局,这部分的布局和布线都很有讲究。我们来一下MP2359的手册:
    在这里插入图片描述
    实际上所有的Buck电路芯片都需要这样布局:

    • 强电路径(GND/IN/SW)应该尽可能短且宽
    • 输入电容需要和IN和GND引脚尽可能近
    • 外部反馈电阻需要离FB引脚近
    • 开关节点的走线短且远离反馈网络(确保Buck电路在工作时具有良好的电磁兼容性,即EMC)

    另外,对于6号开关引脚SW来说,由于频率十分高,建议把连在这个引脚的电容、肖特基二极管和电感直接敷铜。

    3.4 LED部分设计

    由于是做流水灯,所以LED当然是要放在一起了,那如果两个引脚之间离得很远,就会影响布线了。所以在原理图中,如果引脚足够用的话,我们会根据布线的难易程度,尽可能地将物理上要放在一起的器件所对应的引脚放在一起。
    在这里插入图片描述
    这里就知道前面LED原理图中引脚分配的用心良苦了,可以看到是连在一起的。

    3.5 3D演示

    这个板子都是我刚学嵌入式的时候画的了,没有实物,3D图如下:
    在这里插入图片描述

    4 总结和感慨

    本篇文章简单地介绍了一下嵌入式单片机的一个简单的最小系统的设计,其中涉及的知识还是很多的,如果做更复杂的PCB的话,如高频、强弱电、EMC,还有电容电阻的参数,阻值大小,容值大小等方面都需要有一些考虑。后面有空的话,我会再写一篇我以前画的强电高频FOC电机的四层板的文章,会涉及更多一些的硬件知识。

    所以我是不赞成网上说的:嵌入式工程师软硬件都要会,门槛很高。实际上,对于嵌入式软件工程师来说,硬件方面,只需要会示波器,万用表,看得懂简单的原理图就够了。具体我上面所说的这些细节,仅仅一个电容电阻的大小怎么选,又有几个人知道呢?就单单一个电源来说就够学好几个月了,还有运放、EMC等等的知识。术业还是有专攻的。

    反之,从我实际的经验来看,很多嵌入式程序员对于很多知识并没有深入的理解。大部分人就是移植一下SDK,然后左试试右改改,很多深入的东西都没有去理解。比如SDIO协议就有很多CMD,USB协议包括CDC、MSC、HID等等,很多功能我们通过SDK就能实现了。真正去理解里面原理的人很少,但从我的经验来看,正是理解这些底层逻辑实现代码的同时,才能真正在代码可读性、代码效率上能够有一个比较大的提升。在未来面对未知知识的时候,由于你的知识储备,也会有更高的学习效率。

    所以我并不觉得嵌入式门槛有多高,相反,这个行业有太多低水平的人了。因为很多知识你完全可以不用深入地去理解,只不过反映出来就是效率很低罢了。厉害的人永远是少数的,所以还是慢慢积累吧!

  • 相关阅读:
    图像处理之图像复原[逆滤波、维纳滤波、约束最小二乘法、Lucy-Richardson和盲解卷积复原]
    MySQL-锁分类-1
    数据处理:Numpy & Pandas(1)
    vue-devtools工具的安装和使用
    RabbitMQ高级特性 - 消息和队列TTL、死信队列
    navicat16 破解(注意破解时候要断网)
    Ceres Solver简介及使用
    Python学习笔记15:进阶篇(四)文件的读写。
    Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之二 简单人脸检测添加戴眼镜效果
    实验二 数据选择器的设计与vivado集成开发环境【Verilog】
  • 原文地址:https://blog.csdn.net/tilblackout/article/details/136437752