当前位置: 首页 > news >正文

嵌入式分享合集13

自己的原文哦~          嵌入式https://blog.51cto.com/whaosoft/14103170

一、硬件工程师应记住的10大软件技巧

硬件工程师应记住的10大软件技巧

嵌入式系统设计不仅需要了解硬件,还需了解软件是如何影响硬件并与硬件进行交互的。设计硬件所需的范式可能与设计软件完全相反。当从硬件设计转向包含软件的设计时,硬件工程师应牢记以下十个技巧。 

技巧#1:流程图第一,实现第二

    当工程师首次迈入软件开发领域时,会有一种强烈的诱惑力促使他们立刻投入工作并开始写代码。这种做法就好比在电路逻辑图还未完成前就试图设计印刷电路板(PCB)。在着手开发软件时,抑制一上来就想写代码的冲动至关重要,应首先用流程图制定一个软件架构图。这样的方法会使开发人员对应用所需的不同部分与组件形成一个概念,就像电路逻辑图可以告诉工程师需要哪些硬件元件一样。这样可确保程序整体建立在良好的组织和深思熟虑之上,减少程序调试时间,从长期看,这样做还可以节省时间、省去麻烦。 

技巧#2:使用状态机控制程序流程

    状态机是20世纪最伟大的软件发明之一。一个应用程序往往可被分为多个状态机,每个状态机都控制该应用程序的特定部分。这些状态机都拥有自己的内部状态和状态转换,从中可看出软件如何与各种激励相互作用。用状态机来设计软件,可简化软件的开发,使之模块化、可维护,并易于理解,相x关文章请移步此处:谈谈单片机编程思想——状态机。现在已经有多种资源来演示状态机理论和算法。 

技巧#3:避免使用全局变量

    在函数式编程的年代,函数要先于形式,程序员的唯一目标是尽可能地让程序按预期方式快速运行,而不用考虑程序结构或可重用性。这种编程范式会毫无顾虑地使用全局性变量,程序中的任何函数都可能修改它。其结果就造成了变量被破坏的几率增加或变量被误用。在新推荐的面向对象的范式中,应在最小的范围内定义变量并封装它们,以防止其他函数的误用或破坏。因此,建议限制使用全局变量的数量。在C语言中可用外部关键字标识这些变量。 

技巧#4:充分利用模块化特性

    无论问哪一名工程师,项目的哪部分最有可能延迟交付并超出预算,答案都是软件。软件往往是复杂的,且难以开发和维护,尤其是当整个应用都存在于单个文件或松散关联的多个文件中时。为了改善可维护性、可重用性及复杂性,强烈建议程序员充分利用现代编程语言的模块化特性,将常用功能分解成模块。以这样的方式分解代码,程序员就能着手建立函数与特性库,然后在一个接一个的应用中重用它们,从而通过连续测试而改善代码质量,同时也减少了开发时间,降低了开发成本。 

技巧#5:保持中断服务例程的简单性

    中断服务例程用来中断处理器对当前代码的执行,而去处理刚刚触发中断的外围设备。无论何时执行中断,都需要一定的开销,用于保存当前程序的状态并运行中断,然后将处理器回归原程序状态。现代处理器要比多年前的处理器快得多,但仍需要考虑此花销。一般情况下,程序员都想把中断运行时间降至最低,以避免干扰主代码。这意味着中断应该短而简单。中断中不应调用函数。此外,如果中断变得过于复杂或耗时,那么就应该只在必要时利用中断做最少量的工作,例如,将数据载入缓冲区并设置一个标志,然后让主代码处理输入的数据。这样做可保证大多数处理器的时间用于运行应用,而不是处理中断。

技巧#6:使用处理器示例代码进行测试

    设计硬件时,构建原型测试电路总是有益的,这样可确保工程师对电路有正确的理解,然后再做电路板布局。这在设计软件时也同样适用。硅片制造商通常都有示例代码,可用来测试微处理器的各个部分,这样工程师们就可判定该部分的工作情况。此方法使人们明确知道应该如何设计软件体系架构,以及可能碰到的任何问题。在设计初期了解可能存在的障碍,比在产品交付前的最后几小时才发现它们要好得多。这是预先测试一段代码的好方法,但需提醒的是,制造商代码往往不是模块化的,要经过彻底的修改才可用于实际应用。随着技术的进步,也许某一天芯片供应商会提供可用于生产的代码。 

技巧#7:限制功能复杂度

    工程学中有一个旧词叫“KISS”——保持简单和直接。无论在处理何种复杂的工作时,最简单的方法就是把它分解为更小、更简单、更易处理的任务。随着工作或功能变得越来越复杂,人们要准确无误地记录所有的细节也变得更困难。在写一个函数时,其复杂度在当时看似适中,然而还必须考虑到,6个月后当工程师进行维护时,还需要查看代码。测量函数复杂度(如循环复杂度)的方法很多,现在已经有工具可以自动计算某个函数的循环复杂度。由经验可知,函数的循环复杂度保持在10以下是最理想的。 

无论在处理何种复杂工作时,最简单的方法就是把它分解为更易处理的任务。 

技巧#8:使用源代码存储库并频繁提交代码

人都是会犯错误的,写代码时也会犯错。这就是为什么开发人员使用源代码存储库是如此重要。源代码存储库可使开发人员“存入”一个好的代码版本,并描述对该基础代码所做的修改。这不仅使开发人员可以复原或追溯到的旧版代码,还可以比较旧版代码之间的不同。如果开发人员做的一系列修改破坏了系统,只需点击一下即可恢复好代码版本!请谨记,如果不频繁提交代码,存储库就不会达到预期目的。如果做了不可修复的改变,过两周才提交代码再恢复的话,就会造成大量工作和时间的损失!  延庆川北小区45孙老师 收卖废品破烂垃圾炒股 废品孙 再回收

技巧#9:代码注释

    在紧张的软件开发中,开发人员很容易把注意力集中在编写和调试代码上,而忽略做详细的注释。在压力之下,注释工作往往拖到最后,因为开发人员认为这是最后的一件事。然而,趁代码在你脑中记忆犹新时就做注释是至关重要的,这样做可使其他开发人员或以后你自己读懂注释,理解代码是如何工作的。 

技巧#10:使用Agile开发流程

    无论做何种类型的工程设计,都建议先设定并遵守某种流程,以便质量和成本都保持稳定的并能按时交付。软件开发人员已成功使用Agile开发流程开发高质量软件,这一流程可按任务的优先顺序做开发。优先级别最高的任务在指定的时间内首先完成,这被称为迭代。这种方法的好处是可以使软件开发流程保持顺畅,还可以根据结果和客户的需要,使需求和任务适应每一次迭代并做相应的修改。

网友评论

@ DickB 

我不支持关于中断程序的建议。在使用德州仪器(TI)MSP430低功耗微控制器时,主代码经常只用于将处理器置于睡眠状态。当处理器处于激活状态时,所有工作都在中断程序中完成。

@ The Real Dr Bob 

从我的经验看,也许这篇文章的标题应为“软件工程师的10大技巧”。 

我在面试一名软件工程师时曾问过这样一个问题:如何为一个新项目写软件?

回答是:着手写软件代码!

我以为他会说“先阅读规范,然后将软件分解成小模块并为它们设计流程图”之类的话。 

当然,我没录用他。

@ Thinking_J

一切都很好。

但我还想增加一条:让管理层学习Agile。

最重要的是,在项目的开始阶段就为项目的完成设定一个现实的目标(这是反复强调的)。而且,项目一开始就应安排好适当的人力和流程,而不是后来才补上。

  

二、STM32串口通信基本原理

通信接口背景知识

设备之间通信的方式

    一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种。并行与串行通信的区别如下表所示。

串行通信的分类

1、按照数据传送方向,分为:

  • 单工:数据传输只支持数据在一个方向上传输;
  • 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口。
  • 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端。

2、按照通信方式,分为:

  • 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口。
  • 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线。

    在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中通常双方会统一规定在时钟信号的上升沿或者下降沿对数据线进行采样。

    在异步通讯中不使用时钟信号进行数据同步,它们直接在数据信号中穿插一些用于同步的信号位,或者将主题数据进行打包,以数据帧的格式传输数据。通讯中还需要双方规约好数据的传输速率(也就是波特率)等,以便更好地同步。常用的波特率有4800bps、9600bps、115200bps等。

    在同步通讯中,数据信号所传输的内容绝大部分是有效数据,而异步通讯中会则会包含数据帧的各种标识符,所以同步通讯效率高,但是同步通讯双方的时钟允许误差小,稍稍时钟出错就可能导致数据错乱,异步通讯双方的时钟允许误差较大。

常见的串行通信接口

STM32串口通信基础

    STM32的串口通信接口有两种,分别是:UART(通用异步收发器)、USART(通用同步异步收发器)。而对于大容量STM32F10x系列芯片,分别有3个USART和2个UART。

UART引脚连接方法

  • RXD:数据输入引脚,数据接受;
  • TXD:数据发送引脚,数据发送。

    对于两个芯片之间的连接,两个芯片GND共地,同时TXD和RXD交叉连接。这里的交叉连接的意思就是,芯片1的RxD连接芯片2的TXD,芯片2的RXD连接芯片1的TXD。这样,两个芯片之间就可以进行TTL电平通信了。STM32与51单片机串口通信相x关实例,请移步此处:STM32与51单片机串口通信实例。

    若是芯片与PC机(或上位机)相连,除了共地之外,就不能这样直接交叉连接了。尽管PC机和芯片都有TXD和RXD引脚,但是通常PC机(或上位机)通常使用的都是RS232接口(通常为DB9封装),因此不能直接交叉连接。RS232接口是9针(或引脚),通常是TxD和RxD经过电平转换得到的。故,要想使得芯片与PC机的RS232接口直接通信,需要也将芯片的输入输出端口也电平转换成RS232类型,再交叉连接。

    经过电平转换后,芯片串口和RS232的电平标准是不一样的:

  • 单片机的电平标准(TTL电平):+5V表示1,0V表示0;
  • RS232的电平标准:+15/+13 V表示0,-15/-13表示1。

    RS-232通讯协议标准串口的设备间通讯结构图如下: 

    所以单片机串口与PC串口通信就应该遵循下面的连接方式:在单片机串口与上位机给出的RS232口之间,通过电平转换电路(如下面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换。STM32与PC之间通信实例,请移步此处:STM32实例-用按键控制串口发送数据,文末附代码。

RS232串口简介

    台式机电脑后面的9针接口就是com口(串口) 在工业控制 数据采集上应用广泛上图中,最右边的是串口接口统称为RS232接口,是常见的DB9封装。

通信过程中只有两个脚参与通信。

  • 2脚:电脑的输入RXD
  • 3脚:电脑的输出TXD 通过2 ,3 脚就可以实现全双工(可同时收发)的串行异步 通信
  • 5脚:接地

单片机的P3口是有两个复用接口RXD 和TXD。这是单片机进行串行通信的收发口,连接应该错位的对应到电脑的TDX RDX上。注意:单片机和RS232的电平标准是不一样的。

单片机的电平标准 TTL电平 :+5V表示1 0V表示0。

RS232的电平标准 +15/+13 V表示1 -15/-13 表示0。

所以 单片机与电脑串口通信就应该遵循下面的连接方式:

在单片机与上位机给出的RS232口之间通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换,PC串口与单片机串口连接方式图:

注意这两个DB9:DB91是在电脑上的 DB92是在单片机实验板上焊接着的。

这里的交叉连接的意思是 DB91的RXD连着DB92的TXD。

DB92的RXD连着DB91的TXD这样交叉着连接,如果电脑没有RS232口 只有USB口,可以用串口转接线转出串口,如下图所示。

这个时候在电脑上位机上需要安装串口驱动程序。

注意,这个驱动程序驱动的是PL2303芯片(在上图的大头里面) 使得RS232信息转换成USB信息。

下图为上图的内部结构:

用ttl转uart用的比较方便 只是用了rx tx

用串口通信比USB简单,因为串口通信没有协议,使用方便简单。

STM32的UART特点

  • 全双工异步通信;
  • 分数波特率发生器系统,提供精确的波特率。发送和接受共用的可编程波特率,最高可达4.5Mbits/s;
  • 可编程的数据字长度(8位或者9位);
  • 可配置的停止位(支持1或者2位停止位);
  • 可配置的使用DMA多缓冲器通信;
  • 单独的发送器和接收器使能位;
  • 检测标志:
    ① 接受缓冲器
    ②发送缓冲器空
    ③传输结束标志;
  • 多个带标志的中断源,触发中断;
  • 其他:校验控制,四个错误检测标志。

串口通信过程

STM32中UART参数

    串口通讯的数据包由发送设备通过自身的TXD接口传输到接收设备的RXD接口,通讯双方的数据包格式要规约一致才能正常收发数据。    

    STM32中串口异步通信需要定义的参数:起始位、数据位(8位或者9位)、奇偶校验位(第9位)、停止位(1,15,2位)、波特率设置。相x关文章推荐:学习STM32单片机,绕不开的串口。

    UART串口通信的数据包以帧为单位,常用的帧结构为:1位起始位+8位数据位+1位奇偶校验位(可选)+1位停止位。如下图所示:

    奇偶校验位分为奇校验和偶校验两种,是一种简单的数据误码校验方法。奇校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为奇数;偶校验是指每帧数据中,包括数据位和奇偶校验位的全部9个位中1的个数必须为偶数。

    校验方法除了奇校验(odd)、偶校验(even)之外,还可以有:0 校验(space)、1 校验(mark)以及无校验(noparity)。 0/1校验:不管有效数据中的内容是什么,校验位总为0或者1。

UART(USART)框图

    这个框图分成上、中、下三个部分。本文大概地讲述一下各个部分的内容,具体的可以看《STM32中文参考手册》中的描述。

    框图的上部分,数据从RX进入到接收移位寄存器,后进入到接收数据寄存器,最终供CPU或者DMA来进行读取;数据从CPU或者DMA传递过来,进入发送数据寄存器,后进入发送移位寄存器,最终通过TX发送出去。

    然而,UART的发送和接收都需要波特率来进行控制的,波特率是怎样控制的呢?

    这就到了框图的下部分,在接收移位寄存器、发送移位寄存器都还有一个进入的箭头,分别连接到接收器控制、发送器控制。而这两者连接的又是接收器时钟、发送器时钟。也就是说,异步通信尽管没有时钟同步信号,但是在串口内部,是提供了时钟信号来进行控制的。而接收器时钟和发送器时钟有是由什么控制的呢?

延庆川北小区45孙老师 收卖废品垃圾破烂炒股 废品孙

    可以看到,接收器时钟和发送器时钟又被连接到同一个控制单元,也就是说它们共用一个波特率发生器。同时也可以看到接收器时钟(发生器时钟)的计算方法、USRRTDIV的计算方法。

三、MOS管驱动电路

MOS管因为其导通内阻低,开关速度快,因此被广泛应用在开关电源上。而用好一个MOS管,其驱动电路的设计就很关键。下面分享几种常用的驱动电路。

1 电源IC直接驱动

    电源IC直接驱动是最简单的驱动方式,应该注意几个参数以及这些参数的影响。

①查看电源IC手册的最大驱动峰值电流,因为不同芯片,驱动能力很多时候是不一样的。

②了解MOS管的寄生电容,如图C1、C2的值,这个寄生电容越小越好。如果C1、C2的值比较大,MOS管导通的需要的能量就比较大,如果电源IC没有比较大的驱动峰值电流,那么管子导通的速度就比较慢,就达不到想要的效果。

2 推挽驱动

    当电源IC驱动能力不足时,可用推挽驱动。

    这种驱动电路好处是提升电流提供能力,迅速完成对于栅极输入电容电荷的充电过程。这种拓扑增加了导通所需要的时间,但是减少了关断时间,开关管能快速开通且避免上升沿的高频振荡。

3 加速关断驱动

    MOS管一般都是慢开快关。在关断瞬间驱动电路能提供一个尽可能低阻抗的通路供MOSFET栅源极间电容电压快速泄放,保证开关管能快速关断。相x关推荐:MOS管驱动电路设计细节。

    为使栅源极间电容电压的快速泄放,常在驱动电阻上并联一个电阻和一个二极管,如上图所示,其中D1常用的是快恢复二极管。这使关断时间减小,同时减小关断时的损耗。Rg2是防止关断的时电流过大,把电源IC给烧掉。

    如上图,是我之前用的一个电路,量产至少上万台,推荐使用。

    用三极管来泄放栅源极间电容电压是比较常见的。如果Q1的发射极没有电阻,当PNP三极管导通时,栅源极间电容短接,达到最短时间内把电荷放完,最大限度减小关断时的交叉损耗。

    还有一个好处,就是栅源极间电容上的电荷泄放时电流不经过电源IC,提高了可靠性。

4 隔离驱动

    为了满足高端MOS管的驱动,经常会采用变压器驱动。其中R1目的是抑制PCB板上寄生的电感与C1形成LC振荡,C1的目的是隔开直流,通过交流,同时也能防止磁芯饱和。

四、次简单的转岗,看破硬件设计

由于自己深感技术基础的薄弱,我申请去产线当了一名工程人员,在此期间,我从生产角度去看待设计,发现视角不同,看到的内容也不一样。

    每每在产线上,员工对我横眉怒眼,咒天怨地:这TMD是谁设计的产品~我就一脸黑线的飘过。

    我很佩服我们维修组的成员,相比较而言我的维修技术是大而空,而他们是脚踏实地,原因就是在于我往往会从理论出发,维修一个东西先拿原理图看看,然后再分析问题会出现在哪一块电路。

    而他们不同的地方是他们会拿一块好板子量一量,对比一下,找到问题会出现在什么地方,然后才是原因。当然,我认为差异的主要原因是我没有维修数量压力,而他们绩效与成果直接挂钩。

    在这期间发生了很多问题,维修了很多板子,但是究其原因,占比例最高的却依旧是设计问题,占有九成以上,尤其是客户投诉的故障中,都能归结为设计缺陷。

    虽然也发生过PCB来料短路、设备工艺等问题,但是数量极其稀少。设计问题有很多方面,有的是原理问题,有的是布局问题,有的是工艺问题,有的是选材问题。

    我所遇到的最严重的一次设计缺陷是电路中没有设计主开关,即无法断电,正常使用过程中仅有信号开关。

    正常工作时没有问题,但是出现故障以后直接烧毁。所以无论什么产品,如果想要安全,就必须有一个能够快速断开电路的开关。

    我之前质疑电动汽车的博客中就说明一个问题:一旦出事故,能否保证快速有效的断电?几次电动汽车事故,例如比亚迪、众泰、特斯拉等,最终都是烧毁,因为电断不开,短路状态就会一直加热起火直至烧毁。

    而单片机的端口问题会是一个比较常见的现象。有一款产品生产时有间歇不开机现象,百思不得其解,最后研发工程师给出了答案——灯线断了!

    原来设计上该引脚被复用,上电时会检测引脚(漏极开路)是不是高电平以进入校准状态,进入工作状态就复用为驱动引脚(推挽输出),当灯线断掉以后,状态不定,如果误认为高电平就会进入校准状态一直不工作,看起来像是死机。所以设计上特殊信号的引脚尽量不要赋予太多的可能。这个故障如果有一个上拉电阻可能会有所改善。

    同样我们的工装也出现了类似的情况,一直以来按键的跳动都是困扰我们的问题,莫名的原因让程序误认为按键被按下而执行错误的功能。

    无论是走线布局、软件防抖、按键滤波等多种方案都试验过,可是都不完全能解决问题,偶然一次聊天时才发现工程师设计上没有加上拉电阻~

    我们其余的同事都默认为设计按键的时候都会加上拉电阻,经验主义害死人。

    布局问题多数会和地线有关,在地的分隔和单点接地上面很容易出现问题。有一个产品过流测试的时候会烧毁其中一根细线,分析后发现这是一根地线,这根线比大电流的铺铜离电源更近。

    当过流测试的时候,电流会首先选择这条近路而将线路烧毁。另外,像信号线走在活动的结构件或者卡槽附近导致擦坏的情况也比比皆是,这些都考验一个工程师对产品的熟悉程度。

    另一款低电压的产品中在正负极之间反向并联了抑制浪涌的二极管,客户投诉说不开主开关情况下电池耗光了,我拿起电路图一看,就觉得问题肯定出现在这个二极管身上。

    接着查规格书,发现该器件额定反向漏电流500mA,意味着假若一个二极管499mA,那么参照规格书就是正常的,但是电池就会无时无刻不放电,直到死的不能再死。这是一个典型的选型不良。

    而有一款老产品在生产中投诉说容易损坏万用表,经核实发现有一项测试内容是测试mA级别的电流,大约80mA左右,但是如果PCB出现故障会飙升到1A以上,测试时工艺文件要求是mA档,自然烧毁万用表保险丝。

    我看了之后仅仅将万用表拨到了A档,因为万用表能够有效到0.001A,与mA档效果相同,但是1A的电流却不会烧毁A档的保险丝。可见,合适的选型是多么的重要。

    我一般不使用电流档,因为容易损坏,调试的场合使用钳流表可能比较方便,但是生产测试中我会建议使用检流电阻。

    而检流电阻的选择也十分关键,曾有一个工装一开始设计使用220mR 3W的检流电阻,这个阻值对于小信号来说测试压降比较高,易测量,但过流状态容易烧毁,计算发现过流阀值30A时候电阻上瞬间功率近200W,肯定烧毁了!

    于是我建议使用无感电阻10mR 5W,那么正常工作时候就可以承受20A的电流,而且陶瓷封装,杜绝了起火的风险。

    还有一款产品也发生过很多问题,究其问题,与设计不无关系。由于设计上没有采用端子设计,所以生产测试过程中是将所有的导线全部焊接在PCB上面周转的,从生产初期就发现有部分不开机,测量调速旋钮阻值大幅度下降。

    一开始怀疑旋钮故障,但是多次拆解以后发现内部电路有烧毁的现象,旋钮本身没有损伤。最初总是不明白为什么内部电路会损毁,短路?焊接?芯片故障?撞击?分析来分析去都不是,原理上解释不通。

    最终发现原因却是由于拖着导线,NTC的导线测试过程中碰到了高压的线,将高压电引入低压电路导致芯片瞬间烧毁。

    如果设计上采用的是端子连接方式,不但测试方便,也不会出现这么高的损毁率了,而损坏的PCB足够端子的采购费用了,得不偿失。

    这款产品同时出现一个奇怪的测试现象——打火。测试人员如果带着手环接线,接火线的时候不会打火,接零线的时候会打火,而理论上火线是开关断开的。

    测试工装在工装组检查时候却不会出现这个现象,我直接去摸各个导线均不会出现这个问题,百思不得其解。

    偶然有一次测试各点对地电压的时候发现零线竟然是高压!至此才发现原来工装零火线输入接反了,而工装组的插座零火线也接反了。

    看起来表象是接线问题,但是也说明设备电路控制存在风险,设计不全面,所以后期的交流测试工装均加有交流接触器或者继电器,将零火线全部断开,并且用无锁按键控制,避免操作过程中PCB带电问题。

    这款产品还选用了一系列不密封的器件用在需要环氧胶密封的场合,这是一个不得不说的设计缺陷,选择的器件不满足使用要求。

    其实拆解了很多国内的不同类型产品,就会发现这是国内设计的共性,为了保证低成本而放弃部分性能。

    我总记得以前培训时候老师讲的,一个产品的99%成本是在生产中出现的,而幅度却取决于设计。

    设计应该让生产尽可能的在BOM+工艺的总成本上面降低,而不能单纯看BOM成本,用了便宜的原料不见得做出来的东西就便宜,中国很多大公司一瞬间垮台,都是便宜的原材料把自己给坑了。

    当时老师还讲现在的客户不再一味的追求价格便宜,还会考虑后期维护的综合成本。对于设计来说,生产就是我们的客户,设计的再先进,做起来很费劲,工人可是要骂娘的。

    今年这款产品又爆发出一个隐藏的缺陷,莫名其妙的飙升到了极限速度,失控,取下PCB测试一切正常。分析后问题集中到调速旋钮上面,但是旋钮只是一个弱电信号,调节到底就是最低速,到顶就是最高速,没办法出现失控到极限速度的现象。

    测试过程中还专门用可调电阻去模拟,知道一个偶然的机会把中间引脚断开了~~故障重现。

    所以问题出现的原因是结构上不平衡导致旋钮受力,中间脚悬空。但这并不是根本原因,根本原因却是程序上在PID速度控制时缺少一句对最高速的限制,正常情况下会稳定在最高速,但是出了故障以后就跑飞了。

延庆川北小区45孙老师 收卖废品垃圾破烂炒股 废品孙

    其实不良现象还有很多很多,所有的不良品最终都会送到维修,所以维修成为一个十分锻炼工程师对问题分析能力的地方,也同时能够发现很多前人的设计缺陷,这样就可以让自己在未来的设计道路上少走一些弯路。

    所以同学们,如果你想成为一个优秀的工程师,可以先去维修锻炼锻炼吧。

二、为什么单片机的I/O口需要驱动

为什么单片机的I/O口需要驱动呢?这个问题需要从I/O口的电气特性上进行解释。

    首先,给出单片机典型的I/O口,即P1口电气结构图,如图所示。P1口通常是作为通用I/O口使用,不需要多路转换电路MUX。其输出级电路内部有上拉电阻,与场效应管共同组成输出驱动电路。因此,P1口作为输出时,不需要再外接上拉电阻,而当P1口作为输入口使用时,仍然需要先向锁存器写“1”,截止场效应管。

    内部上拉电阻阻值很大,经过测量大致在330KΩ左右,而内部电源Vcc仅仅+5V,这样以P1.X高电平驱动发光二极管为例,场效应管截止,相当于Vcc通过330KΩ的电阻向二极管提供电流,5/330*10-3=0.015mA,而二极管的点亮电流为5mA至10mA,这就说明单片机的端口只是驱动TTL电平,不提供或提供很小的驱动电流,所以在带负载时,单片机应当在I/O口加上驱动芯片。

五、为什么电路板上需要喷漆?-1

昨天看了一个抢救掉海里的iphone的视频,想起了这个

什么是三防漆?

三防漆是一种特殊配方的涂料,用于保护线路板及其相关设备免受环境的侵蚀。三防漆具有良好的耐高低温性能;其固化后成一层透明保护膜,具有优越的绝缘、防潮、防漏电、防震、防尘、防腐蚀、防老化、耐电晕等性能。

在现实条件下,如化学、震动、高尘、盐雾、潮湿与高温等环境,线路板可能产生腐蚀、软化、变形、霉变等问题,导致线路板电路出现故障。

三防漆涂覆于线路板的表面,形成一层三防的保护膜(三防指的是防潮、防盐雾、防霉)。

在诸如含化学物质(例如:燃料、冷却剂等)、震动、湿气、盐喷、潮湿与高温的情况下未使用三防漆的线路板可能被腐蚀、霉菌生长和产生短路等,导致电路出现故障。使用三防漆可保护电路免受损害,从而提高线路板的可靠性,增加其安全系数,并保证其使用寿命。

另外,由于三防漆可防止漏电,因此允许更高的功率和更近的印制板间距。从而可满足元件小型化的目的。

三防漆工艺的规范和要求

喷漆要求

  • 喷漆厚度:漆膜厚度控制在0.05mm-0.15mm。干膜厚度25um-40um。
  • 二次涂覆:为确保高防护要求产品的厚度,可等漆膜固化后进行二次涂覆(根据需求确定是否进行二次涂覆)。
  • 检查修复:目测检查涂覆后的电路板是否达到质量要求,并针对问题进行修复。如:插针及其它保护区沾三防漆,可用镊子夹脱脂棉球或干净棉球蘸洗板水将其擦洗干净,擦洗时注意不可将正常漆膜洗掉。
  • 元器件更换:漆膜固化后,如要更换元件器,可按如下操作:用电铬铁直接焊下元件,然后用棉布蘸洗板水清洁焊盘周围物质;焊接替代元器件;固用刷子蘸三防漆刷涂焊接部位,并使漆膜表干固化。

操作要求

  • 三防漆工作场所要求无尘清洁,无灰尘飞扬,一定要有良好的通风措施,并禁止无关人员进入。
  • 操作时要佩戴好口罩或防毒面具、橡胶手套、化学防护眼镜等防护器具,以免伤害身体。
  • 工作完毕后,要及时清洗使用过的工具,并将装有三防漆的容器封闭、盖严。
  • 对电路板应做好防静电措施,不可将电路板重叠放置,涂覆过程,电路板要水平放置。

质量要求

  • 电路板表面不能有流漆,滴漏现象,毛刷涂漆时注意不可滴漏到局部隔离的部分。
  • 三防漆层应平整、光亮、薄厚均匀,将焊盘、贴片元件或导体表面保护好。
  • 漆层表面和元件不能有气泡、针孔、波纹现象、缩孔、灰尘等缺陷和外来物,无粉化、无起皮现象,注意:漆膜未表干前,不可随意碰触漆膜。
  • 局部隔离的元件或区域不可涂覆三防漆。

不可涂覆三防漆的部分和器件

  • 常规不可涂覆器件:漆大功率散热器,散热片,功率电阻,大功率二极管,水泥电阻,拔码开关、电位器(可调电阻),蜂鸣器,电池座,保险丝座,IC座,轻触开关,继电器等类型的插座、排针、接线端子及DB9、插式或贴片式发光二极管(非指示作用)、数码管,接地螺丝孔。

       由图纸规定的不可使用三防漆的部分和器件。

  • 由《不可三防元件(区域)目录》明细中的规定不可使用三防漆的器件。

规定中的常规不可涂覆器件需进行涂覆作业的,可由研发部门指定要求或图纸标注进行三防涂覆即可涂覆。

 三防漆喷涂工艺的注意事项如下

  • PCBA必须做有工艺边且宽度不能小于5mm,方便上机走轨道。
  • PCBA板长宽最大限度为410*410mm,最小限度为10*10mm。
  • PCBA贴装的元器件高度最高限度为80mm。

  • PCBA上元器件喷涂区域与非喷涂区域最小距离为3mm。
  • 彻底的清洗可确保腐蚀性的残余物被完全清除,并使三防漆很好地粘着在线路板表面。漆厚度0.1-0.3mm之间为宜。烘板条件:60°C,10-20分钟。
  • 在喷涂的过程中,有些元器件是不可以喷涂的,比如:大功率带散热面或散热器元件、功率电阻、功率二极管、水泥电阻、拨码开关、可调电阻、蜂鸣器、电池座、保险座(管)、IC座、轻触开关等。

电路板三防漆返修介绍

电路板需要返修时,可以将电路板上的昂贵元件单独取出来,丢弃其余部分。但更常用的方法是 —— 去除电路板上全部或局部位置的保护膜,逐一更换损坏的元器件。

去除三防漆保护膜时,要确保不会损害元件下面的基板、其他电子元器件、返修位置附近的结构等。而保护膜的去除方法,主要包括:使用化学溶剂、微研磨、机械方法和透过保护膜拆焊。

  • 使用化学溶剂是最常用的去除三防漆保护膜的方法,它的关键在于要去除的保护膜的化学性质和具体溶剂的化学性质。
  • 微研磨是利用喷嘴喷出的高速粒子,“研磨”掉电路板上的三防漆保护膜。
  • 机械方法是最容易的去除三防漆保护膜的方法。透过保护膜去焊是先在保护膜上开一个排放孔,让熔融的焊锡能够排出。

.

六、为什么电路板上需要喷漆?-2

判断线路或器件带不带电

    数字的交流电压挡很灵敏,哪怕周围有很小的感应电压都可以有显示。根据这一特点,可以当作测试电笔用。用法如下:将万用表打到AC20V挡,黑表笔悬空,手持红表笔与所测路线或器件相接触,这时万用表会有显示,如果显示数字在几伏到十几伏之间(不同的万用表会有不同的显示),表明该线路或器件带电,如果显示为零或很小,表明该线路或器件不带电。

区分供电线是火线还是零线

第一种方法:

    可以用上面的方法加以判断:显示数字较大的就是火线,显示数字较小的就是零线。这种方法需要与所测量的线路或器件接触。

第二种方法:

    不需要与所测量的线路或器件接触。将万用表打到AC2V挡,黑表笔悬空,手持红表笔使笔尖沿线路轻轻滑动,这时表上如果显示为几伏,表明该线是火线.如果显示只有零点几伏甚至更小.则说明该线是零线。这样的判断方法不与线路直接接触.不仅安全而且方便快捷。

寻找电缆的断点

    当电缆线中出现断点时,传统的方法是用万用表电阻挡一段一段地寻找电缆的断点,这样做不仅浪费时间,而且会在很大程度上损坏电缆的绝缘。利用数字万用表的感应特性可以很快地寻找到电缆的断开点。

    先用电阻挡判断出是哪一根电缆芯线发生断路.然后将发生断路的芯线的一头接到AC220V的上,随后将万用表打到AC2V挡的位置上,黑表笔悬空,手持红表笔使笔尖沿线路轻轻滑动,这时表上若显示有几伏或零点几伏(因电缆的不同而不同)的电压,如果移动到某一位置时表上的显示突然降低很多,记下这一位置:一般情况下。断点就在这一位置的前方10~20cm之间的地方。

    用这种方法还可以寻找故障电热毯等电阻丝的断路点。

测量UPS电源的频率

    对于UPS电源来说.其输出端的电压的稳定性是重要参数,其输出的频率也很重要。但是不能直接用数字万用表的频率挡去测量,因为其频率挡能承受的电压很低.只有几伏。

    这时可以在UPS电源的输出端接一220V/6V或220V/4V降压变压器,将电压降低,而不改变电源的频率,然后将频率挡与变压器的输出相接,就可以测量出UPS电源的频率。

 .

七、继电器的使用细节

继电器的应用,相信大家都知道,在电路中只要给它供电、断电也就可以工作了。

然而,它的应用细节,不知道大家有没注意 。下面谈谈我的观点。

#现在流行的接法,如图

图中,继电器的线圈经过Q1作为开关,使其导通与断开。D1作为续流,消耗线圈中的能量。

#继电器的特点

1、吸合电流大于释放电流

2、保持电流小于吸合电流、大于释放电流

以上两点均为继电器的“通病”,大家可以做一下实验,或看一看说明书。

#流行电路的优点及缺点

大家知道,继电器的线圈相当于电感,它的电流不能突变。在释放时,Q1截止瞬间,线圈将仍保持原来的电流大小,如果不接入D1这个二极管,产生的电压-----理论上是无穷大的(在外电路负载为无穷大时),流行电路中的D1的接入,给线圈中的能量提供了释放的通道。

然而,假如(理论上)二极管为理想的,即它只单向导通而没有任何功率消耗,那么,在继电器释放时,线圈中的电流将一直保持吸合时的最大电流(同时假如线圈为理想的),这种情况将使继电器无法释放。

实际中的二极管及线圈都不是理想的,所以,它是可以释放的。继电器的吸合到释放是由线圈中的电流决定的,如果二极管及线圈的等效电阻(直流)很小,那么它的释放时间将很长,反之,则较短。

由此看,流行电路的优点是提供了Q1截止时的能量释放通道;其缺点是,释放时间还有进一步缩短的可能。

#其它接法

曾见过象下图中电路,也曾见过象下图中没有二极管的接法,这些接法都考虑到了抑制开关Q1截止时的反向电压,但没有考虑到释放时间问题。

#建议接法 

1、加入电阻R1,使能量释放快一些。

上图中,线圈在Q1关断时,能量主要消耗在R1上,使继电器可以快速降到释放电流。

R1的选择,由Q1的最高反压、线圈工作电流两者决定,电阻越大,释放时间越短。---- 计算就不说了吧。

2、减小继电器保持时的功耗。

大家知道,继电器吸合时需要较大的电流,而保持吸合状态则不需要和吸合时的电流一样。

下图接入R1及C1将明显减小继电器的保持功耗。在继电器吸合前,C1已充电至供电电压,吸合的瞬间将由C1为继电器供电,以保障吸合所需的大电流。当吸合后,供给线圈的电流来自R1,它将电流限制到较小状态。

http://www.dtcms.com/a/313520.html

相关文章:

  • io_destroy系统调用及示例
  • 【AI】文档理解
  • 关于assert()函数,eval()函数,include
  • Java中手动床架一个线程池
  • 【OD机试题解法笔记】文件缓存系统
  • 第 10 篇:深度学习的“军火库”——CNN、RNN与Transformer,AI如何看懂世界?
  • pod的创建流程
  • [Linux入门] 从 iptables 到 nftables:初学者入门指南
  • 大数据之路:阿里巴巴大数据实践——元数据与计算管理
  • 【分析学】Hilbert 空间的分离性
  • 分布式事务Seata AT模式设计分析篇
  • 41.安卓逆向2-frida hook技术-过firda检测(五)-利用ida分析app的so文件中frida检测函数过检测
  • 关于Manus AI与多语言手写识别的技术
  • Linux驱动学习(六)一些函数
  • 【canvas】
  • 从WebShell 与 ShellCode 免杀技术 打造适合自己的免杀技术链
  • 设计模式 - 组合模式:用树形结构处理对象之间的复杂关系
  • 攻防世界-web-csaw-mfw
  • 【C++】封装,this指针
  • C++高阶笔记第四篇:STL-函数对象
  • 【Leetcode】2106. 摘水果
  • Yakit热加载魔术方法模版插件语法JSRpc进阶调用接口联动
  • 【Bluedroid】btif_av_handle_event 流程源码解析
  • 更换KR100门禁读头&主机
  • UART串口常用库函数(STC8系列)
  • LLM大模型开发-SpringAI:ChatClient、Ollama、Advisor
  • greenfoot主要api
  • 广东省省考备考(第六十五天8.3)——判断推理:图形推理(数量规律题目总结)
  • 使用C++实现日志(3)
  • sqli-labs:Less-23关卡详细解析