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

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

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

文章目录

  • 1 目标和需求
  • 2 原理图
    • 2.1 电源部分
      • 2.1.1 电源座子
      • 2.1.2 Buck电路
        • 2.1.2.1 原理
        • 2.1.2.2 Buck电路设计
    • 2.2 STM32最小系统
    • 2.3 流水灯
  • 3 PCB设计
    • 3.1 封装选择
    • 3.2 电源滤波考虑
    • 3.3 Buck电路布局和布线
    • 3.4 LED部分设计
      • 3.5 3D演示
  • 4 总结和感慨

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就能实现了。真正去理解里面原理的人很少,但从我的经验来看,正是理解这些底层逻辑实现代码的同时,才能真正在代码可读性、代码效率上能够有一个比较大的提升。在未来面对未知知识的时候,由于你的知识储备,也会有更高的学习效率。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/513892.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第九天

28. 实现 strStr() &#xff08;本题可以跳过&#xff09; 方法&#xff1a; 方法一&#xff1a; 暴力法 i 表示最多能移动到n-m位置&#xff0c; 超过则退出循环。j表示haystack 初始位置k表示needle的初始位置如果haystack [j] needle[k]且 k<m 则 j, k; 如果 km 则返…

二次元404网站模板源码带人物语音

二次元404网站模板源码带人物语音&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 下载地址 https://www.qqmu.com/2410…

pdf属性修改教程 如何修改pdf 属性?

PDF&#xff08;Portable Document Format&#xff09;是一种广泛使用的文件格式&#xff0c;用于呈现文档&#xff0c;包括文本、图像、图形和其他元素。PDF文件的一个特点是其属性&#xff0c;这些属性包括文件的创建日期、修改日期、作者、标题、主题、关键词等。这些属性在…

html实体字符,看完这篇彻底明白了

二.技术基础知识 基础知识一直都是重点考察的内容&#xff0c;包含有HTML&#xff08;5&#xff09;、CSS&#xff08;3&#xff09;、JavaScript到 戳这里领取完整开源项目&#xff1a;【一线大厂前端面试题解析核心总结学习笔记Web真实项目实战最新讲解视频】 Vue&#xff0…

【HarmonyOS】Dev Eco Studio4.0开发工具下载SDK10

目录 点击创建项目 选择空项目&#xff08;OpenHarmony&#xff09;&#xff0c;点击Next 此时SDK为10 点击 configure OpenHarmony SDK 创建一个新目录文件存放SDK&#xff0c;不要跟之前的SDK文件目录重合&#xff0c;点击Next 点击Next 勾选Accept&#xff0c;点…

Python 全栈系列232 再次搭建RabbitMQ

说明 最近想重新上RabbitMQ&#xff0c;主要目的还是为了分布式任务调度。在Kafka和RabbitMQ两者犹豫了一下&#xff0c;还是觉得RabbitMQ好一些。 在20年的时候有搞过一阵子的RabbitMQ,看了下当时的几篇文章&#xff0c;觉得其实想法一直没变过。 Python - 装机系列24 消息…

16-网关-自研微服务框

网关 在微服务的场景下&#xff0c;服务因为分布在不同的服务器上&#xff0c;但是用户在访问的时候&#xff0c;不可能去维护这成百上千的入口&#xff0c;希望有统一的入口来进行访问&#xff0c;这就是网关的作用。 网关最重要的一个功能就是路由功能&#xff0c;能将请求转…

防患未然,OceanBase巡检工具应用实践——《OceanBase诊断系列》之五

1. OceanBase为什么要做巡检功能 尽管OceanBase拥有很好的MySQL兼容性&#xff0c;但在长期的生产环境中&#xff0c;部署不符合标准规范、硬件支持异常&#xff0c;或配置项错误等问题&#xff0c;这些短期不会出现的问题&#xff0c;仍会对数据库集群构成潜在的巨大风险。为…

使用API有效率地管理Dynadot域名,进行DNS域名解析

关于Dynadot Dynadot是通过ICANN认证的域名注册商&#xff0c;自2002年成立以来&#xff0c;服务于全球108个国家和地区的客户&#xff0c;为数以万计的客户提供简洁&#xff0c;优惠&#xff0c;安全的域名注册以及管理服务。 Dynadot平台操作教程索引&#xff08;包括域名邮…

51camera简述面结构光成像

首先我们来看看结构光成像&#xff0c;它是使用特定的光图案和2D相机来捕获物体表面的三维轮廓的一种成像方法。其原理是将特定的窄带光投影到三维形状物体的表面上会产生一条照明线&#xff0c;该照明线从投影器的其他角度来看存在一定的变形&#xff0c;利用这种被三维形状调…

十四 超级数据查看器 讲解稿 背景和颜色

十四 超级数据查看器 讲解稿 背景和颜色 点击打开新页面播放视频教程 点击访问应用宝下载 讲解稿全文: 大家好&#xff0c;我们讲解一下 超级数据查看器 背景和颜色设置。 首先&#xff0c;我们打开超级数据查看器。 这节课设置的是 列表和详情界面的背景 和顶栏颜色。 …

网络编程作业day4

广播模型&#xff1a; 发送端&#xff1a; #include <myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//设置套接字允许广播属性int broadcast1;if(sets…