嵌入式分享合集125
一、多层板PCB设计中电源平面相对地平面要进行内缩?
有一些人绘制的PCB,在GND层和电源层会进行一定程度的内缩设计,那么大家有没有想过为什么要内缩呢。
需要搞清楚这个问题,我们需要来先了解一个知识点,那就是“20H”原则:
20H原则主要是为了减小电路板电磁辐射问题提出来的,在电路板上如果存在高速电流,就存在与之相关的磁场,在各个层的边缘,电磁场的辐射方式如下图所示:
可以看到在我们地层和电源层上下平面大小一致的时候由于电源层和地层之间的电场是变化的,在板的边缘会向外辐射电磁干扰,那一般这个解决方法是将电源层内缩一定的距离,这样就可以使电场只在地层的范围内传导,从而达到抑制边缘辐射效应,提高电磁兼容性(EMC)。
那么我们一般要内缩多少距离呢,我们内缩的距离就是我们之前说的“20H”的距离,这个H指的是电源层与地层之间的介质厚度,“20H规则”的采用是指要确保电源平面的边缘要比0V平面边缘至少缩入相当于两个平面间层距的20倍。
如上图所示就是内缩后的电源平面与地平面,我们可以看到现在的电磁场大部分不会向外辐射出去了,这样就减小了对外EMI辐射,但是我们为什么会说大部分不会向外辐射出去了呢?因为我们发现电源相对于地层的边缘缩进20H,那么电磁场的密度可以减小约70%,并不是说可以减小到0,那如果我们需要将更多的电场限制在内则可以内缩“100H”,一般来说,内缩100H可以将98%的电场限制在内,所以这就是为什么我们的板子需要内缩的一个原因。
但是由于叠层的设计,在通常的一些PCB板上,严格满足20H的话,无法进行PCB布线了,所以一般的处理方式是电源GND 相对GND 内缩1MM,这样我们板子的性能也得到一定的保障。
我们也需要注意一下,我们的20H原则是在一定的前提下才可以有明显的效果。
1 电源平面要处在PCB内部,并且与他相邻的上下两个层都为0V平面,这两个0V平面向外延伸的距离至少要相当于他们各自与电源平面间层距的20倍。
2 PCB的总层数要大于或等于8层
二、用二极管实现不同电压的输出
利用二极管的单向导电性可以设计出好玩、实用的电路。
分享本文,分析限幅电路和钳位电路,是如何用二极管来实现的。
限幅电路
如下图所示,当在正半周期,并且VIN大于等于0.7V,二极管正向导通。此时,
VOUT会被钳位在0.7V上。
而当VIN小于0.7V时二极管是截止状态,在负半周期时相当于电流反向,二极管也是截至状态,此时VOUT=VIN,VOUT波形跟随VIN变化。
限辐电路示意图
根据上面限辐电路的原理,可以设计如下双向限辐电路。
双向限辐电路示意图
然而有时候0.7V电压不能满足要求,那么,怎么产生不同大小的限幅电压?
在电路中加入偏置电压VBIAS,只有当VIN大于等于VBIAS时二极管才能导通。此时VOUT被钳位,其值是0.7V+VBIAS,如下图所示。
偏压限幅电路示意图
钳位电路
下面是二极管结合电容实现的钳位电路。分析中不考虑二极管的导通压降,假设RC时间常数足够大,从而使输出波形不会失真。
钳位电路原理
当输入Vin在负半周期为负时,电流如下图中红色箭头所示。二极管导通,电容逐渐充电至V,在此过程中Vout=0。
当输入Vin在正半周为正时,电流如蓝色箭头所示。二极管截止,Vout等于电容上电压加上正半周电压V,此时Vout=2V。
钳位电路原理
偏压钳位电路
跟限幅电路类似的,为了获得所需要的钳位值,要在电路中加入偏置电压,如下图所示。
偏压钳位电路
当所加的偏压与二极管导通方向一致,钳位值会提高V1,Vout=2V+V1。
双向二极管钳位电路应用举例
在某些电路中会利用两个二极管的钳位作用进行保护,如下图所示,假设0.7V为D1和D2的导通电压。
-
Vin大于等于Vmax,D1导通,Vout会被钳位在Vmax
-
Vin小于等于Vmin时,Vout被钳位在Vmin
三、微波炉电路
在厨房电器中,微波炉可以说是最具技术含量的电器,它的工作原理不像其他电器那样一眼就能看个明白,于是拆解了一个微波炉,分析内部电路。
微波炉的结构
微波炉由箱体、磁控管、变压器、高压电容器、高压二极管、散热风扇、转盘装置及一系列控制保护开关组成,大多数微波炉还装了电热管,兼有烧烤功能。
微电脑控制式微波炉
机械控制式微波炉
微波炉的关键元件是磁控管,磁控管除了微波炉有这个东西,其他家用电器上是看不到的。更主要的是这个磁控管不能拆解,要想弄清他的结构,只能破坏性地解剖。好在网上还有“秀才”,视频能够很清楚地表达磁控管的内部结构。
磁控管灯丝
磁控管阳极
清楚了内部结构,没有相当的电磁电子学理论基础,也是云里雾里,不知道它怎么能产生微波。这微波不像石英电加热管能看得到红彤彤的发热体,它看不见也摸不着,却能把食物烹熟,可知这微波对人也是很具杀伤力的。
为了防止微波泄漏,微波炉在安全方面采取了很严格的防护措施。微波炉有三个门联开关就是防止微波伤人事故的。也就是因为有这三个门联开关,微波炉的电路图也复杂了许多。
微波炉的电路
这是LG微波炉(WD700)的电路图。初级开关、监控开关、次级开关是三个门联微动开关。初级开关、次级开关是常开型微动开关,炉门开着时,微动开关触点断开,监控开关是常闭型微动开关,炉门开着时,微动开关触点闭合。
上电状态
关闭炉门,初级开关、次级开关闭合,监控微动开关断开;插上电源,微波炉电路板通电,因为电路板上有芯片,显示屏显示“0”,这种情况也称上电状态。图中RY1并不是常闭继电器,上电状态下炉灯形不成回路,炉灯不亮。
开门状态
门打开时,初级开关断开火线,次级开关PK断开微波与烧烤继电器回路,监控开关闭合,将高压变压器初级线圈短接,目的是防止误意外因素产生微波,危及人生安全。开门时次级开关PK断开,微处理器获得信号,驱动芯片向RY1继电器线圈供电,RY1触头接通,炉灯亮。因初级开关处于断开位置,风扇、托盘不工作。
烧烤状态
上电状态下按烧烤按钮,开始按钮指示灯闪亮,旋转开始旋钮设定烧烤时间,按下开始按钮,RY3接通,形成烧烤回路。同时主继电器RY1接通,风扇、托盘、炉灯同时工作。值得注意的是,托盘是用21V同步电动机驱动的,电压来自于散热风扇罩极异步电动机线圈抽头。
微波状态
上电状态下按开始键,或按任何其它按钮,设置重量或时间再按下开始按钮,RY2闭合,就形成微波状态。其中灯丝回路电压为交流3.3V。磁控管回路电压为-4000V直流电,该回路可以把高压变压器二次侧的电压分解为正半周与负半周分别分析。在正半周,高压二极管导通,向高压电容器充电,电压约为2000V;在负半周,高压二极管截止,高压电容器放电,与二次侧的电压叠加,形成约4000的直流电压,阴极电子逆电流方向射向阳极形成微波。
控制板电路
控制电路板也就是PCB板上的二次回路,LG微波炉(WD700)程序比较多,二次回路还是比较复杂的。PCB板上的按键输入信号并不是直接触发晶闸管,而是把信号输入到了微处理器,PCB板上的3个继电器是由STCC02模块来驱动的。
PCB板上的开始键下字母EN是enable的缩写,也称“使能”键,触按EN键,电源芯片才会有输出。
继电器线圈供电回路
轻触开关操作电路
时间与重量设置
有些时候,不分析电路图,电器的功能也许并不是很清楚。通过分析,可以明白微波炉尽管有很多按键,但总归是调节微波工作的时间,至于微波炉火力调节,实际上是工作时段内微波断续工作的比例。
四、步进电机的速度控制
whaosoft aiot http://143ai.com
在制作一个使用全向轮的机器人底盘,对于全向轮,电机的精度是影响效果的重要因素。所以使用了步进电机,使用步进电机的优点是可以不使用编码器,开环控制即可达到高精度的效果。
调整占空比或者调整周期
众所周知,PWM有两个重要参数,周期与占空比。
步进电机的运动方式是,每收到一个脉冲,就旋转指定的角度。因此影响电机速度的唯一参数就是PWM的频率。以下附图两张来说明调整占空比与调整周期的区别。
周期固定,调整占空比
上图中有4个PWM,它们的周期是一样的,不同之处是拥有从80%至20%的占空比。可以看出,无论占空比为多少,在1s内,它们产生的高电平的数量是一样的,即无论占空比为多少,PWM的频率都一致。因此也就无法调整步进电机的速度。因为步进电机的速度仅与PWM的频率有关。
占空比固定,调整周期
上图中有4个PWM,它们的占空比都固定为50%,却拥有不同的周期。可以看出,即使占空比固定,只要动态调整周期,PWM就能在相同时间内产生数量不同的脉冲。因此,固定占空比,动态调整PWM周期,即可达到控制步进电机速度的效果。
基于STM32的实现
在STM32F1中,定时器具有PWM模式,可以用来产生PWM。但是,STM32的PWM模式,只要确定了时基单元(即确定了PWM周期),改变输出比较寄存器,仅可改变PWM的占空比。
若需要改变PWM周期,需不停地改变定时器的时基单元。但时基单元与硬件相关,不适合频繁变更。因此,步进电机的调速,不适合使用STM32下定时器的PWM模式来控制。
在多方查找资料后,确定了一种利用输出比较精确控制PWM周期的方式。
利用输出比较产生频率可变的PWM
利用输出比较产生频率可变的PWM,原理简单介绍如下:
首先配置定时器时基单元,确定脉冲最小长度单位CK。
然后开启定时器的输出比较,设置模式为翻转模式,并开启输出比较中断。
将定时器内计数器CNT当前值,加上脉冲长度X(单位为CK),写入输出比较寄存器。
在X个CK后,将会触发输出比较中断。同时电平翻转。
在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。
在X个CK后,将会触发输出比较中断。同时电平翻转。
在中断中再次将当前计数器CNT的值,加上脉冲长度X,写入输出比较寄存器。
如此往复……
以此即可得到一个占空比为50%,周期为2X个CK的PWM。
确定最小单位CK,配置时基单元
首先确定一个最小的间隔CK,规定PWM的高电平长度和低电平长度的单位都是CK。
即高电平的长度一定是CK的整数倍。低电平亦然。
然后配置定时器的时基单元,通过CK的长度确定预分频系数。
已知STM32F103的主频为72MHZ,则时基单元中预分频系数为:
PSC = 72M / (1/CK)
例如,rtz所确定的CK长度为10us(0.00001s),即可得出方程。
预分频系数确定为720后,由高速晶振产生的72MHZ的时钟信号被720分频,得到100000HZ的时钟信号。即时钟信号每秒变动100000次。每次10us。同时可将重装载值设定为0XFFFF(16位定时器的最大值)。因为本次使用的输出比较模式不使用更新中断,该值可随意设置。
TIM_TimeBaseStructure.TIM_Period = 0XFFFF;
TIM_TimeBaseStructure.TIM_Prescaler =720;
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
开启输出比较通道,设置输出比较模式为翻转模式,并配置NVIC,开启输出比较中断,配置输出比较通道:
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;
TIM_OCInitStructure.TIM_Pulse = 500;
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Set;
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;
TIM_OC1Init(TIM2, &TIM_OCInitStructure);
开启输出比较中断,配置NVIC优先级:
TIM_ITConfig(TIM2, TIM_IT_CC1, ENABLE);
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
编写中断服务函数
在输出比较中断中,唯一要做的事情就是把当前CNT的值取出,加上脉冲长度X,写入输出比较寄存器。
当计数器达到0XFFFF(之前设定的重装载值)后,再加一会自动变为0。
例如,当前CNT值为0XFFFF,脉冲长度为5,很明显,输出比较寄存器应设置为0X0004才可触发下一次中断,而不是0X10004,这样会造成溢出。
因此将CNT的值与脉冲长度相加后,需要取0XFFFF的余数后,再写入输出比较寄存器。
int t_m=5;//低电平和高电平的长度
void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_IT_CC1) != RESET) {
TIM_SetCompare1(TIM2,(TIM2->CNT+t_m)%0XFFFF);
TIM_ClearITPendingBit(TIM2, TIM_IT_CC1);
}
}
动态调整中断服务函数中的变量t_m,即可达到修改PWM频率的效果。