今天马克笔设计留学的程老师继续为大家带来关于Arduino的知识,介绍一下电路图软件Fritzing。
Fritzing是一款支持多国语言的电路设计软件,有四种视图,分别是——面包板、原理图、PCB和Code。用鼠标单击就能够切换。其中,对于前三种视图(面包板、原理图和PCB)而言,无论你在其中的哪一种进行电路设计,软件都会自动化同步其他两种视图,还可以生成制版厂生产所需要的Greber文件、PDF *** 和CAD格式文件。Fritzing提供了非常多的电子元件模型,在这几个功能区中我们可以使用逼真的电子元件模型快速地搭建属于自己的创意电路。
虽然中文版软件的上方面板菜单栏是中文,但是上方面板中的部分下拉列表、元件库中的分类、各个元件和指示栏的提示信息都是英文的,所以学好英语很重要!!!
接下来,就以软件自带的Arduino Uno中的Analog Input Potentiometer,即“通过使用模拟输入函数读取电位器输入的电压值”为例,展示一下这四种视图的面板界面。
1.面包板视图
(1)例子中默认:红线接电源;黑线接地。
(2)还可以选中某根连线后在右侧的下方的“指示栏”中修改其颜色。
2.原理图视图
3.PCB视图
关于PCB,我来简单介绍一下:
PCB( Printed Circuit Board),中文名称为印制电路板,从名字便能推断出来它是一种采用电子印刷术 *** 出来的电路板。它是电子元器件的支撑体,也是电子元器件电气连接的提供者,几乎每种电子设备,小到电子手表、计算器,大到计算机、通讯电子设备、 *** *** ,只要有集成电路等电子元器件,都要使用PCB(印制电路板)。
4.Code视图
在Code视图的右下方还可以选择编程所用的平台和相应的板子,进行上传等 *** 作。
界面右侧的元件区是比较重要的一部分,我们在连接电路的时候,直接在这个面板找到需要的元件拖拽到工作区就可以了,有时候一些特殊的元器件在右边的库中找不到,那我们就需要去Google里下载。下载完成后,我们直接拖拽到工作区就可以直接连线使用了。
下面我们以电阻为例,看一下面板中的参数。其指示栏中包含了“位置”、“旋转角度”、“针脚距离”、“电阻值”等多个属 *** 可供更改。除此之外,为了满足不同知识基础使用者的需求,以下图为例,R2下方的三个图标,分别是该电阻元件在“面包板视图、原理图视图、PCB视图”中的 *** 。
下面我来说一下Fritzing使用过程中的快捷键:
1. 鼠标滚轮:放大/缩小视图比例;
2. Ctrl+鼠标滚轮/Alt+鼠标滚轮:缓慢且小范围的上下移动视图界面;
3. Shift+鼠标滚轮:快速且大范围的上下移动视图界面;(以上几种有关滚轮使用快捷方式是可以通过点击上方介绍的“编辑——参数设置——改变滚轮属 *** ”按钮进行更改的。)
4. 按住Shift键连线可以画出直线。
今天的内容到这里就结束了,Fritzing肯定还有许多“隐藏功能”待被挖掘,期待大家继续探索Fritzing的各种使用技巧。
文章作者:程雅秋
英国皇家艺术学院产品设计硕士
擅长产品服务 *** 设计、用户体验设计和硬件Arduino交互
在电路中谈正负极的时候,一般是指电源的正负极,而且是直流电的正负极。直流供电的电路,其电源一般分为单电源供电,包括电源正和电源地;双电源供电,包括电源正和电源负。在区分电路中正负极的时候可以通过以下几种 *** 来判断。
1、根据电路板的丝印来确定正负极
工程师在设计PCB时,都会对接口部分的针脚定义用丝印标识好,对电源正负极来说,一般会用V+和GND来区分电源的正负极。所以,首先看板子上的丝印,通过板子上的丝印内容可以了解到很多信息,正确理解电路板的丝印信息非常重要。如下图所示,V+所表示的就是正极,GND就是电源地。
2、根据极 *** 元器件来确定正负极
极 *** 元器件是有极 *** 的,在使用时不能接反。常用的有极 *** 的元器件有电解电容、二极管等。所以通过有极 *** 的元器件可以确定电路的正负极。以电解电容为例,其正极一定要接电源正,负极一定要接GND,识别对了电容的引脚也就能确定电路的正负极。电容确定正负极如下图所示。
3、根据大面积的覆铜来确定正负极
在设计PCB时为了提高抗干扰能力、降低地线的阻抗,会把地以大面积覆铜的方式实现电气连接,在如果电路板覆铜了,基本都是以GND作为 *** 覆铜的,依次可以判断大面积覆铜的是地线。如下图所示。
4、其他方式来确认正负极
也可以通过芯片的引脚来确认正负极,芯片都是需要供电,有供电引脚,如果知道芯片的引脚顺序也可以区分出电源的正负极,但是这种 *** 有个 *** ,就是只适用于只要一个电源 *** 的情况,如果电路板上有多个电源 *** ,则还需要通过以上 *** 进一步确认。
面包板是一种用于电路实验的器材,上面有很多孔,我们可以将元器件和导线 *** 去,组成我们需要的电路。如果发现电路有错,拔下元件和导线重新 *** 接即可。电路做完后,所有元件还可以拔下来再次使用。
下图,面包板,外侧标有红线和蓝线的整个竖排是分别连在一起的,一般用于接电源。中间每一横排五个孔分别连在一起的,用于 *** 接各种元件。
详细内容,关注公众号后,回复关键字【面包板】即可免费下载哦!!
·end·
铁人叁项
惊喜不断,长按点击关注!
微信号:铁人叁项
往期精彩回顾
*** 务知识
1.最全的 *** 委 *** 支部会议记录格式范例(收藏)
2. *** 政机关公文格式大全
健身知识
1.锻炼“腰腹”是“核心”训练吗?
2.【 *** 解剖】——胸大肌
3.肌肉发力训练对健身效果的影响
大学知识
1.必读书目百年孤独 *** +文字讲解
2.机械设计基础第六版课后习题 *** (杨可桢程光蕴李仲生版)
福利
二级OFFICE模拟软件,回复关键字【二级OFFICE】
录屏软件,回复关键字【录屏】
数据恢复,回复关键字【数据恢复】
爱奇艺, *** ,优酷三平台转MP4,回复关键字【转格式】
《百年孤独》pdf版,回复关键字【百年孤独】
*** 软件
免费看全网 *** *** APP,回复关键字【free】
二级OFFICE模拟 *** APP,回复关键字【未来教育APP】
据说点“在看”的会变更好看▽
大家好,我是李工,创作不易,希望大家多多支持我。今天给大家分享的是:过流保护电路、过流保护电路原理、过流保护电路 *** 、过流保护电路比较器、过流保护电路继电器。
一、过流保护是什么意思?
过电流保护(Over C *** rent Protection)是电流超过预定更大值时的电流保护装置动作。当流过被保护原件的电流超过预设值时,保护装置动作,并利用定时来保证动作的选择 *** ,使断路器跳闸或发出报警信号。
许多电子设备都有额定电流。一旦设备超过额定电流,就会烧坏设备。因此,这些设备都做了一个电流保护模块,当电流超过设定电流时,设备自动 *** 保护设备,这就是过流保护。比如电脑主板上的USB接口,USB过流保护一般都要保护主板不被烧毁。
一种具有过流保护功能的电源电路
过流保护包括短路保护和过载保护。
- 短路保护的特点是整定电流较大,瞬时动作。电磁式电流脱扣器(或继电器)、熔断器常用作短路保护元件。
- 过载保护的特点是整定电流较小,反时限动作。热继电器、延时型电磁电流继电器常用作过载保护元件。熔断器也常用作过载保护元件,冲击电流不大。
在TN *** 中,当使用熔断器进行短路保护时,熔体额定电流应小于1/4相短路电流。带断路器保护的断路器瞬时动作或短延时动作过电流脱扣器的整定电流应小于单相短路电流的2/3。
二、过流保护电路原理
过电流保护装置通过在电流达到会导致导体温度过度升高或危险升高的值时断开装置来保护电路。大多数过流保护装置对短路或接地故障电流值以及过载情况都有响应。
在电网发生相间短路故障或负载异常增加,或绝缘水平下降的情况下,电流会突然增大,电压会突然下降。过流保护是根据线路选择 *** 的要求来设定电流继电器的动作电流。
当线路中的故障电流达到电流继电器的动作值时,电流继电器根据保护装置的选择 *** 要求动作,选择 *** 地切断故障线路,并通过其触点启动时间继电器。
经过预定延时后,时间继电器触点闭合,断路器脱扣线圈接通,断路器脱扣,故障线路切断,同时信号继电器动作,信号板落下,灯光或声音信号开启。
当出现负载短路、过载或控制电路故障等意外情况时,会导致稳压管中的开关晶体管有过大的电流流过,从而增加管子的功耗并发热。如果没有过流保护装置,一个大功率的开关晶体管可能会损坏。
因此,过流保护常用于开关稳压器。最经济方便的 *** 是使用保险丝。由于晶体管的热容量小,普通保险丝一般不能提供保护。通常使用快速熔断器。这种 *** 的优点是保护容易,但需要根据具体开关晶体管的安全工作区域的要求来选择熔断器规格。这种过流保护措施的缺点是频繁更换保险丝的不便。
一种逆变器过流保护电路
线 *** 稳压器中常用的限流保护和电流切断保护可应用于开关稳压器。但是根据开关稳压器的特 *** ,这种保护电路的输出不能直接控制开关晶体管,而必须将过流保护的输出转换成脉冲指令来控制调制器来保护开关晶体管。
为了实现过流保护,一般需要在电路中串联一个采样电阻,会影响电源的效率,所以多用于小功率开关稳压器。在大功率开关稳压电源中,考虑到功耗,应尽量避免使用采样电阻。因此,过流保护通常转换为过压和欠压保护。
相关电路的 *** 设有保护装置,如下图所示:
过流保护电路
过流保护电路
在比电路布线的 I2t 特 *** 给出的时间更短的时间内切 *** 流,但允许更大负载电流 IB 无限期地流动。
绝缘导体在承载短路电流时的特 *** ,在短路开始后长达 5 秒的时间段内,可大致由以下公式确定:
I2t = k2 S2
这表明产生的允许热量与导体的平方横截面积成正比。
这里:
- t = 短路电流持续时间(秒)
- S = 绝缘导体的横截面积 (mm2)
- I = 短路电流 (A rms)
- k = 绝缘导体常数(k 值在下图中给出)
对于给定的绝缘导体,更大允许电流因环境而异。例如,对于高环境温度(θa1 > θa2),Iz1 小于 Iz2(见下图)。θ 表示“温度”。
过流保护电路
- *** C = 三相短路电流
- *** CB = 额定 3 相,断路器的短路开 *** 流。
- Ir(或 Irth)<1> = 调节的“标称”电流水平;例如,50 A 标称断路器可以调节为具有保护范围,即类似于 30 A 断路器的常规过电流脱扣水平。
三、过流保护类型
- 复合型:多种保护串联。
- 限功率型:总功率限输出
- 重绕型:初始电流恒定,电压下降到一定值电流开始下降。
- 打型:过流,电流电压降到0,然后开始反复上升。
- 恒流:恒流、压降
- 几种过流保护方式的比较
下图列举了 4 种 过流保护电路 *** :
4 种 过流保护电路 ***
四、过流保护电路 ***
1、过流保护电路比较器
过流保护电路种类繁多,电路的复杂 *** 取决于保护电路在过流情况下的反应速度。下面这个电路使用很常见的运算放大器构建一个简单的过流保护电路。
该电路将具有可调节的过流阈值,并且还将具有故障时自动重启功能。由于这是一个基于运算放大器的过流保护电路,
1)LM35运算放大器
这里使用了通用运算放大器LM358,作为驱动单元。在下图中,显示了 LM358 的引脚图。
LM358 运算放大器引脚图
2)RF540N mos管
在本项目中,使用了N 沟道 MOSFET IRF540N,如果负载电流大于 500mA,建议使用合适的 MOSFET 散热器。对于下面这个电路,MOSFET 没有使用散热器。下图是 IRF540N 引脚图 的表示。
RF540N mos管
3)LM7809 线 *** 稳压器
为了给运算放大器和电路供电,使用了LM7809 线 *** 稳压器。这是一款具有宽输入电压额定值的 9V 1A 线 *** 稳压器。引脚排列如下图所示:
LM7809 线 *** 稳压器
4)过流保护电路比较器元器件清单
- 面包板
- 电源 12V(更低)或根据电压要求
- LM358
- 100uF 25V
- IRF540N
- 散热器(根据应用要求)
- 50k 装饰锅
- 1k 电阻,容差为 1%
- 1Meg 电阻
- 100k 电阻,容差为 1%。
- 1ohms电阻,2W(2W更大1.25A负载电流)
- 面包板电线
5)过流保护电路比较器
一个简单的过流保护电路可以通过使用运算放大器来感应过流来设计,并根据结果,我们可以驱动 Mosfet 断开/连接负载与电源。相同的电路图很简单,如下图所示:
过流保护电路工作
6)过流保护电路比较器工作原理
从电路图中可以看出,MOSFET IRF540N 用于在正常和过载情况下控制负载为 ON 或 OFF 。但在关闭负载之前,必须检测负载电流。这是通过使用分流电阻 R1来完成的,它是一个 2 瓦额定值的 1 欧姆分流电阻,这种测量电流的 *** 称为分流电阻电流感应.
在 MOSFET 导通状态期间,负载电流通过 MOSFET 的漏极流向源极,最后通过分流电阻流向 GND。根据负载电流,分流电阻产生的电压降可以使用欧姆定律计算。
因此,我们假设,对于 1A 的电流(负载电流):
分流电阻上的电压降为 1V,因为 V = I x R (V = 1A x 1 Ohm)。
因此,如果将此压降与使用运算放大器的预定义电压进行比较,我们可以检测到过流并改变 MOSFET 的状态以切断负载。
在该电路中,运算放大器 LM358 被配置为比较器。根据原理图,比较器比较两个值。之一个是分流电阻上的压降,另一个是使用可变电阻或电位计 RV1 的预定义电压(参考电压)。RV1 充当分压器。分流电阻上的压降由比较器的反相端检测,并与连接在运算放大器同相端的电压基准进行比较。
因此,如果检测到的电压低于参考电压,比较器将在输出端产生一个接近比较器 VCC 的正电压。但是,如果检测到的电压大于参考电压,比较器将在输出端产生负电源电压(负电源连接到 GND,因此在这种情况下为 0V)。该电压足以打开或关闭 MOSFET。
2、过电流保护电路继电器
在过电流继电器或o/c 继电器中,动作量仅为电流。继电器中只有一个电流动作元件,不需要电压线圈等来构成这种保护继电器。
1)过电流继电器的工作原理
在过电流继电器中,基本上会有一个电流线圈。当正常电流流过这个线圈时,线圈产生的磁效应不足以移动继电器的运动元件,因为在这种情况下,约束力大于偏转力。但是当通过线圈的电流增加时,磁效应增加,并且在一定程度的电流后,线圈磁效应产生的偏转力,越过约束力。结果,移动元件开始移动以改变继电器中的触点位置。过电流继电器虽然有不同的类型,但过电流继电器的基本工作原理大致相同。
2)过电流继电器的种类
- 瞬时过电流继电器
- 定时限过电流继电器
- 反时限过电流继电器
反时限过流继电器或简单的反相过流继电器又细分为反时限定时(IDMT)、极反时限、极反时限过流继电器或OC 继电器。
3)瞬时过电流继电器
瞬时过电流继电器的结构和工作原理非常简单。
在此,磁芯通常由电流线圈缠绕,一块铁被继电器中的铰链支撑和 *** 弹簧安装,当线圈中没有足够的电流时,常开触点保持打开状态。当线圈中的电流超过预设值时,吸引力足以将铁片拉向磁芯,从而使无触点闭合。
我们将继电器线圈中电流的预设值称为吸合设定电流。该继电器称为瞬时过电流继电器,理想情况下,一旦线圈中的电流高于启动电流,继电器就会工作。没有应用故意的时间延迟。但总是有一个内在的时间延迟,我们实际上无法避免。实际上,瞬时继电器的 *** 作时间大约为几毫秒。
瞬时过电流继电器
瞬时过电流继电器
4)定时限过电流继电器
定时限过电流继电器是通过在跨接电流值后应用有意的时间延迟来创建的。可以调整定时限过流继电器以在其启动后的准确时间发出跳闸输出。因此,它具有时间设置调整和拾取调整。
定时限过电流继电器
5)反时限过电流继电器
反时限过电流继电器是任何感应式旋转装置的自然特征。这里,如果输入电流越大,设备旋转部分的旋转速度就越快。换言之,工作时间与输入电流成反比。机电感应盘式继电器的这种天然特 *** 非常适用于过流保护。如果故障严重,将更快地清除故障。虽然时间反演特 *** 是机电感应盘式继电器所固有的,但在基于微处理器的继电器中也可以通过适当的编程来实现相同的特 *** 。
反时限过电流继电器
6)反定时限过流继电器或 IDMT O/C 继电器
在过电流继电器中无法实现理想的反时限特 *** 。随着 *** 中电流的增加,电流互感器的次级电流按比例增加。次级电流进入继电器电流线圈。但是当 CT 饱和时,CT 次级电流不会随着 *** 电流的增加而进一步成比例地增加。
从这一现象可以看出,从特技值到一定范围的故障等级,反时限继电器表现出特定的反时特 *** 。但是在这个级别的故障之后,CT变得饱和,并且继电器电流不会随着 *** 故障级别的增加而进一步增加。
由于继电器电流没有进一步增加,因此继电器的 *** 作时间不会进一步减少。我们将此时间定义为最小 *** 作时间。因此,特 *** 在初始部分是相反的,随着电流变得非常高,它趋于确定的最小 *** 作时间。这就是为什么继电器被称为反向确定最小时间过电流继电器或简称IDMT 继电器。
以上就是关于过流保护电路的知识,希望大家多多支持我,得点赞,关注,有问题欢迎在评论区留言,大家一起讨论。
参考来源:apogeeweb.net+circuitdigest+electrical4u。
*** 来源于 ***
树莓派 Pico具有许多有趣且独特的功能,但没有 *** 功能,当然,这只是暂时的不便,而且可以肯定的是,在Pi Day周末,看到为Pico和RP2040发布了USB以太网和以太网PHY支持。
Raspberry Pi Pico和RMII以太网PHY
PHY支持它围绕lwIP堆栈构建,利用RP2040的PIO,DMA和双核功能在软件中创建以太网MAC堆栈。 该项目当前支持基于RMII的以太网PHY模块,例如Microchip LAN8720。
可以在全球速卖通上以约1.50美元的 *** 找到LAN8720的分线板。
这意味着现在可以将 *** 为2美元的微 *** 连接到成本不到2美元的以太网突破口,并将其连接到互联网。
从源头建造
如果尚未设置和运行Raspberry Pi Pico工具链,则应首先设置C / C ++ SDK,然后,需要从GitHub获取该项目以及lwIP堆栈。
在继续之前,请确保已设置好PICO_SDK_PATH。 例如,如果在树莓派上构建东西,并且已经运行pico_setup.sh脚本,或者按照入门指南中的说明进行 *** 作,则可以将PICO_SDK_PATH指向
然后,可以继续构建库和示例应用程序。
如果一切顺利,应该在build / examples / httpd中有一个名为pico_rmii_ethernet_httpd.uf2的UF2文件。 现在,可以按照常规方式将此UF2文件加载到Pico上。
抓住树莓派 Pico板和Micro USB电缆,将电缆 *** 树莓派或笔记本电脑,然后在将Micro USB电缆的另一端 *** 开发板的同时,按住Pico上的BOOTSEL按钮, *** 板卡后,然后松开按钮。
桌面上将弹出一个名为RPI-RP2的磁盘卷,双击将其打开,然后将UF2文件拖放到其中,Pico现在正在运行Web服务器。 但是,直到我们将其连接到我们的以太网分线板之前,它并没有多大用处。
在面包板上接线
LAN8720的最常见(也是更便宜)的分接板不是面包板友好型的,尽管可以找到一些板子,所以可能需要在面包板中抓一捆公对母跳线 。
LAN8720分支连接到面包板上的树莓派Pico(带有复位按钮)
然后将分线板连接到树莓派Pico,这些板上的大多数标签似乎都贴好标签,左侧标签对应于突破排针的之一行,基于RMII的LAN8720分支板上的引脚和Pico之间的映射应如下:
物理引脚号,RP2040引脚和LAN8720分支之间的映射
这些引脚是库的默认引脚,可以在软件中更改。
接线完毕后,将Pico *** 以太网,并通过USB *** 树莓派或笔记本电脑。 除了为Pico供电之外,还可以通过USB串口查看一些调试信息,打开一个终端窗口并启动minicom。
只要路由器分发IP *** ,就应该在minicom窗口中看到类似这样的信息,表明Pico已使用DHCP捕获了IP *** :
如果打开浏览器窗口,然后在 *** 栏中输入路由器已分配给Pico的IP *** ,如果一切顺利,则应该看到默认的lwIP索引页:
查看从Raspberry Pi Pico提供的网页
更改网页
事实证明,更改Pico提供的网页非常容易,可以在lwIP Git子模块的HTTP应用程序中找到带有默认lwIP页面的“文件 *** ”。
应该在此处使用自己喜欢的编辑器修改index.html文件,之后,需要将文件 *** 目录移到适当的位置,然后可以使用关联的 *** kefsdata脚本将其重新打包。
运行此脚本将在当前目录中创建一个fsdata.c文件,需要将此文件上移到父目录,然后重建UF2文件。
如果一切顺利,应该在build / examples / httpd中有一个名为pico_rmii_ethernet_httpd.uf2的新UF2文件,然后可以像以前一样再次将该UF2文件加载到Pico上。
更新的网页来自我们的树莓派Pico
重新启动时,等待一下,直到Pico再次获取IP *** ,然后再次打开浏览器窗口,然后在 *** 栏中输入分配给Pico的IP *** ,现在应该会看到一个更新的网页。
可以返回并编辑Pico提供的页面,然后构建整个站点,请记住,每次重新构建UF2之前,都需要重新构建fsdata.c文件。
目前的局限 ***
当前的实现有两个 *** 。 RP2040使用RMII模块的参考时钟在低于50MHz的频率下运行,而lwIP堆栈是使用NO_SYS编译的,因此既未启用Netcon API也未启用Socket API。 最后,将链接速度设置为10 Mbps,因为TX在100 Mbps时当前存在问题。
接下来?
尽管Sandeep的示例使用了lwIP Web服务器,但是还有许多其他库应用程序示例可供借鉴和使用,包括TFTP和MQTT示例应用程序,除此之外,lwIP是一个TCP / IP堆栈,通过TCP可以执行的任何 *** 作,现在都可以在Pico中执行。
在Raspberry Pi论坛上可以找到对Pico开发的支持,还有一个(非官方的)Discord服务器,对文档的反馈应作为问题发布到GitHub上的pico-feedback存储库中,或直接发布到它所关注的相关存储库中。
所有文档以及许多其他帮助和链接都可以在“入门”页面上找到。 如果不知道将要发生的情况,可以随时从Pico中找到它:要访问该页面,只需按住Pico上的BOOTSEL按钮,将其 *** 笔记本电脑或Raspberry Pi中,然后松开该按钮 ,继续并打开RPI-RP2卷,然后单击INDEX.HTM文件。
自学单片机第二十七篇:矩阵按键的硬件测试我们继续来说矩阵按键的问题,这次是用在实际电路中的。在 *** 中我们没有发现问题,但是文章最后我提出了,这个电路在实际应用中一定是存在问题的,那么问题在哪里呢?
这是我们分析的电路。
前几篇我们也对硬件进行了测试,我们可以发现, *** 没有问题,但是凡是按键开关,在实际应用中,都会出现按键按下响应不稳定的情况,我们称之为抖动,在实际应用中,抖动的问题,是一定存在的,无论电路优化的多么完美,那么我们在现在这个阶段,如何处理呢,依然是采用软件延时消抖 *** 。
对这个 *** 不是很熟悉的,可以翻阅前期文章,我们此处不再详细展开。就直接使用了。抖动的发生,是我们检测到按键的变化开始的,也就是检测到按键发生改变,接着就要消抖了。
P1=0xef; //第四行1110 1111
if(P1!=0xef){key *** ();}
这是我们按键检测的代码,之一行代码我们对行进行了置零,然后检测是哪一列发生了改变。当我们检测到按键被按下时,就进入了判断语句,也就是这个时候,需要进行按键的消抖了。为了方便理解,我先把消抖写在外边。
原本我们判断后就会直接进行按键的计算输出,但是这样就会造成一次按下,却输出了三次以上的结果,在有些场合是不行的,会触发误动作,所以我们就需要消抖 *** 作。我们这里采用的是延时消抖的 *** ,在扫描时,先让行置零,然后判断置零后是否有按键按下,如果有按键按下,那么此时P1的端口值就会与设定的存在不同,通过判断不同,来进入判断语句,为了防止抖动影响,我们先让按键的键值保存起来,然后等待一段时间,接着判断当前的P1值与之前保存的是否一致,如果一致,就认为按键按下了,并且已经稳定,然后就可以执行按键处理程序了,处理完,为了防止按键的连续重复 *** 作,我们需要对按键的抬起进行 *** ,当检测到按键已经抬起,此时缓存值会与P1不同,就会跳出循环,就不会出现长按按键,反复检测开关,导致连续动作。
好的理论有了,我们进行下 *** 。先进行软件 *** ,出现错误方便修改。
软件 *** 打开后,导入程序,然后打开运行,首先出现的界面是所有端口都是高电位,P1的低四位在不断的扫描。接着我们按下任意一个按键,按三次看下结果。
可以看到,上方的二极管显示的是0000 0011,转译成十进制就是3.我们为了验证测试下多次多个按键按下,就选择中间八个按键依次按下。
此时显示的是000 1011,翻译成十进制就是8+2+1=11,我们 *** 作了11次,显示11,说明 *** 没有问题,至少证明程序可以实现功能,接下来我们使用电路板测试下。
在程序中运行完美的程序,到了我的电路板上就失控了。
完全没有反应好不,什么情况?难道要翻车?我一个好好的教程要变成一个维修课程了。这是我遇到的之一个故障,目前不清楚是硬件还是软件故障,程序是两天前写的,外出两天回来,之一次下载就这样,我相信我的硬件应该不会有问题,因为矩阵按键很简单,就是按键两端连上线,然后连接到单片机上就可以了,而LED小灯就更简单了。那么消除故障的过程就这么猝不及防的开始吧,因为后期 *** 过程中必然会遇到更多的问题。趁着小孩睡觉了,我来看看故障究竟出在哪里。
我们比较方便的就是去判断软件的问题,因为程序出现问题的概率远远大于硬件。首先我先写个测试的文件。新建一个工程吧。
语句就尽可能简单,主要测试延时和按键响应问题。来判断是否是硬件出了毛病。我会挨个判断四个按键。
编译后下载到单片机中。呦呵,没有反应!难道是我太急躁,代码有问题?我把代码修改的简单些。
嗯,这次基本就可以判断是代码的问题了,按下按键,LED就熄灭了。接下来是四个按键测试下。
这是四个按键,我先下载看下效果。
哎呦,不错哦,说明按键是没有毛病的。那就看之前的代码了,检查代码也是个技术活。我们的测试文件中没有体现出按键输出的处理函数,这次就添加上按键处理函数。函数从代码上没有看出有什么问题,通过循环判断出符合哪一个,然后执行P0加一,然后返回,看似问题不在这里。
好吧,程序下载好之后,确实没有反应了。
if(key0==0)
{delay(3);if(key0==0)
{key *** ();while(key0==0);}}
这是判断的代码,我把key4置0了,然后再把key0置零,这时P1》01110111》0x77.
按照道理上说,此时应该可以执行才对,为什么?
我们再把代码写的简单些,看是不是我们程序的流程存在瑕疵。
再次编译后下载到单片机中测试。我的老天,还是不行,问题不应该在代码,这个代码是不会有问题的,我要回过头查下硬件了,先测试下当我按下P1.0时是否有0电位输入。
这是按键没有按下时的电压。我用的是18650电池,电压是3.9V正常的。
按下P1.0就变成了0V,这说明问题不在此处。
哎呦,电压也没有问题呢,什么情况?我检查下电路,首先是电源电路,对所有电源进行重现排查,然后重新 *** 紧。再次测试下,然后好了。
这个问题出在哪里呢?且待我细细分析一番,以免后期同样故障无法排除。
。。。。。。。
嗯,知道问题在哪里了,主要是面包板的问题,因为我们这里近段时间在下雨,估计南方的 *** 们也是如此,希望雨水赶快消停。由于天气潮湿,我的面包板的负极接线头有些锈蚀了,就造成了接触电阻增加,平时点亮单个小灯还好,但是如果电流增加,例如我们做16个按键的扫描,然后8个LED的点亮,就会耗费大量的电流,此时电流的增加,就会造成接触电阻分压增加,继而就会造成单片机电源电压低于3.3V,处于假死状态,然后所有端口就会复位,效果跟按下复位键一样,就是硬件死机了。将 *** 针处理好后,就可以了。此时我们之前的程序重新下载到单片机中,再次检测一下。
指示灯000 1100
指示灯1000 1100
指示灯0100 1100
到这里基本就可以看出来,代码运行正常了。通过这次实际运行测试,我们可以看出,实际的 *** 作可以让我们学习到 *** 无法带来的知识。通过检修,我们可以明白,往往硬件故障都是有原因的,这些原因都隐藏在电流、电压这些数据之中。尽管使用PCB *** 的板子会稳定很多,但是同样你对电路的了解也就会少很多,最多知道这是干什么的,回头就会忘记电路怎么连了。而我们学习单片机的,只写代码是徒有灵魂,就像你知道火箭可以飞到月球,可是不会造,岂不是空谈?总之好的软件工程师,必然不会是硬件小白。
马上放假了,可以多动手练习练习。
互感器、电能表接线和原理讲解!1、电压互感器V/V接法
V/V接法原理图
V/V接法3D示意图
2、电压互感器Y/Y接法
Y/Y接法原理图
Y/Y接法3D示意图
3、电流互感器不完全星型接法
电流互感器不完全星型接法原理图
电流互感器不完全星型接法3D示意图
4、电流互感器星型接法
星型接法原理图(适用10kV以上)
星型接法原理图(适用400V)
星型接法3D示意图(400V)
5、电能表接线示意图
三相三线电能表组合接线示意图
(3*100V电能表+3*100V专变采集终端)
三相四线电能表组合接线示意图
(3*57.7V电能表+3*100V专变采集终端)
三相四线电能表组合接线示意图
(3*220V电能表+3*220V专变采集终端)
特殊说明
400V电流互感器不需要接地,只有10V及以上的电流互感器非极 *** 端才须接地。在接线过程中强烈推荐采用分相接地的方式,而且电流回路与电压回路分开接地。
之前我提了一个关于薄膜电容的问题,如下图所示,电容一端的条纹 *** 什么?
这些都是无极 *** 电容,所以这个条纹不是极 *** 标记。一位读者得回答正确,它 *** 电容卷绕时,卷绕在外层的那一极。我发现现在很少有工程师知道电容一端的条纹 *** 什么,也不知道条纹端和不带条纹端互换带来的不同效果。即使你从来不使用这类电容,了解这些内容也会让你设计的pcb有所不同。这次让我们讨论一下这个话题。
薄膜电容外层的导体 *** 了内层的导体。在一个简单的低通R-C电路中,如图1a所示,电容带条纹的一侧接地,从而 *** 了电磁耦合和电磁干扰。
对于高通R-C电路,如图1b所示,电容两端都没接地。但总体上看,前端驱动呈低阻抗特 *** ,这将不容易受到感应噪声的影响。因此,应该将带有条纹的一端连接至低阻抗侧。
现在来看看积分电路。如图2a所示,积分电路的积分电容由低阻抗的运放驱动,这种连接不容易受到外部干扰的影响。在这个电路中,反向输入端显然是敏感节点,因此带条纹的一端应该连接到运放的输出侧。
图2b所示电路的布局需要考虑更多的内容。C1 和 R1的连接顺序不同则结果也不同。R2和C2也是这样。理论上,不同顺序的连接不会有什么不同,在SPICE *** 的结果也一样,但小体积的R1 和 R2可以靠近反向输入引脚放置。这样可以减少产生天线效应的区域和敏感区的寄生电容(这个寄生电容会影响到 *** 稳定)。大体积的薄膜电容C2跨接在运放输出端和反向输入端之间,带条纹的一端接在运放输出端。
首先,布局需要考虑的是那些对干扰敏感的模拟电路,其中有些干扰源是潜在的。
其次,精心的布局和调整器件的端口可能会提高电路的 *** 能。这里调整器件的端口并不仅仅是对调电容带条纹端口和不带条纹端口的问题。在你的 *** 中还可能有其它大体积的器件会吸收噪声和辐射噪声。当你意识到这点后,你就能有指导 *** 的调整并改进你的PCB布局。
带条纹的电容是个提示,它提示我们还有许多关于电路板接地、信号回路、器件选型和布局的知识需要去了解。许多数据手册上提供了帮助我们优化 *** 能的具体措施。
更多技术文章,请点击了解更多
自制wifi遥控小车!ESP8266实践指南(二)上次带大家利用ESP8266自制了wifi控制的LED点阵屏幕,大家觉得怎么样呢? 手把手教你用wifi控制显示屏!ESP8266实践指南(一)
今天我们来做点更有意思的~ wifi遥控小车!
一、所需材料
- ESP8266 NodeMCU开发板:这次我们使用CP2102芯片的那款NodeMCU,优点是体积更小一点,更适合小车这种体积受限的场景。
- L9110电机控制模块
- 面包板:方便接线
- 两轮小车底盘套装,包含:塑料底盘,电机x2, 轮子x2,万向轮,5号电池盒
- 公对公杜邦线若干
- 5号电池4节
- *** 移动电源一个
二、组装小车
先按照说明书把小车底盘套装组装起来:
然后将ESP8266,L9110固定在面包板上,并按照线路图连接:
实际接线效果大致如图:
固定电池盒和充电宝:
4节串联的5号电池用于给L9110供电,而充电宝用于通过u *** 接口给NodeMCU开发板供电。
一开始,我尝试了直接使用充电宝给NodeMCU开发板供电,然后L9110的VCC接NodeMCU的VIN,GND接NodeMCU的GND来供电。这样的话,简单便捷,不需要两套供电。但是不幸的是,动力电路走开发板的VIN确实会有问题:在电机运转一会儿后,开发板会重启。
于是后来我还是用上了电池盒,用电池盒给L9110供电,正负极分别接VCC, GND就可以了。
在连接好开发板,电机,电源之后,摆放好各个部件,用双面胶固定到位即可。有条件的话,电机的正负电源线建议使用电烙铁和焊锡固定好,防止震动导致松动。
三、上传代码
有关ESP8266的开发环境配置在这里不在赘述,之前没有设置的朋友看这里~ 很简单哦~
将以下代码 *** 到Arduino IDE:
// Simple WiFi-controlled car on NodeMCU and L9110 motor drive board// OrangeZero 零度橙子@头条// so *** ce code modified from Alan Wang@hackster.io#include <ESP8266WiFi.h>#include <ESP8266WebServer.h>// WiFi settings#define WIFI_MODE 1 // 1: AP模式,NodeMCU自身起一个wifi信号;2:SA模式,NodeMCU连上一个已有wifi。推荐使用AP模式#define SSID_AP "NodeMCU_WiFi_Car" // for AP mode#define PASSWORD_AP "12345678" // for AP mode#define SSID_STA "yo *** _wifi_ssid" // for STA mode#define PASSWORD_STA "yo *** _wifi_password" // for STA mode// motor settings#define RIGHT_MOTOR_PIN1 4 // pin 1 of right motor (D2)#define RIGHT_MOTOR_PIN2 5 // pin 2 of right motor (D1)#define LEFT_MOTOR_PIN1 12 // pin 1 of left motor (D6)#define LEFT_MOTOR_PIN2 14 // pin 2 of left motor (D5)#define MOTOR_SPEED 1200 // speed for motorIPAddress local_ip(1 *** , 168, 1, 1); //IP for AP modeIPAddress gateway(1 *** , 168, 1, 1); //IP for AP modeIPAddress subnet(255, 255, 255, 0); //IP for AP modeESP8266WebServer server(80);int car_mode = 0; // set car drive mode (0 = stop)// initializevoid setup() { Serial.begin(9600); Serial.println("NodeMCU Wifi Car"); pinMode(RIGHT_MOTOR_PIN1, OUTPUT); pinMode(RIGHT_MOTOR_PIN2, OUTPUT); pinMode(LEFT_MOTOR_PIN1, OUTPUT); pinMode(LEFT_MOTOR_PIN2, OUTPUT); car_control(); // stop the car if (WIFI_MODE == 1) { // AP mode WiFi.softAP(SSID_AP, PASSWORD_AP); WiFi.softAPConfig(local_ip, gateway, subnet); } else { // STA mode WiFi.begin(SSID_STA, PASSWORD_STA); Serial.print("Connecting to WiFi..."); while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } Serial.println(""); Serial.print("Connected! IP: "); Serial.println(WiFi.localIP()); //the IP is needed for connection in STA mode } // setup web server to handle specific HTTP requests server.on("/", HTTP_GET, handle_OnConnect); server.on("/forward", HTTP_GET, handle_forward); server.on("/backward", HTTP_GET, handle_backward); server.on("/left", HTTP_GET, handle_left); server.on("/right", HTTP_GET, handle_right); server.on("/stop", HTTP_GET, handle_stop); server.onNotFound(handle_NotFound); //start server server.begin(); Serial.println("NodeMCU web server started.");}// handle HTTP requests and control carvoid loop() { server.handleClient(); car_control();}// HTTP request: on connectvoid handle_OnConnect() { car_mode = 0; Serial.println("Client connected"); server.send(200, "text/html", SendHTML());}// HTTP request: stop carvoid handle_stop() { car_mode = 0; Serial.println("Stopped"); server.send(200, "text/html", SendHTML());}// HTTP request: go forwar *** oid handle_forward() { car_mode = 1; Serial.println("Go forward..."); server.send(200, "text/html", SendHTML());}// HTTP request: go backwar *** oid handle_backward() { car_mode = 2; Serial.println("Go backward..."); server.send(200, "text/html", SendHTML());}// HTTP request: t *** n leftvoid handle_left() { car_mode = 3; Serial.println("T *** n left..."); server.send(200, "text/html", SendHTML());}// HTTP request: t *** n rightvoid handle_right() { car_mode = 4; Serial.println("T *** n right..."); server.send(200, "text/html", SendHTML());}// HTTP request: othervoid handle_NotFound() { car_mode = 0; Serial.println("Page error"); server.send(404, "text/plain", "Not found");}// control car movementvoid car_control() { switch (car_mode) { case 0: // stop car digitalWrite(RIGHT_MOTOR_PIN1, LOW); digitalWrite(RIGHT_MOTOR_PIN2, LOW); digitalWrite(LEFT_MOTOR_PIN1, LOW); digitalWrite(LEFT_MOTOR_PIN2, LOW); break; case 1: // go forward *** ogWrite(RIGHT_MOTOR_PIN1, MOTOR_SPEED); digitalWrite(RIGHT_MOTOR_PIN2, LOW); *** ogWrite(LEFT_MOTOR_PIN1, MOTOR_SPEED); digitalWrite(LEFT_MOTOR_PIN2, LOW); break; case 2: // go backward digitalWrite(RIGHT_MOTOR_PIN1, LOW); *** ogWrite(RIGHT_MOTOR_PIN2, MOTOR_SPEED); digitalWrite(LEFT_MOTOR_PIN1, LOW); *** ogWrite(LEFT_MOTOR_PIN2, MOTOR_SPEED); break; case 3: // t *** n left *** ogWrite(RIGHT_MOTOR_PIN1, MOTOR_SPEED); digitalWrite(RIGHT_MOTOR_PIN2, LOW); digitalWrite(LEFT_MOTOR_PIN1, LOW); *** ogWrite(LEFT_MOTOR_PIN2, MOTOR_SPEED); break; case 4: // t *** n right digitalWrite(RIGHT_MOTOR_PIN1, LOW); *** ogWrite(RIGHT_MOTOR_PIN2, MOTOR_SPEED); *** ogWrite(LEFT_MOTOR_PIN1, MOTOR_SPEED); digitalWrite(LEFT_MOTOR_PIN2, LOW); }}// output HTML web page for userString SendHTML() { String html = "<!DOCTYPE html>\n" "<html>\n" "<head>\n" "<title>NodeMCU Wifi Car by OrangeZero</title>\n" "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n" "</head>\n" "<body>\n" "<div ali *** =\"center\">\n" "<h1>NodeMCU Wifi Car by OrangeZero</h1>\n" "<br>\n" "<form method=\"GET\">\n" "<input type=\"button\" value=\"Go forward\" onclick=\"window.location.href='/forward'\">\n" "<br><br>\n" "<input type=\"button\" value=\"Go backward\" onclick=\"window.location.href='/backward'\">\n" "<br><br>\n" "<input type=\"button\" value=\"T *** n left\" onclick=\"window.location.href='/left'\">\n" "<br><br>\n" "<input type=\"button\" value=\"T *** n right\" onclick=\"window.location.href='/right'\">\n" "<br><br>\n" "<input type=\"button\" value=\"Car stop\" onclick=\"window.location.href='/stop'\">\n" "</form>\n" "</div>\n" "<a href='https://profile.zj *** l *** /rogue/ugc/profile/?user_id=4182130004597211'>Copyright 2020 OrangeZero</a>" "</body>\n" "</html>\n"; ret *** n html;}
点击上传按钮,稍等片刻,等待上传完成:
四、开动小车!
到这里我们的小车就 *** 完成了!让我们来发动小车吧~
在打开移动电源的开关,连接好电池盒的正负极之后,稍等片刻,我们就可以搜索到wifi信号:
NodeMCU WiFi Car
*** 连接wifi之后,在浏览器中打开:1 *** .168.1.1
点击相关按钮就可以 *** 纵小车前进,后退,转向,还有停止了~
大家有没有觉得并没有那么难,而且成就感满满的呢~
大家有什么还有什么想要做的物联网或者智能家居项目呢?在下面留言告诉我吧~
我是零度橙子,装机爱好者,科技达人,谷歌认证云计算架构师,大家可以关注我,了解有用有趣的科技知识~
PCB的惨 *** 历,值得工程师借鉴PCB即印刷电路板,是电子电路的承载体。在现代电子产品中,几乎都要使用PCB. PCB设计是电路设计的最后一个环节,也是对原理电路的再设计。一些新的工程师往往低估PCB设计的重要 *** ,将这一即烦琐又费事的工作完全交由技术员去完成。在这里我先讲一个关于PCB设计的故事,由于涉及企业的隐私,故此隐去了真实的地点和企业名称。
故事所涉及的企业是生产 *** 机的一 *** 司。普通按键式 *** 机,其实并不是什么高科技的产品,与早期的拨盘式电子 *** 机相比,它在电路中增加了一块双音频/脉冲拨号控制集成电路,一些产品还增加了免提通话功能,用户使用话机时,如果按下免提按键,无须摘机,就可以接听或者唿出。熟悉话机电路原理的人都知道,免提电路是由“自动收/发控制电路”和“音频功率放大电路”组成,这些电路都有现成的专用IC来实现,原理上没有需要创新设计的地方。
在 *** *** 初期,一些捷足先登的企业,靠生产 *** 机发了大财。我所要说的这家企业通过关系将公司的最新产品送到了北京的某某 *** 家里试用。这种具有免提功能的按键式话机,确实要比当时使用的拨盘话机好用的多。经过一段时间试用, *** 非常满意,答应向有关部门推荐该产品。
可是就在这关键的时刻,一天深夜,这台话机突然鸣叫起来!
没有特别的大事,不会有人胆敢深夜拨打 *** 家里的 *** 。更奇怪的是,摘机接听没人应答,挂机后不一会,话机又继续鸣叫,连续不断。 *** 紧急叫来警卫人员,警卫人员又连夜叫来电信人员,最后才弄明白,原来是话机免提功能自行误触发,导致虚惊一场。
*** 大怒!
话机的推销计划,因此意外事件被延误了好多年时间。事后查明,引起免提误触发的原因是电路的PCB设计 *** ,后来该企业的话机产品,免提按键都被要求改为机械式按键,这样才获得了电信的入网许可。这次事件对企业造成的直接经济损失高达几千万元以上。
一些设计人员认为PCB设计是简单的劳动,使用PROTEL或者其他的软件工具,通过自动布局、自动布线,就可以完成。单面板无法布通,就用双面板,再不行就用多层板,或者设置跳线,短跳线不行就长跳线,再不行就用跨接线,最后总可以布通。
而我认识一位老工程师,他们早年设计PCB的时候还没有用上电脑,却照样能完成包含几百上千个元器件的电路PCB设计。而且他们设计的PCB,布局和布线都相当工整,跳线、跨线极少,原器件排列整齐合理,并且符合工艺规范要求。我们看到的早期的国产黑白电视机PCB,就属于他们那个年代的工程师的杰作。
尽管后来我设计PCB的时候,早就用上了电脑。但我仍然觉得,这些老工程师们在PCB设计上,一定有一些绝招可以借鉴,我们现在的年轻工程师们,是很难想象他们当年是如何借助铅笔和方格纸完成复杂的PCB设计。确实我也从他那里也获得了很多的经验,比如:如何排列元器件可以容易走线,如何最有效地利用双列直 *** IC下面的板面空间,如何在布线之前就尽可能地规划好布局等等。
我自己的体会是:PCB设计,不仅仅是技术,还是艺术,是艺术就涉及很多的主观因素,所以工程师也要注意提高自己的修养。
工具帮助我们完成了很多繁复的工作,但它所自动完成的并非可以更佳的应用于每一个产品。因为它所帮助我们完成的是产品设计中普遍且通用的一面,并非自动完成产品的更佳优化面设计,例如:使用PROTEL或者其他的软件工具,通过自动布局、自动布线,就可以完成的只是通常的连接方式,从某方面讲也只是把所要连接的器件连在一起了而已。所以要真正设计一个产品的pcb,更多的是设计者针对这一产品的具体情况的了解分析,从而完成独一无二的设计。
本人为 *** 的学习过pcb设计,但由于要设计的原因,使用了PROTEL来进行了一个PCI板卡的设计(PROTEL现学的),深感pcb设计的复杂 *** (使用的芯片最多160引角双面板佈线,未使用 *** 自动佈线,结果是:能把他们连接在一起,并尽量减少高频干扰并遵照芯片的走线长度要求设计就已经大伤脑筋了),因为对 *** 电的爱好,所以对原先的黑白电视机也有过一定的了解。所以对老一辈的pcb设计者的辛勤工作,和智慧的结晶更是深感敬意。希望有机会可以真正的学到pcb设计的精髓。