嵌入式系统硬件设计与实践(开发过程)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
如果把电路设计看成是画板子的,这本身其实是狭隘了。嵌入式硬件设计其实是嵌入式系统中很重要的一个部分。里面软件做的什么样,这是看不出来的,但是硬件做的好不好,一般都比较容易发现。所以,很多时候嵌入式硬件是人们真正愿意去付费买单的东西。
当然,不管是软件还是硬件,本身都是为系统服务,而系统又是为产品服务的,所以市场是所有产品的出发点和落脚点。
1、市场调研
作为嵌入式硬件开发的同学,一定要有市场意识。即,当前做的这个产品主要的客户在哪里,他们拿这个硬件去做什么,自己做的这个硬件有什么特色,能解决什么问题。这一步很重要,某种意义上说,它比你怎么把这个硬件设计出来还重要。如果方向错了,后面的一切工作很有可能都是徒劳。
如果这个时候,大家对市场还是没有概念的话,可以去电商网站上看,什么产品好卖,相关价格是多少,不同地方的人喜欢什么产品等等。这其实就是最简单的市场调研方法。
2、原理图绘制
原理图看上去就是很多的符号堆在一起。这里面有电源、晶振、复位、输入、输出、传感器等等。当然,原理图本身就是对真实硬件的抽象,这个抽象还是十分有必要的。绘制的时候可以多分几页,按模块划分,明白相关电路的输入、输出接口是什么,工作条件是什么。
有些同学说,自己的电路知识可能还停留在初高中的水平,没有办法做原理图绘制。这个时候,我的建议就是去模仿。别人做好的原理图,自己再做一遍,不要怕麻烦,画错了也不要紧。一遍又一遍的画,每一遍都会有新的认识。
3、原理图重新确认
有的同学绘制完原理图,就直接导入到pcb了。其实,这中间少了一部分确认工作。这个时候其实有很多事情可以做,比如确认线路有没有画反、封装有没有选对、模块有没有注释说明等等。在绘制pcb之前,重新确认下电路原理图还是非常有必要的。不要怕麻烦,前面每做的每一次修改,其实都是为了减少后续的麻烦。
4、pcb布局
pcb拉线之前,很重要的一步就是pcb的布局。布局当然有一些基本的规则,比如先放重要的芯片、连接器放在边缘、模数分开、高频和低频分开等等。但布局最最重要的,还是要根据原理图中的模块来进行布局。一个模块相连的芯片、电阻、电容、电感要靠在一起,这样也方便连线,另外对于后续的贴片、封装也是非常有利的。
pcb布局好了,连线就简单了。当然 这需要经验的积累,不断地练习才能越做越好。
5、pcb连线
连线的时候,可以先把电源线连上,线宽一点。接着,把相连、靠近的连线连上。一时没有办法解决的连线可以先搁置。这中间,可能还会微调器件的位置,比如位置颠倒、左右移动等,甚至于还要取消之前已经连好的网络,这都是难免的。连线的时候,尽量走同一层,没有办法了再选择过孔。电源旁边的电容尽量挨着芯片,晶振下面不要走线,网络、485、usb走差分等等,这些都可以遇到的时候边用边学。
刚开始学的时候,板子选2层、还是4层,可以提前设计好。一开始的时候,板子大一点、层数多一些,这都是可以的,没必要苛责自己。比如说,4层多了VCC、GND,自然布线就比较轻松。完全等到后续经验多了,层数就可以压低了,自然而然就可以走线越来越好了。
同样一块板子,可以多尝试走线几次,比如第一次、第二次、第三次,看上去好像是在做重复的工作,但是实际上每一次自己都会有新的收获,对线路也会理解的越来越深刻。我们满足的不仅仅是线布通、通过drc测试,而是说要简单、整洁、大方、合理。
多层板有信号层和内电层两种。信号层就是普通的走线,而内电层和信号层相反,它本身是一块铜板,走线的地方反而是被分割的地方,这是需要注意的。
6、pcb信号确认
绘制完pcb,不要着急打板。每个信号重新确认下,添加合理的丝印,相关器件的封装再看一遍,只要没有生产,一切都还来得及,花费的代价也小。
7、购买器件,pcb生产
pcb本身要想完成,一方面需要购买各种元器件,另外一方面就是pcb生产。元器件可以通过电商网站解决,pcb生产现在也有很多的工厂可以帮助解决,比如某创、某配。这个时候有一个问题,就是电路板中可能存在很多的电容、电阻、电感,它们如果比较小,达到0201,其实焊接时比较麻烦的。建议大家一开始设计的时候,还是用0603这样大一点的贴片器件来设计,这样方便自己练手焊接。如果不想自己弄,只想焊接一些大的连接器,完全可以使用厂商的smt服务,就是多一些钢网的费用、贴片的费用,这也无可厚非。
8、焊接
拿到厂家的pcb板子之后,即使smt贴片之后,这个时候一般还需要自己焊接一些连接器,比如排针、usb、rj45、电源插口等等。焊接可以和测试同步进行,一遍测试、一边焊接。有的设计不对的地方,可能还需要飞线,实际操作的时候注意用电安全即可。
9、测试
实际测试,是和焊接同步进行的。一般先焊接上电源,确保没有短路、芯片不发热。接着把最小系统焊接上,除了之前说的晶振、复位、芯片那些,还需要把下载电路焊接上。如果这一步没问题,就需要慢慢测试其他电路了,比如按键、flash、网络、pwm等等。焊接一个,测试一个。这中间肯定会出现问题,有硬件的、有软件的。这个时候最好有一个第三方稳定的开发板,这样可以分清楚,是软件的问题,还是硬件的问题。
对于调试过程中出现的硬件问题,还需要重新修改原理图、重新pcb设计、重新打样,这都是难免的。所以前期打样的时候,都可以5片、5片这样的去打样,没必要打样太多,等到真正稳定后,可以慢慢提高数量。小错误导致的打样失败,成本尚且可控,但是如果数量多了,就得不偿失了。
所以,这里对于硬件发生的任何变更,一定要把之前做过的测试重新再做一次,不要怕麻烦。因为现在做的每一步,都是在给自己降低风险、节约成本。软件错了,升级一下版本就可以了。但是硬件的错误,很多时候是需要用真金白银来买单的。
相关文章:
嵌入式系统硬件设计与实践(开发过程)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 如果把电路设计看成是画板子的,这本身其实是狭隘了。嵌入式硬件设计其实是嵌入式系统中很重要的一个部分。里面软件做的什么样…...
入门vue(1-10)
正确学习方式:视频->动手实操->压缩提取->记录表述 1基础结构 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"&…...
C#开发的OpenRA的游戏主界面怎么样创建3
继续游戏主界面创建的主题, 我们知道游戏的主界面上有很多部件,比如显示文本的标签(LabelWidget), 显示按钮(ButtonWidget)。那么这些部件又是如何创建在主界面上的呢? 其实这些部件是否显示,都是来源于文件yaml,在这里就是文件mainmenu.yaml, 在这个文件里定义了所有…...
秒懂算法 | 基于主成分分析法、随机森林算法和SVM算法的人脸识别问题
本文的任务与手写数字识别非常相似,都是基于图片的多分类任务,也都是有监督的。 01、数据集介绍与分析 ORL人脸数据集共包含40个不同人的400张图像,是在1992年4月至1994年4月期间由英国剑桥的Olivetti研究实验室创建。 此数据集下包含40个目录,每个目录下有10张图像,每个…...
QML Loader(加载程序)
Loader加载器用于动态加载 QML 组件。加载程序可以加载 QML 文件(使用 source 属性)或组件对象(使用 sourceComponent 属性) 常用属性: active 活动asynchronous异步,默认为falseitem项目progress 进度so…...
C++——类型转换
目录 C语言中的类型转换 C强制类型转换 static_cast reinterpret_cast const_cast dynamic_cast 延伸问题 RTTI(了解) C语言中的类型转换 在C语言中,如果赋值运算符左右两侧类型不同,或者形参与实参类型不匹配,或…...
vue3:生命周期(onErrorCaptured)
一、背景 当项目如果发生报错,影响程序体验。如果能以捕获的方式得到错误信息,而且还能定位问题,这样就好了,本文介绍onErrorCaptured实现我们想要的效果。 vue2:errorCaptured。使用与vue3同理。 vue3:…...
vue过滤器
vue 过滤器 对要显示的数据进行特定格式化之后再显示 注册过滤器 Vue.filter(name,callback)new Vue({filters:{}}) 使用过滤器 {{ name | 过滤器名 }}v-band:属性“name | 过滤器名” 局部过滤器 <p>{{time | timeFormater }}</p> <!-- 过滤器可接受额外参…...
I/O模型
写在前面 前面聊完了IO方式, 也就意味着网络数据的收发通道是建立起来了。但业务场景中, 通道本身是不会发送数据的。在常见的网络应用中, server端会创建多个链接以服务更多client, 同时要求各个client尽可能互不影响。这是I/O模型(也就是IO方式线程模型)要解决的问题。由于加…...
前端必备技术之——AJAX
简介 AJAX 全称为 Asynchronous JavaScript And XML,就是异步的 JS 和 XML(现在已经基本被json取代)。通过 AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。AJAX 不是新的编程语言,而是一种将现有的标准组…...
MySQL数据库 各种指令操作大杂烩(DML增删改、DQL查询、SQL...)
文章目录前言一、DML 增删改添加数据修改数据删除数据二、DQL 查询基本查询条件查询聚合函数(count、max、min、avg、sum)分组查询(group by)排序查询(order by)分页查询(limit)DQL 语句练习三、SQLDCL 权限控制约束案例多表查询事务存储引擎字符串函数数值函数日期函数流程函数…...
Java分布式全局ID(一)
随着互联网的不断发展,互联网企业的业务在飞速变化,推动着系统架构也在不断地发生变化。 如今微服务技术越来越成熟,很多企业都采用微服务架构来支撑内部及对外的业务,尤其是在高 并发大流量的电商业务场景下,微服务…...
算法分析与设计之并查集详解
算法分析与设计之并查集1.前言2.并查集的基础2.1.关于动态连通性2.2.动态连通性的应用场景:2.3.对问题建模:2.4.建模思路:2.5.API2.7.Quick-Find算法:2.8.Quick-Union算法:3. 并查集的应用1.前言 本文主要介绍解决动态…...
Linux - 内存性能评估
文章目录概述free 命令指定的时间段内不间断地监控内存的使用情况通过watch与free相结合动态监控内存状况vmstat命令监控内存“sar –r”命令组合小结概述 内存的管理和优化是系统性能优化的一个重要部分,内存资源的充足与否直接影响应用系统的使用性能。在进行内存…...
00后初中辍学,转行程序员后,终于找到了女朋友
大家好,这里是程序员晚枫,今天继续分享我们的读者投稿,如需投稿赚稿费的朋友,请在后台私信我:投稿。下面我们进入正文吧~ 我是一位 00 后,从初一辍学,到目前为止已有 8 年的时间了,在…...
“Vue学习注意事项:掌握核心特性,注意性能优化和第三方库的使用“
Vue是一款易学易用的JavaScript框架,它可以帮助开发者构建动态、高性能的用户界面。Vue的核心概念包括数据绑定、指令、计算属性和组件化,学习Vue需要注意以下几个点:1. 理解Vue的基本概念和用法Vue的基本概念包括模板、组件、数据绑定、计算…...
计算机网络协议详解(二)
文章目录🔥HTTP协议介绍🔥HTTP协议特点🔥HTTP协议发展和版本🔥HTTP协议中URI、URL、URN🔥HTTP协议的请求分析🔥HTTP协议的响应分析🔥MIME类型🔥HTTP协议介绍 HTTP协议介绍 什么是超…...
【CSS】CSS 复合选择器 ② ( 子元素选择器 | 交集选择器 )
文章目录一、子元素选择器1、语法说明2、代码分析3、代码示例二、交集选择器1、语法说明2、代码示例一、子元素选择器 1、语法说明 子元素选择器 可以选择 某个基础选择器 选择出的 元素组 的 直接子元素 ( 亲儿子元素 ) 中 使用基础选择器 选择 元素 ; 子元素选择器语法 : 父选…...
Java集合专题
文章目录框架体系CollectionListArrayListLinkedListVectorSetHashSetLinkedHashSetTreeSetMapHashMapHashtableLinkedHashMapTreeMapPropertiesCollections框架体系 1、集合主要分了两组(单列集合,双列集合) 2、Collection接口有两个重要的子…...
双重差分法(DID):算法策略效果评估的利器
文章目录算法评估DID原理简单实例Python实现算法评估 作为一名算法出身的人,曾长期热衷于算法本身的设计和优化。至于算法的效果评估,通常使用公开数据集做测试,然后对比当前已公开的结果,便可得到结论。 但是在实际落地过程中&…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果。…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
Golang——9、反射和文件操作
反射和文件操作 1、反射1.1、reflect.TypeOf()获取任意值的类型对象1.2、reflect.ValueOf()1.3、结构体反射 2、文件操作2.1、os.Open()打开文件2.2、方式一:使用Read()读取文件2.3、方式二:bufio读取文件2.4、方式三:os.ReadFile读取2.5、写…...
