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

news2024/11/17 15:35:59

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

本篇文章就来介绍一下,一个简单的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.coloradmin.cn/o/1492620.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【论文翻译】结构化状态空间模型

文章目录 3.2 对角结构化状态空间模型3.2.1 S4D:对角SSM算法3.2.2 完整应用实例 3.3 对角化加低秩(DPLR)参数化3.3.1 DPLR 状态空间核算法3.3.2 S4-DPLR 算法和计算复杂度3.3.3赫尔维兹(稳定)DPLR形式 这篇文章是Mamba作者博士论文…

重量的定义、质量和重量之间的区别

一、简述 物体的重量取决于该物体所在空间点的引力场。重量是一种力,因此它是一个矢量,这意味着它有方向和大小。通过自由体图来表示物体重量产生的力通常很方便。 重量总是从物体的质心向下作用到地球中心。(如果你在不同的天体上&#xff0…

万物皆可模块化分解

引言 为何要模块化,这里的主体是人,客体是事物。当事物很小时,人可以很轻松的解决;但是当事物远大于人能处理的范围时,我们就可以考虑对它进行模块化分解。模块化是一种解决复杂问题的方式,放之四海而皆可…

LVS集群(Linux Virtual server)相关介绍及LVS的NAT模式部署

群集的含义 ●Cluster,集群、群集由多台主机构成,但对外只表现为一个整体,只提供访问入口(域名或IP地址),相当于一台大型计算机 问题: 互联网应用中,随着站点对硬件性能、响应速度、服务稳定性、数据可靠…

Nvm下载安装和基本使用

下载与安装 github地址:Releases coreybutler/nvm-windows (github.com) 默认安装:安装nvm时候,全默认即可(如果自定义目录,切记 nvm的安装路径 :不要有汉字,不要有空格,不然后面会…

day04-SpringBootWeb入门

一、SpringBootWeb快速入门 1 需求 需求:基于 SpringBoot 的方式开发一个 web 应用,浏览器发起请求 /hello后,给浏览器返回字符串“Hello World ~”。 2 开发步骤 第1步:创建 SpringBoot 工程项目 第2步:定义 HelloC…

在 Rust 中实现 TCP : 3. TCP连接四元组

连接四元组 我们的项目已经取得了很大的进展——接下来能够开始解决 TCP 协议的实现问题。下面将讨论 TCP 的一些行为及其各种状态。 在多任务操作系统中,各种应用程序(例如 Web 服务器、电子邮件客户端等)需要同时进行网络访问。为了区分这…

使用GitOps自动化推动AI/ML工作流程

作为一名深耕自动化和人工智能领域的开发人员,我们逐渐认识到尖端工具和方法之间的显着协同作用,这些协同作用突破了可能性的界限。在这次探索中,我们想分享一个概念,它不仅彻底改变了我们的软件开发和基础设施管理方法&#xff0…

华为智慧教室3.0的晨光,点亮教育智能化变革

“教室外有更大的世界,但世界上没有比教室更伟大的地方。” 我们在求学阶段,都听说过这句话,但往往是在走出校园之后,才真正理解了这句话。为了让走出校园的孩子能够有能力,有勇气探索广阔的世界。我们应该准备最好的教…

JProfiler详解 JVM性能监测内存泄露分析工具

JProfiler详解 JProfiler简介主要功能特点使用场景注意事项使用案例使用步骤Could not verify ssh-ed25519 host key with fingerprint 问题解决内存泄露分析 JProfiler简介 JProfiler是一款业界领先的Java性能分析工具,由ej-technologies公司开发,专门…

Elasticsearch:使用 Streamlit、语义搜索和命名实体提取开发 Elastic Search 应用程序

作者:Camille Corti-Georgiou 介绍 一切都是一个搜索问题。 我在 Elastic 工作的第一周就听到有人说过这句话,从那时起,这句话就永久地印在了我的脑海中。 这篇博客的目的并不是我出色的同事对我所做的相关陈述进行分析,但我首先…

dolphinescheduler调用API

(作者:陈玓玏) 1. 打开api文档 api文档地址:http://{api server ip}:12345/dolphinscheduler/swagger-ui/index.html?languagezh_CN&langcn,我是用k8s部署的,所以ip和端口是由service决定的&#xf…

前端学习之HTML(第二天)--多媒体标签和表格标签

注&#xff1a;里面的注释是对各个标签的解释 多媒体标签 <!DOCTYPE html> <html> <head><meta charset"utf-8"><title></title> </head> <body> <!-- audio是音频可以填写绝对路径也可填写相对路径 --> &l…

【Hadoop大数据技术】——Hadoop概述与搭建环境(学习笔记)

&#x1f4d6; 前言&#xff1a;随着大数据时代的到来&#xff0c;大数据已经在金融、交通、物流等各个行业领域得到广泛应用。而Hadoop就是一个用于处理海量数据的框架&#xff0c;它既可以为海量数据提供可靠的存储&#xff1b;也可以为海量数据提供高效的处理。 目录 &#…

CSS定位,web游戏开发

面试前的准备 在这部分&#xff0c;我将详细讲解面试前我们需要做哪些方面的工作&#xff0c;以保证我们在面试过程中更加顺利。 准备一份漂亮的简历 一份漂亮的简历就是你进入大厂的敲门砖。 网上有很多教程教大家如何写出一份漂亮的简历&#xff0c;这里我就不做重复劳动了…

【SpringBoot3.x教程02】SpringBoot配置文件详解

前言&#xff1a;什么是配置文件 SpringBoot的配置文件是指用于定义和管理SpringBoot应用程序配置的文件。这些配置文件允许开发者调整和控制应用程序的行为&#xff0c;而无需改变代码。主要有两种格式的配置文件&#xff1a; 1、application.properties&#xff1a;这是一种使…

JavaScript 闭包:让你更深入了解函数和作用域

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

修改表中某个字段等于另一个字段减去 2 小时的 SQL

需求&#xff1a;将表中到达时间按照客户要求改为比赛时间的提前 N 小时&#xff0c;具体如下&#xff1a; 表结构 update contestSchedule SET mainRefereeArrivalTimeDATE_FORMAT(CONCAT(2024-03-04 ,gameTime)- INTERVAL 2 HOUR, %H:%i), assistantRefereeArrivalTimeDAT…

streamlit初学-用streamlit实现云台控制界面

用streamlit实现云台控制界面 效果图PC上的效果手机上的效果 源码: 本文演示了,如何用streamlit做一个云台控制界面。功能包括:用户登录,事件的处理,图片的更新 版本信息: streamlit_authenticator: 下载链接streamlit : 1.31.1python: 3.11 修改点: streamlit_authenticato…

CSS实现选中卡片样式操作

图一默认自动选中&#xff0c;并且不可取消选中&#xff0c;当选择其他卡片才可点击下一步 在 “ src/assets ” 路径下存放 save.png&#xff0c;代表选中的状态 <div class"cards"><ul class"container"><li v-for"image in image…