赞
踩
在单片机运行过程中会因为各种原因,比如电源电压波动、外部信号干扰等,单片机可能会出现死机、程序崩溃等异常情况,这就需要使用复位电路来重新启动单片机。
在单片机的复位电路中,复位信号的高低电平通过单片机的复位引角(NRST)使单片机中除备份区域以外的所有寄存器恢复为默认值,并且程序从头执行。
外部复位主要是外部阻容电路组成的复位电路和一些集成芯片组成的复位电路。
外部阻容复位分为高电平复位和低电平复位,高电平复位多用于 51 单片机中;低电平复位多用于STM32单片机中,在STM32中硬件复位,保持低电平需保持在0.8V以下MCU才可复位。
(1)原理图
复位按键和电容有一端直接接地。
(2)原理
当电源开关 s 闭合后,电源给单片机供电,同时通过电阻给电容充电。
上电复位:由于电容具有两端电压不能突变的特性,在上电瞬间,电容视为短路,此时 NRST 的电压约为 0 伏, NRST 为低电平对单片机进行复位。
经过一段时间后电容充电完成,此时电容可视为开路。 NRST 的电压约为 3.3 伏, NRST 为高电平,单片机正常工作。
按键复位:在单片机工作期间,当按键按下时,按键两端相当于一段导线,同时电容被短接。此时 NRST 电压为低电平对单电机进行复位。
(1)原理图
复位按键和电容有一端直接VCC。
(2)原理
当电源开关 s 闭合后,电源给单片机供电,同时通过电阻给电容充电。
上电复位:由于电容具有两端电压不能突变的特性,在上电瞬间电容视为短路,此时 RST 端口为 5 伏电压, RST 为高电平,对单电机进行复位。
经过一段时间后电容充电完成,此时电容可视为开路, RST 的电压约为 0 伏, RST 为低电平。
按键复位:单片机正常工作,在单片机工作期间,当按键按下时,按键两端相当于一段导线,同时电容被短接,此时 RST 电压为 5 伏,RST 为高电平对单片机进行复位。
为了保证单片机可靠运行,防止单片机内部程序跑飞, 造成未知的风险,可以在外部增加开门狗复位电路(外部集成芯片复位)。
如上图所示,主要有一个用于喂狗的引角 WDI 和一个复位引角。
外部看门狗会一直监测 WDI 引角上的信号,如果未在一定时间内进行喂狗,复位引角就会输出低电瓶复位信号。
内部复位的方式有内部看门狗复位、软件 SW 复位和低功耗管理复位。
看门狗复位分为独立看门狗和窗口看门狗。
独立看门狗(IWDG)就是一个递减计数器(12位),当递减到 0 时(0xFFF→0x000),就会对单片机进行复位。
独立看门狗的时钟源来自内部低速时钟(LSI,频率49KHz),意味着不受外部晶振电路影响,同时就算系统主时钟发生故障时也可以正常工作。
但是使用内部晶振也意味精度并不高,因此只适合应用在对时间精度要求比较低的场合。
窗口看门狗(WWDG)就是一个有上下限的窗口递减计数器(7位,0x7F→0x40)。
在这个范围内不会对单片机进行复位,只要不在这个范围之内都会复位。
窗口看门狗的时钟由外设时钟 APB1 时钟经预分频后提供,通过可配置的时间窗口来检测应用程序非正常的、过迟或过早的操作。
最适合那些要求看门狗在精确计时窗口起作用的应用程序。
看门狗以下情况会被触发:
软件( software ) 复位相对于其他的复位方式比较灵活,它是通过代码编程,在软件中设置某个寄存器的值,让单片机复位,这样复位的时间就是比较可控。
通过写选项字节完成在待机或停机模式下的复位,这个用的比较少。
电源复位,分为:
可以从它的复位电路看到,电源复位信号最终其实还是作用于 RESET 引角触发系统复位的。
STM32F1 系列的备份区包含RTC寄存器、RTC备份寄存器和备份SRAM, 是专门开辟的一块数据存储区,有自己独立的电源电路,它不会因为系统复位电源复位而数据丢失。
为防止单片机主控电源意外掉电而数据丢失的情况,可以将一些重要的数据写到该备份的 SRAM中,以便上电恢复。
STM32 在重启芯片时会在系统的第四个上升沿锁定,并根据两个引角: BOOT0 和 BOOT1,选择从哪块存储区开始启动。
STM32 有三块区域存储系统代码,如下图:
(1)第一块是内置闪存模块中的主存储模块,(用的最多)。
(2)第二块是闪存模块中的系统存储区域模块。系统存储器区域中存放着出厂自带的 BOOTLOADER(boot loader)程序,用户可以通过 BOOTLOADER 的引导将程序烧录至,比如主存储器中,比如 ISP 烧录方式。
(3)第三块是可以存储程序代码的内置 SRAM。但 SRAM 具有掉电数据丢失的特性,所以这种从 SRAM 启动系统的方式用的就比较少,一般是用在平时进行代码调试的时候。
因为经常频繁的对 flash 进行读写程序代码,就会降低 flash 的使用寿命,所以说在调试时将程序烧录到 SRAM 中。
STM32 是通过设置 BOOT0 和 BOOT1 两个引脚的高低电平状态来配置三种启动方式,如下图:
在STM32 中芯片会标明哪一位引脚是BOOT0,BOOT1。
当BOOT0=0 时,不管 BOOT 1为任何的状态,都是从主闪存 flash 存储器中启动,即从主闪存 flash 的起始地址 0X0800000 启动。
从系统存储器中启动,比如芯片最原始的状态是主闪存中是没有程序,需要从系统存储区引导下载程序到主闪存中。
从 SRAM 中启动。
上图是最简单的利用三针座端子外接BOOT设计电路。
BOOT0 默认是通过电阻接到了地,即默认是低电平。如果想要切换模式,可以用跳线帽将BOOT0 和 V33 电源相连即可。
这个是一个最简单的设计,还需要手动的进行跳线。
一般复杂的开发板都会设计一键下载电路,完成启动模式的切换,那具体在购买使用开发板时就可以查看相关的原理图。
BOOT0,BOOT1都连接到单片机引脚。
绿色的LED灯为电源指示灯,给板子上电就亮。
蓝色的LED灯为PC13状态指示灯,
PC13口为低电平时,蓝色的灯亮;PC13口为高电平时,蓝色的灯灭。
通过一个特殊的电路设计,能够将在电脑中所编写的单片机程序代码下载到单片机的指定区域中,对于 STM32 来说,通常就是下载到内置主闪存中。
(1)下载已经编译好的程序文件到单片机中
(2)可以在线硬件调试单片机
支持下载烧录程序和在线硬件调试程序。
采用了国际标准的测试协议,不仅仅是针对STM32 芯片,在其他很多单片机上都是支持JTAG下载模式,它需要占用的这个引脚比较多。
支持下载烧录程序和在线硬件调试程序。
SWD(serial wire debug,串行线调试)是 arm 公司专门为了使用 arm 芯片的设备而设计的一种协议,用于微控制器进行编程和调试,它仅在 arm 架构的设备上才能用。
使用的引脚数比 JTAG 的要少,必须角只需要 SWDIO,SWCLO两个引角就可以。
只支持程序下载,不支持在线调试。
对应就是之前介绍的BOOT启动电路时,从系统存储器 BOOTLOADER 启动烧录的方法。
(1)STLINK
(2)JLINK
(3)USB下载器(部分开发板试用)
以SWD下载调试模式为例。
参见之前电源专栏-LDO、STM32专栏-STM32电源及时钟介绍的笔记,此处的芯片是AMS1117。
该降压电路是将5V转化成3.3V。
单片机排针是一种电子元件,通常由一排针脚组成,它将单片机的部分引脚引出,通常用于将单片机与其他电路板连接起来。
单片机排针的作用是将单片机与其他电路板连接起来,从而实现数据的传输和控制。
通过单片机排针,可以将单片机与各种外设连接起来,如LED灯、传感器、LCD显示屏等,从而实现各种不同的功能。
单片机正常运行必须要有时钟波形,芯片就可以在每一个上升延或者下降延到来的时候执行一次动作。
如果选择晶振的频率为12MHZ,则时钟周期为,机器周期为12个时钟周期,一条代码指令运行需要1个机器周期,(可以需要1~4个机器周期)。
可以简单认为时钟波形的频率越高,单位时间内芯片能执行的指令就更多,芯片就更强大。
STM32系统结构如下图:
大致分为 ARM context 内核,通过总线连接的外部存储设备、闪存flash、 存储器SRAM 以及各种各样的外设。
每一部分想要能够正常工作,都需要有属于自己的时钟信号,如下图:
这么多的时钟就需要共用时钟源,并通过分频器或者倍频器得到自己想要的时钟频率。
(1)高速内部时钟信号HSI
内嵌经出厂调校的8MHz的RC振荡器,系统在启动时默认使用该内部8MHz作为主时钟源。
(2)低速内部时钟信号LSI
内嵌带校准的40kHz的RC振荡器,主要是给独立看门狗使用的 RC 震荡器。
这两组内部时钟源都是由电阻电容构成的 RC 震荡器,所以容易受到环境和温度的影响,即会随着环境变化,时钟频率也会变化,不那么准。
(3)产生CPU时钟的PLL:PLL
PLL:锁相环倍频器。它不产生时钟信号,但是可以对时钟信号进行倍频,这样就可以采用时钟源产生低频的时钟信号,然后再通过PLL倍频得到目标频率。
(1)高速外部时钟信号HSE
4~16MHz晶体振荡器,一组OSC接入4-16兆的晶体振荡器。
(2)低速外部时钟信号LSE
带校准功能的32kHZ RTC振荡器,一组OSC32接入带校准功能的32kHZ RTC振荡器。
外部晶震通常是石英晶振或陶瓷晶振,相对于内部的 RC 震荡器来说,精度和抗环境干扰的能力就很高,所以一般都是优先使用外部晶振作为时钟源的。
由一块 32.768 k 赫兹的石英震荡器以及两个匹配电容 C1,C2 组成。
由一块 8MHz 的石英振荡器和匹配电容 C3,C4 组成。
R10 是一个反馈电阻,是可以不接的,因为 STM32 已经将这个电阻是已经集成到芯片的内部。
引脚名称 | 说明 | |
晶振 (外部) | OSC_IN OSC_OUT (HSE) | 外接4M~16MHz的HSE引脚,用于给STM32提供高精准系统时钟,如果使用内部HIS能满足使用需求,这两个脚可以不接晶振 |
OSC32_IN OSC32_OUT (LSE) | 外部LSE引脚,通常为32.768KHz,用于给STM32内部RTC提供时钟,如果使用内部LSI能满足使用需求,这两个脚可不接晶振 | |
晶振 (内部) | HSI | 外部HSE晶振引脚,用于给STM32提供高精准系统时钟,如果使用内部HIS能满足使用需求:这两个脚可以不接晶振 |
LSI | 外部LSE晶振引脚,用于给STM32内部RTC提供时钟,如果使用内部LSI能满足使用需求,这两个脚可不接晶振 | |
PLL | 锁相环倍频输出,用来将输入时钟源倍频,时钟输入源可以是HSE、HSE/2、HSI/2,倍频系数可选择为2~16倍 |
无源晶振不需要电源,可以自己启动。
无源晶振需要搭配两个电容并且接地才能进行起振,一般电容选择是在10~40pF,根据经验一般选20pF。
这两个电容一般称为“匹配电容”、“负载电容”或者“谐振电容”。
晶振电路中加这两个电容是为了满足谐振条件:使晶振两端的等效电容等于或接近负载电容。
只有连接合适的电容才能满足晶振的起振要求,晶振才能正常工作。
负载电容无法满足的话一般会使晶体频率产生偏差,严重的话晶体无法起振。电路设计中要尽量满足晶体的负载电容需求,从而使晶体工作在最佳状态。
负载电容的值由如下公式计算:
CL = C1*C2 / (C1+C2) + CS
CL为晶振的负载电容值,一般通过查询晶振的数据手册获得。
CS为电路板的寄生电容,一般取 3~5pF,取C1 = C2,那么公式可以简化成如下:
CL = C1 / 2 + CS
一般情况下,增大负载电容的值会使振荡频率下降,减小负载电容的值,会使振荡频率上升。
上图右边晶振电路上又并了一个电阻。这个电阻实际上是反馈电阻,是为了方便晶振起振的。
对于COMS而言,这个电阻的阻值可以是1M以上,对于TTL则是需要视情况而定。
最好的办法是看看芯片的数据手册,确认芯片晶振电路内部是否有电阻,如果没有,电路设计时最好加上。
有源晶振不需要外围其他器件的支持,只需要接上电源,输出端就可以输出震荡频率脉冲,输出接在单片机的晶振脉冲接受端。
有源晶振通常的用法:一脚悬空(NC也可以作为使能端),二脚接地,三脚接输出,四脚接电压。
有源晶振不需要CPU内部的振荡器,连接方式相对简单,主要是做好电源滤波,通常使用一个电容和电感构成的PI型滤波网络,输出端用一个小阻值的电阻过滤信号即可,不需要复杂的配置电路。
相对于无源晶振,有源晶振的缺陷是其信号电平是固定的,需要选择好合适输出电平,灵活性较差,而且价格高。
PCB 中常用的晶体封装有:2 管脚的插件封装、SMD 封装、 4 管脚的 SMD 封装。
尽管晶体有不同的规格,但它们的基本电路设计是一致的,因此 PCB 的布局、布线规则也是通用的。基本的电路设计如下图:
这两个电容分别为增益电容和相位电容。
晶体电路布局时,两个电容靠近晶体放置 ,布局效果图如下(注意图上浅色的字):
布线时,晶体的一对线要走成 类差分 的形式, 线尽量短 、且要加粗、并进行包地处理 , 效果如下图:
上述的是最基本和最常见的晶体电路设计,也有一些变形设计,如加串阻、测试点等,如下图 ,设计思路还是一致的。
结合上述,布局应注意:
布线应注意:
相比于晶体电路,晶振是有源电路,主要由三部分组成:晶振 +电源滤波电路 +源端匹配电阻。
常见电路设计如下图:
布局布线效果图如下:
布局、布线总结:
时钟分配器种类比较多,在设计时保证时钟分配器到各个 IC 的距离尽量短,通常放在对称的位置,如下:
时钟分配器电路:
设计如下图:
布局、布线总结:
在下图<1>中是一个简单的开关电路,作用是给IC一个 0 或者 1 的开关状态。
当机器开关在断开状态时,是一个稳定的高定平状态。
当按键按下去的时候,由于人手不稳定,它存在一定的抖动,如下图<2>。芯片非常灵敏可以感知到两个触片存在不是完全接触的时间。这种情况存在危害,因为明明是想给一个0,却给3~4个甚至更多的0。
如图<3>,开关闭合为0,开关断开为1。
松开开关也是同理,就是利用电容两端电压缓慢变化,在其没达到信号跳变的阈值时抖动消除。
图<4>核心原理也是同上。
电容、电阻位置的不同,是改变了开关在默认状态下信号的值。
开关闭合为1,开关断开为0。
抖动时间一般在 10~20ms ,存在公式,所以一般,
还有其他的方法可以有效的消除抖动,如使用触发器(如JK触发器),触发器是一种入稳定达到一定阈值后才会稳定输出的器件。
蜂鸣器是一种一体化结构的电子讯响器,直流电压供电。广泛应用于计算机,打印机,报警器,电子玩具等产品,用做声音提示或者报警。
蜂鸣器分为有源的蜂鸣器和无源的蜂鸣器,这里的源指的是振荡源,而不是电源。
有源峰鸣器内部自带振荡源,而无源峰鸣器内部是没有振荡源。
蜂鸣器内部原理无需了解,只需要知道:改变单片机引脚输出方波的频率,就可以调整控制蜂鸣器音调,产生各种不同音色、音调。改变输出方波占空比,可以控制蜂鸣器的声音大小。
驱动无源蜂鸣器需要一定频率持续高低电瓶变化的信号,也就是说上图中给三极管Q2的信号要是一直高低变化的,使得这个三极管处于那个导通、关断、导通、关断的状态。
驱动有源分明器只要有电流流进就可以响,没有电流流进它就不响。所以对于有源蜂鸣器只需要给它固定的高电瓶或者是固定的低电瓶它就能响,给高还是给低是根据这个三极管电路来决定的。
主控芯片的原理图如下:
在上图中黑色框标注的引脚是4个供电部分,每一个供电都需要匹配一个电容(共4个,如上图外围电路)进行滤波。
检查网络标签:设计(D)→检查DRC
下面是我自己跟着视频初学画PCB板的一些总结:(晶振PCB注意事项在上面晶振部分)
注意:自己的电路和参考电路有以下几个方面不同
本文参考:琨彦电子、喵咕噜11、灿科盟
单片机晶振电路的原理和作用图解 - 电子发烧友网 (elecfans.com)
【图文结合】晶振时钟 PCB 设计指南,3 种布局布线技巧 - 知乎
为什么按键时会产生抖动及防抖动电路的原理_哔哩哔哩_bilibili
有源与无源蜂鸣器的差异及使用方法_哔哩哔哩_bilibili
永远感谢每一个认真讲课的好老师
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。