一、单片机中晶振的工作原理

  晶振在单片机中是必不可少的元器件,只要用到CPU的地方就必定有晶振的存在,那么晶振是如何工作的呢?

什么是晶振

    晶振一般指晶体振荡器,晶体振荡器是指从一块石英晶体上按一定方位角切下的薄片,简称为晶片。

    石英晶体谐振器,简称为石英晶振(Crystal oscillator),如下图椭圆物体。

嵌入式分享合集178_正弦波

 而在封装内部添加IC组成振荡电路的晶体元件称为晶体振荡器。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。

晶振工作原理

    石英晶体振荡器是利用石英晶体的压电效应制成的一种谐振器件,它的基本构成大致是:从一块石英晶体上按一定方位角切下薄片,在它的两个对应面上涂敷银层作为电极,在每个电极上各焊一根引线接到管脚上,再加上封装外壳就构成了石英晶体谐振器,简称为石英晶体或晶体、晶振。其产品一般用金属外壳封装,也有用玻璃壳、陶瓷或塑料封装的。

    若在石英晶体的两个电极上加一电场,晶片就会产生机械变形。反之,若在晶片的两侧施加机械压力,则在晶片相应的方向上将产生电场,这种物理现象称为压电效应。

嵌入式分享合集178_正弦波_02

 如果在晶片的两极上加交变电压,晶片就会产生机械振动,同时晶片的机械振动又会产生交变电场。

    在一般情况下,晶片机械振动的振幅和交变电场的振幅非常微小,但当外加交变电压的频率为某一特定值时,振幅明显加大,比其他频率下的振幅大得多,这种现象称为压电谐振,它与LC回路的谐振现象十分相似。它的谐振频率与晶片的切割方式、几何形状、尺寸等有关。相关推荐:在MCU晶体两边各接一对地电容的原因。

    当晶体不振动时,可把它看成一个平板电容器称为静电电容C,它的大小与晶片的几何尺寸、电极面积有关,一般约几个皮法到几十皮法。当晶体振荡时,机械振动的惯性可用电感L来等效。

    一般L的值为几十豪亨到几百豪亨。晶片的弹性可用电容C来等效,C的值很小,一般只有0.0002~0.1皮法。晶片振动时因摩擦而造成的损耗用R来等效,它的数值约为100欧。

    由于晶片的等效电感很大,而C很小,R也小,因此回路的品质因数Q很大,可达1000~10000。加上晶片本身的谐振频率基本上只与晶片的切割方式、几何形状、尺寸有关,而且可以做得精确,因此利用石英谐振器组成的振荡电路可获得很高的频率稳定度。

    计算机都有个计时电路,尽管一般使用“时钟”这个词来表示这些设备,但它们实际上并不是通常意义的时钟,把它们称为计时器可能更恰当一点。

    计算机的计时器通常是一个精密加工过的石英晶体,石英晶体在其张力限度内以一定的频率振荡,这种频率取决于晶体本身如何切割及其受到张力的大小。有两个寄存器与每个石英晶体相关联,一个计数器和一个保持寄存器。

    石英晶体的每次振荡使计数器减1。当计数器减为0时,产生一个中断,计数器从保持寄存器中重新装入初始值。这种方法使得对一个计时器进行编程,令其每秒产生60次中断(或者以任何其它希望的频率产生中断)成为可能。每次中断称为一个时钟嘀嗒。

晶振在电气上可以等效成一个电容和一个电阻并联再串联一个电容的二端网络,电工学上这个网络有两个谐振点,以频率的高低分其中较低的频率为串联谐振,较高的频率为并联谐振。

    由于晶体自身的特性致使这两个频率的距离相当的接近,在这个极窄的频率范围内,晶振等效为一个电感,所以只要晶振的两端并联上合适的电容它就会组成并联谐振电路。

    这个并联谐振电路加到一个负反馈电路中就可以构成正弦波振荡电路,由于晶振等效为电感的频率范围很窄,所以即使其他元件的参数变化很大,这个振荡器的频率也不会有很大的变化。

    晶振有一个重要的参数,那就是负载电容值,选择与负载电容值相等的并联电容,就可以得到晶振标称的谐振频率。

    一般的晶振振荡电路都是在一个反相放大器的两端接入晶振,再有两个电容分别接到晶振的两端,每个电容的另一端再接到地,这两个电容串联的容量值就应该等于负载电容,请注意一般IC的引脚都有等效输入电容,这个不能忽略。

    一般的晶振的负载电容为15皮或12.5皮,如果再考虑元件引脚的等效输入电容,则两个22皮的电容构成晶振的振荡电路就是比较好的选择。

二、模拟信号采样与AD转换原理

Nyquist采样定理

    尽管大家都知道,但还是提一提大牛奥本海姆的《信号与系统》,来捋一捋几个点:

    带宽有限(band-limited) 采样频率大于2倍信号最高频率后可以无失真的恢复出原始信号。

    实际中,信号往往是无线带宽的,如何保证带宽有限?所以,我们在模拟信号输入端要加一个低通滤波器,使信号变成带宽有限,再使用2.5~3倍的最高信号频率进行采样。关于此我们下面将模拟数字转换过程将会看到。

    虽说是不能小于等于2倍,但选2倍是不是很好呢,理论上,选择的采样频率越高,越能无失真的恢复原信号,但采样频率越高,对后端数字系统的处理速度和存储要求也就越高,因此要选择一个折中的值。

    如果后端数字信号处理中的窗口选择过窄,采样率太高,在一个窗口内很难容纳甚至信号的一个周期,这从某方面使得信号无法辨识。

    比如,数字信号处 理的窗口大小为1024个点,采样率为50KHz,则窗口最多容纳1024*(1/50KHz)=20.48ms的信号长度,若信号的一个周期为 30ms>20.48ms,这就使得数字信号的处理窗口没法容纳一个周期信号,解决的办法就是在满足要求的前提下使用减小采样率或增加窗口长度。

AD转换

    记得有一次参加中科院计算所的实习笔试,里面就有这么一道题:模拟信号转换到数字信号要经历哪两个步骤?还好,早有准备,立刻填上了采样和量化,我们下面就来详细分析下这两个过程,但在分析之前,我们先给出一张整个过程的流图,您可以先想想为什么需要各模块。

嵌入式分享合集178_嵌入式硬件_03

程控放大器

    我们实际中的模拟信号都是通过传感器采集进来的,做过单片机的人应该熟知DS18B20温度传感器,不好意思,那是数字传感器,也就是说人家做传感器的时候把AD转换也放到传感器里面了。

    但这并不是普遍的情况,因为温度量是模拟信号中最容易测量的量了,而大多数的传感器并没有集成AD转换过 程,如大多数的加速度传感器、震动传感器、声音传感器、电子罗盘,甚至有的GPS(别懵了,GPS也算是一种传感器哦)等,都是模拟输出的。

    而且由于物理 制作的原因,传感器返回的电信号非常微小,一般在几mV(如果是电流,也一般在几mA),这么微弱的信号,如果经过导线或电缆传输很容易就湮灭在噪声中。因此,我们常常见到模拟传感器的输出线都会使用套上一层塑胶的线,叫屏蔽线,如下图。

嵌入式分享合集178_控制算法_04

屏蔽线只能保证在信号传输到系统之前受到的干扰最小,但信号仍要经过处理才能为数字系统使用。在模拟信号(尤其是高频信号)的输入端首先要使用 低噪声放大器对信号进行放大,这个放大器有特殊的要求,一定是低噪声,我们已经知道,模拟信号信号已经非常微弱。

    如果放大器还存在一定的噪声,在噪声叠加 之后放大出来的信号可能已经不再是原信号了。既然说到低噪声,那么低噪声是如何衡量的呢?这可以通过放大器噪声系数(NF)来定。

嵌入式分享合集178_正弦波_05

    噪声系数定义为放大器输入信号与输出信号的信噪比。其物理含义是:信号通过放大器之后,由于放大器产生噪声,使信噪比变坏;信噪比下降的倍数就是噪声系数。噪声系数通常用dB表示。

嵌入式分享合集178_晶振_06

 实际中除了考虑低噪声系数外,还要考虑放大器的带宽和频率范围以及最重要的放大增益。由于输入信号的强度可能时变,采用程序可控(程控)的放大增益保证信号能达到满度而又不会出现饱和,实际中要做到这一点还是很难的。

低通滤波器

    在Nyquist采样定理中已经提过,要满足采样定理必须要求信号带宽有限,使用大于2倍的最高信号频率采样才能保证信号的不混叠。低通滤波器的一个考虑就是使信号带宽有限,以便于后期的信号采样,这个低通滤波器是硬件实现的。

    另一方面,实际情况中我们也只会对某个频频段的信号感兴趣,低通滤波器的另一个考虑就是滤波得到感兴趣的信号。比如,测量汽车声音信号,其频率大部分在5KHz以下,我们则可以设置低通滤波器的截止频率在7KHz左右。

    程控的实现方法就是使用模拟通道选择芯片,如74VHC4051等。

    NOTES:

    在采样之前的所有电路实现方案叫信号调理电路。这样,我们就可以根据这个词到处搜索文献了。

采样及采样保持

    采样貌似有一套完整的理论,就是《数字信号处理》书中的一堆公式推导,我们这里当然不会那么去说。其实采样最核心的问题就是采样率选择的问题。

    根据实际,选择频率分辨率df 选择做DFT的点数N,因为DFT时域点数和变换后频域点数相同,则采样率可确定,Fs=N*df Fs是否满足Nyquist的采样定理?是,OK,否则增加点数N,重新计算2。

    我们希望df越小越好,但实际上,df越小,N越大,计算量和存储量随之增大。一般取N为为2的整数次幂,不足则在尾端补0。

    这里给出我的一个选择Fs的方案流程图,仅供参考。

嵌入式分享合集178_晶振_07

  采样后还有一个重要的操作是采样保持(S/H)操作,采样脉冲采样后无法立刻量化,这个过程要等待很短的一个时间,硬件上一般0.几个us,等待量化器的量化。

    注意,在量化之前,所有的信号都是模拟信号,模拟信号就有很多干扰的问题需要考虑,这里只是从总体上给出我对整个过程的理解。更多细化的方案还需要根据实际信号进行研究。

量化

    我们可以先直观的看一下量化的过程:

嵌入式分享合集178_正弦波_08

    量化有个关键的参数,叫量化位数,在所有的AD转换芯片(如AD7606)上都能看到这个关键的参数,常见的有8bit,10bit,12bits,16bit和24bit。

 

嵌入式分享合集178_晶振_09

   如上图,以AD7606为例,AD7606是16bit的AD芯片,量化位数指用16bit来表示连续信号的幅值。因此,考虑AD的测量范围(AD7606有两种:±5V和±10V),则AD分辨率是:

±5V: (5V-(-5V)) / (2^16) = 152 uV

±10V: (10V-(-10V)) / (2^16) = 305 uV

    量化位数越高,AD分辨率越高,习惯上,AD分辨率用常用LSB标示。

    因此,AD7606中对于某个输入模拟电压值,因为存在正负电压,若以0V为中间电压值,范围为±5V时AD转换电压可计算为:

嵌入式分享合集178_晶振_10

   AD7606若使用内部参考电压,Vref=2.5V。哦对了,这又出现个参考电压。参考电压与AD量化的实现方式有关,从速度上分串行和并行,串行包括逐次逼近型,并行方式包括并行比较式,如下图(左:串行,右:并行)。AD7606是使用逐次逼近型的方式。

嵌入式分享合集178_正弦波_11

 AD转换芯片另外两个重要参数是转换时间(转换速率)。并行AD的转换速率比串行的要高。但并行比较的方式中电阻的精度对量化有影响。

    接着,我们还将介绍一个重要的概念:量化噪声。量化噪声对应量化信噪比,其公式如下是SNRq= (6.02N + 4.77) dB。

    其中N为量化位数对于N=12, SNRq≈ 70dB,而N=16, SNRq≈ 94dB。

    从中可以看出:每增加1bit量化位数,SNRq将提高6.02dB,在设计过程中,如果对方有信噪比的要求,则在ADC选型时就要选择合适位数的ADC芯片。

    明显的,并不是量化位数越高越好,量化位数的提高将对成本、转换速度、存储空间与数据吞吐量等众多方面提出更高的要求。同时,我们尽量提高量化噪声的前提是信号的SNR已经比较低了,如果信号的SNR比量化噪声还高,努力提高量化噪声将是舍本求末的做法。

三、常见电机的控制算法

BLDC电机控制算法

    无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂。

    BLDC电机控制要求了解电机进行整流转向的转子位置和机制,对于闭环速度控制,有两个附加要求,即对于转子速度/或电机电流以及PWM信号进行测量,以控制电机速度功率。

    BLDC电机可以根据应用要求采用边排列或中心排列PWM信号。大多数应用仅要求速度变化操作,将采用6个独立的边排列PWM信号。这就提供了最高的分辨率。如果应用要求服务器定位、能耗制动或动力倒转,推荐使用补充的中心排列PWM信号。

    为了感应转子位置,BLDC电机采用霍尔效应传感器来提供绝对定位感应。这就导致了更多线的使用和更高的成本。无传感器BLDC控制省去了对于霍尔传感器的需要,而是采用电机的反电动势(电动势)来预测转子位置。无传感器控制对于像风扇和泵这样的低成本变速应用至关重要。在采有BLDC电机时,冰箱和空调压缩机也需要无传感器控制。

空载时间的插入和补充

    大多数BLDC电机不需要互补的PWM、空载时间插入或空载时间补偿。可能会要求这些特性的BLDC应用仅为高性能BLDC伺服电动机、正弦波激励式BLDC电机、无刷AC、或PC同步电机。

控制算法

    许多不同的控制算法都被用以提供对于BLDC电机的控制。典型地,将功率晶体管用作线性稳压器来控制电机电压。当驱动高功率电机时,这种方法并不实用。高功率电机必须采用PWM控制,并要求一个微控制器来提供起动和控制功能。

    控制算法必须提供下列三项功能:

  • 用于控制电机速度的PWM电压
  • 用于对电机进整流换向的机制
  • 利用反电动势或霍尔传感器来预测转子位置的方法

    脉冲宽度调制仅用于将可变电压应用到电机绕组。有效电压与PWM占空度成正比。当得到适当的整流换向时,BLDC的扭矩速度特性与以下直流电机相同。可以用可变电压来控制电机的速度和可变转矩。

    功率晶体管的换向实现了定子中的适当绕组,可根据转子位置生成最佳的转矩。在一个BLDC电机中,MCU必须知道转子的位置并能够在恰当的时间进行整流换向。

BLDC电机的梯形整流换向

    对于直流无刷电机的最简单的方法之一是采用所谓的梯形整流换向。用于BLDC电机的梯形控制器的简化框架,如下图所示。

嵌入式分享合集178_嵌入式硬件_12

在这个原理图中,每一次要通过一对电机终端来控制电流,而第三个电机终端总是与电源电子性断开。

    嵌入大电机中的三种霍尔器件用于提供数字信号,它们在60度的扇形区内测量转子位置,并在电机控制器上提供这些信息。由于每次两个绕组上的电流量相等,而第三个绕组上的电流为零,这种方法仅能产生具有六个方向共中之一的电流空间矢量。随着电机的转向,电机终端的电流在每转60度时,电开关一次(整流换向),因此电流空间矢量总是在90度相移的最接近30度的位置。

    梯形控制:驱动波形和整流处的转矩,示意图如下。

嵌入式分享合集178_嵌入式硬件_13

因此每个绕组的电流波型为梯形,从零开始到正电流再到零然后再到负电流。

    这就产生了电流空间矢量,当它随着转子的旋转在6个不同的方向上进行步升时,它将接近平衡旋转。

    在像空调和冰霜这样的电机应用中,采用霍尔传感器并不是一个不变的选择。在非联绕组中感应的反电动势传感器可以用来取得相同的结果。

    这种梯形驱动系统因其控制电路的简易性而非常普通,但是它们在整流过程中却要遭遇转矩纹波问题。

BLDC电机的正弦整流换向

    梯形整流换向还不足以为提供平衡、精准的无刷直流电机控制。这主要是因为在一个三相无刷电机(带有一个正统波反电动势)中所产生的转矩由下列等式来定义:

转轴转矩= Kt [IRSin(o) + ISSin(o+120) +ITSin(o+240)]
  其中:
      o为转轴的电角度
      Kt为电机的转矩常数
      IR, IS和IT为相位电流

如果相位电流是正弦的:IR   = I0Sino; IS = I0Sin (+120o); IT   = I0Sin (+240o)
 将得到:

转轴转矩= 1.5I0*Kt(一个独立于转轴角度的常数)

    正弦整流换向无刷电机控制器努力驱动三个电机绕组,其三路电流随着电机转动而平稳的进行正弦变化。选择这些电流的相关相位,这样它们将会产生平稳的转子电流空间矢量,方向是与转子正交的方向,并具有不变量。这就消除了与北形转向相关的转矩纹波和转向脉冲。

    为了随着电机的旋转,生成电机电流的平稳的正弦波调制,就要求对于转子位置有一个精确有测量。霍尔器件仅提供了对于转子位置的粗略计算,还不足以达到目的要求。基于这个原因,就要求从编码器或相似器件发出角反馈。

    BLDC电机正弦波控制器的简化框图,如下。

嵌入式分享合集178_正弦波_14

  由于绕组电流必须结合产生一个平稳的常量转子电流空间矢量,而且定子绕组的每个定位相距120度角,因此每个线组的电流必须是正弦的而且相移为120度。采用编码器中的位置信息来对两个正弦波进行合成,两个间的相移为120度。然后,将这些信号乘以转矩命令,因此正弦波的振幅与所需要的转矩成正比。结果,两个正弦波电流命令得到恰当的定相,从而在正交方向产生转动定子电流空间矢量。

    正弦电流命令信号输出一对在两个适当的电机绕组中调制电流的P-I控制器。第三个转子绕组中的电流是受控绕组电流的负和,因此不能被分别控制。每个P-I控制器的输出被送到一个PWM调制器,然后送到输出桥和两个电机终端。应用到第三个电机终端的电压源于应用到前两个线组的信号的负数和,适当用于分别间隔120度的三个正弦电压。

    结果,实际输出电流波型精确的跟踪正弦电流命令信号,所得电流空间矢量平稳转动,在量上得以稳定并以所需的方向定位。

    一般通过梯形整流转向,不能达到稳定控制的正弦整流转向结果。然而,由于其在低电机速度下效率很高,在高电机速度下将会分开。这是由于速度提高,电流回流控制器必须跟踪一个增加频率的正弦信号。同时,它们必须克服随着速度提高在振幅和频率下增加的电机的反电动势。

    由于P-I控制器具有有限增益和频率响应,对于电流控制回路的时间变量干扰将引起相位滞后和电机电流中的增益误差,速度越高,误差越大。这将干扰电流空间矢量相对于转子的方向,从而引起与正交方向产生位移。

    当产生这种情况时,通过一定量的电流可以产生较小的转矩,因此需要更多的电流来保持转矩,效率降低。

    随着速度的增加,这种降低将会延续。在某种程度上,电流的相位位移超过90度。当产生这种情况时,转矩减至为零。通过正弦的结合,上面这点的速度导致了负转矩,因此也就无法实现。

AC电机算法

标量控制

    标量控制(或V/Hz控制)是一个控制指令电机速度的简单方法。

    指令电机的稳态模型主要用于获得技术,因此瞬态性能是不可能实现的。系统不具有电流回路。为了控制电机,三相电源只有在振幅和频率上变化。

矢量控制或磁场定向控制

    在电动机中的转矩随着定子和转子磁场的功能而变化,并且当两个磁场互相正交时达到峰值。在基于标量的控制中,两个磁场间的角度显著变化。

    矢量控制设法在AC电机中再次创造正交关系。为了控制转矩,各自从产生磁通量中生成电流,以实现DC机器的响应性。

    一个AC指令电机的矢量控制与一个单独的励磁DC电机控制相似。在一个DC电机中,由励磁电流IF所产生的磁场能量Φ F与由电枢电流IA所产生的电枢磁通ΦA正交。这些磁场都经过去耦并且相互间很稳定。因此,当电枢电流受控以控制转矩时,磁场能量仍保持不受影响,并实现了更快的瞬态响应。

    三相AC电机的磁场定向控制(FOC)包括模仿DC电机的操作。所有受控变量都通过数学变换,被转换到DC而非AC。其目标的独立的控制转矩和磁通。

    磁场定向控制(FOC)有两种方法:

    直接FOC: 转子磁场的方向(Rotor flux angle) 是通过磁通观测器直接计算得到的

    间接FOC: 转子磁场的方向(Rotor flux angle) 是通过对转子速度和滑差(slip)的估算或测量而间接获得的。

    矢量控制要求了解转子磁通的位置,并可以运用终端电流和电压(采用AC感应电机的动态模型)的知识,通过高级算法来计算。然而从实现的角度看,对于计算资源的需求是至关重要的。

    可以采用不同的方式来实现矢量控制算法。前馈技术、模型估算和自适应控制技术都可用于增强响应和稳定性。

AC电机的矢量控制:深入了解

    矢量控制算法的核心是两个重要的转换: Clark转换,Park转换和它们的逆运算。采用Clark和Park转换,带来可以控制到转子区域的转子电流。这种做充许一个转子控制系统决定应供应到转子的电压,以使动态变化负载下的转矩最大化。

    Clark转换:Clark数学转换将一个三相系统修改成两个坐标系统:

嵌入式分享合集178_嵌入式硬件_15

    其中ia和ib正交基准面的组成部分,ic是不重要的homoplanar(同平面)部分。三相转子电流与转动参考系的关系如下图所示。

嵌入式分享合集178_晶振_16

    Park转换:Park数学转换将双向静态系统转换成转动系统矢量:

嵌入式分享合集178_控制算法_17

两相α, β帧表示通过Clarke转换进行计算,然后输入到矢量转动模块,它在这里转动角θ,以符合附着于转子能量的d, q帧。根据上述公式,实现了角度θ的转换。

AC电机的磁场定向矢量控制的基本结构

    Clarke变换采用三相电流IA, IB 以及 IC,来计算两相正交定子轴的电流Isd和 Isq。这两个在固定座标定子相中的电流被变换成Isd 和Isq,成为Park变换d, q中的元素。其通过电机通量模型来计算的电流Isd, Isq 以及瞬时流量角θ被用来计算交流感应电机的电动扭矩。矢量控制交流电机的基本原理图如下。

嵌入式分享合集178_晶振_18

 这些导出值与参考值相互比较,并由PI控制器更新。

嵌入式分享合集178_嵌入式硬件_19

 基于矢量的电机控制的一个固有优势是,可以采用同一原理,选择适合的数学模型去分别控制各种类型的AC, PM-AC 或者 BLDC电机。

BLDC电机的矢量控制

    BLDC电机是磁场定向矢量控制的主要选择。采用了FOC的无刷电机可以获得更高的效率,最高效率可以达到95%,并且对电机在高速时也十分有效率。

步进电机控制算法

    如下是步进电机控制示意图:

嵌入式分享合集178_嵌入式硬件_20

    步进电机控制通常采用双向驱动电流,其电机步进由按顺序切换绕组来实现。通常这种步进电机有3个驱动顺序:

单相全步进驱动:

    在这种模式中,其绕组按如下顺序加电,AB/CD/BA/DC (BA表示绕组AB的加电是反方向进行的)。这一顺序被称为单相全步进模式,或者波驱动模式。在任何一个时间,只有一相加电。

双相全步进驱动:

    在这种模式中,双相一起加电,因此,转子总是在两个极之间。此模式被称为双相全步进,这一模式是两极电机的常态驱动顺序,可输出的扭矩最大。

半步进模式:

    这种模式将单相步进和双相步进结合在一起加电:单相加电,然后双相加电,然后单相加电…,因此,电机以半步进增量运转。这一模式被称为半步进模式,其电机每个励磁的有效步距角减少了一半,其输出的扭矩也较低。

    以上3种模式均可用于反方向转动(逆时针方向),如果顺序相反则不行。

    通常,步进电机具有多极,以便减小步距角,但是,绕组的数量和驱动顺序是不变的。

通用DC控制算法

    通用电机的速度控制,特别是采用2种电路的电机:

  • 相角控制
  • PWM斩波控制

相角控制

    相角控制是通用电机速度控制的最简单的方法。通过TRIAC的点弧角的变动来控制速度。相角控制是非常经济的解决方案,但是,效率不太高,易于电磁干扰(EMI)。通用电机的相角控制示意图如下。

嵌入式分享合集178_正弦波_21

    以上示图表明了相角控制的机理,是TRIAC速度控制的典型应用。TRIAC门脉冲的周相移动产生了有效率的电压,从而产生了不同的电机速度,并且采用了过零交叉检测电路,建立了时序参考,以延迟门脉冲。

PWM斩波控制

    PWM控制是通用电机速度控制的,更先进的解决方案。在这一解决方案中,功率MOFSET,或者IGBT接通高频整流AC线电压,进而为电机产生随时间变化的电压,

嵌入式分享合集178_控制算法_22

  上图,是通用电机的PWM斩波控制的示意图,其开关频率范围一般为10-20 KHz,以消除噪声。这一通用电机的控制方法可以获得更佳的电流控制和更佳的EMI性能,因此,效率更高。

四、无刷直流电机的基本工作原理

STM32单片机开发时常见的无刷直流电机。

无刷直流电机简介

    无刷直流电机,英语缩写为BLDC(Brushless Direct Current Motor)。电机的定子是线圈,或者叫绕组。转子是永磁体,就是磁铁 。根据转子的位置,利用单片机来控制每个线圈的通电,使线圈产生的磁场变化,从而不断在前面勾引转子让转子转动,这就是无刷直流电机的转动原理。下面深入一下。

无刷直流电机的结构

    首先先从最基本的线圈说起。如下图。可以将线圈理解成长得像弹簧一样的东西。根据初中学过的右手螺旋法则可知,当电流从该线圈的上到下流过的时候,线圈上面的极性为N,下面的极性为S。

嵌入式分享合集178_嵌入式硬件_23

   现在再弄一根这样的线圈。然后摆弄一下位置。这样如果电流通过的话,就能像有两个电磁铁一样。

嵌入式分享合集178_晶振_24

    再弄一根,就可以构成电机的三相绕组。

嵌入式分享合集178_嵌入式硬件_25

  再加上永磁体做成的转子,就是一个无刷直流电动机了。

嵌入式分享合集178_嵌入式硬件_26

无刷直流电机的电流换向电路

    无刷直流电机之所以既只用直流电,又不用电刷,是因为外部有个电路来专门控制它各线圈的通电。这个电流换向电路最主要的部件是FET(场效应晶体管,Field-EffectTransitor)。可以把FET看作是开关。下图将FET标为AT(A相Top),AB(A相Bottom),BT,BB,CT,CB。FET的“开合”是由单片机控制的。

嵌入式分享合集178_晶振_27

用霍尔传感器确认转子位置

    霍尔传感器通过霍尔效应(Hall Effect),能检测出磁场强度的变化。根据高中物理所学的左手定则(用来判断带电导体在磁场中的受力方向),在霍尔传感器所在的回路中,磁场使带电粒子的运动发生偏转,带电粒子“撞到”霍尔传感器的两边,产生电位差。这时就可以用电压计接到霍尔传感器的两边,检测出这种电压变化,从而检测出磁场强度的变化,原理如下图所示。

嵌入式分享合集178_嵌入式硬件_28

电气角度和机械角度关系

    虽然在这里插入这么个小知识有点怪,但我还是觉得有必要的,因为我觉得当时学的时候不太好理解。在这里配合霍尔传感器的实例说可能好懂一点。机械角度就是电动机转子实际转过的角度。电气角度和机械角度的关系与转子的极对数有关。

电气角度 = 极对数 x 机械角度
  • 1.

    因为实际上线圈生成的磁场要吸引的是转子的磁极。所以对于电机的转动控制来说,我们只关心电气角度就好。

怎样控制无刷直流电机的转速?

    线圈两端的电压越大,通过线圈的电流越大,生成磁场越强,转子转动得就越快。因为接的电源是直流的,所以我们通常用PWM(PulseWidthModulation,脉冲宽度调制)来控制线圈两端电压的大小。PWM的简单原理如下。

嵌入式分享合集178_晶振_29

所以给无刷直流电机通电的时候,用单片机产生的PWM不断地控制FET的开合,能使线圈反复处于通电断电,通电断电的状态。通电时间长(Duty大),线圈两端的等效电压就大,产生的磁场强度就强,转子转动就快;通电时间短(Duty小),线圈两端的等效电压就小,产生的磁场强度就弱,转子转动就慢。

    PWM波形接到FET的Gate(门极)上,控制FET的开合。假设Gate上的电压为高时,FET闭合导通;Gate上的电压为低时,FET断开不通电。

    而且同一相上的上下两个FET须由反相的PWM波形控制,以防止上下两个FET同时导通,造成电流不通过电机而上下相同,造成短路。

    无刷直流电机的关键有三点:

  • 线圈绕组电流的换向顺序。电流的换向顺序决定了由线圈产生的磁场的旋转方向,从而决定了转子的转动方向
  • 霍尔传感器或其它手段来估计永磁体转子所处的位置,用于决定电流什么时候换向
  • 使用单片机产生的PWM波形来控制电机绕组的通电时间,来控制转子转动的速度
五、单片机基础概念:指令、数位、字节、存储器、总线

执行指令

    我们来思考一个问题,当我们在编程器中把一条指令写进单片机内部,然后取下单片机,单片机就可以执行这条指令。

    那么这条指令一定保存在单片机的某个地方,并且这个地方在单片机掉电后依然可以保持这条指令不会丢失,这是个什么地方呢?这个地方就是单片机内部的只读存储器即ROM(READ ONLY MEMORY)。

    为什么称它为只读存储器呢?刚才我们不是明明把两个数字写进去了吗?原来在89C51中的ROM是一种电可擦除的ROM,称为FLASH ROM,。刚才我们是用的编程器,在特殊的条件下由外部设备对ROM进行写的操作,在单片机正常工作条件下,只能从那面读,不能把数据写进去,所以我们还是把它称为ROM。

数的本质和物理现象

    我们知道,计算机可以进行数学运算,这令我们非常难以理解,它们只是一些电子元器件,怎么可以进行数学运算呢?

    我们人类做数学题如37+45是这样做的,先在纸上写37,然后在下面写45,然后大脑运算最后写出结果,运算的原材料是37和45,结果是82都是写在纸上的,计算机中又是放在什么地方呢?

    为了解决这个问题,先让我们做一个实验:这里有一盏灯,我们知道灯要么亮,要么不亮,就有两种状态,我们可以用‘0’和‘1’来代替这两种状态:规定亮为‘1’、不亮为‘0’。

    现在放上三盏灯,一共有几种状态呢?我们列表来看一下:000 / 001 / 010 / 011 / 100 / 101 / 110 / 111。我们来看,这个000 / 001 / 101 不就是我们学过的的二进制数吗?本来,灯的亮和灭只是一种物理现象,可当我们把它们按一定的顺序排好后,灯的亮和灭就代表了数字了。让我们再抽象一步,灯为什么会亮呢?是因为输出电路输出高电平,给灯通了电。因此,灯亮和灭就可以用电路的输出是高电平还是低电平来替代了。这样,数字就和电平的高、低联系上了。

数位的含义

    通过上面的实验我们已经知道:一盏灯亮或者说一根线的电平的高低,可以代表两种状态:0和1,实际上这就是一个二进制位。

    因此我们就把一根线称之为一“位”,用BIT表示。

    一根线可以表示0和1,两根线可以表达00 / 01 / 10 / 11四种状态,也就是可以表达0~3,而三根可以表达0~7,计算机中通常用8根线放在一起,同时计数,就可以表示0~255一共256种状态。

    这8根线或者8位就称之为一个字节(BYTE)。

存储器的构造

    存储器就是用来存放数据的地方。它是利用电平的高低来存放数据的,也就是说,它存放的实际上是电平的高、低,而不是我们所习惯认为的1234这样的数字,这样,我们的一个谜团就解开了。

    一个存储器就象一个个的小抽屉,一个小抽屉里有八个小格子,每个小格子就是用来存放“电荷”的,电荷通过与它相连的电线传进来或释放掉。至于电荷在小格子里是怎样存的,就不用我们操心了,你可以把电线想象成水管,小格子里的电荷就象是水,那就好理解了。存储器中的每个小抽屉就是一个放数据的地方,我们称之为一个“单元”。

    有了这么一个构造,我们就可以开始存放数据了,想要放进一个数据12,也就是00001100,我们只要把第二号和第三号小格子里存满电荷,而其它小格子里的电荷给放掉就行了。

    可问题出来了,一个存储器有好多单元,线是并联的,在放入电荷的时候,会将电荷放入所有的单元中,而释放电荷的时候,会把每个单元中的电荷都放掉。这样的话,不管存储器有多少个单元,都只能放同一个数,这当然不是我们所希望的。因此,要在结构上稍作变化。

    需要在每个单元上有个控制线,想要把数据放进哪个单元,就把一个信号给这个单元的控制线,这个控制线就把开关打开,这样电荷就可以自由流动了。而其它单元控制线上没有信号,所以开关不打开,不会受到影响。

    这样,只要控制不同单元的控制线,就可以向各单元写入不同的数据了。同样,如果要从某个单元中取数据,也只要打开相应的控制开关就行了。

存储器的译码

    那么,我们怎样来控制各个单元的控制线呢?这个还不简单,把每个单元的控制线都引到集成电路的外面不就行了吗?

    事情可没那么简单,一片27512存储器中有65536个单元,把每根线都引出来,这个集成电路就得有6万多个脚?不行,怎么办?要想法减少线的数量。

    有一种方法称这为译码,简单介绍一下:一根线可以代表2种状态,2根线可以代表4种状态,3根线可以代表8种,256种状态又需要几根线代表?8根线,所以65536种状态我们只需要16根线就可以代表了。

存储器的选片概念

    至此,译码的问题解决了,让我们再来关注另外一个问题。送入每个单元的八根线是用从什么地方来的呢?它就是从计算机上接过来的,一般地,这八根线除了接一个存储器之外,还要接其它的器件。

    这样问题就出来了,这八根线既然不是存储器和计算机之间专用的,如果总是将某个单元接在这八根线上,就有问题出现了:比如这个存储器单元中的数值是0FFH另一个存储器的单元是00H,那么这根线到底是处于高电平,还是低电平?怎样分辨?

    办法很简单,当外面的线接到集成电路的引脚进来后,不直接接到各单元去,中间再加一组开关就行了。平时我们让开关打开着,如果确实是要向这个存储器中写入数据,或要从存储器中读出数据,再让开关接通就行了。

    这组开关由三根引线选择:读控制端、写控制端和片选端。

    要将数据写入片中,先选中该片,然后发出写信号,开关就合上了,并将传过来的数据(电荷)写入片中。如果要读,先选中该片,然后发出读信号,开关合上,数据就被送出去了。

    读和写信号同时还接入到另一个存储器,但是由于片选端不同,所以虽有读或写信号,但没有片选信号,所以另一个存储器不会“误会”而开门,造成冲突。那么会不同时选中两片芯片呢?

    只要是设计好的系统就不会,因为它是由计算控制的,而不是我们人来控制的,如果真的出现同时出现选中两片的情况,那就是电路出了故障了,这不在我们的讨论之列。

总线概念

    从上面的介绍中我们已经看到,用来传递数据的八根线并不是专用的,而是很多器件大家共用的。

    所以我们称之为数据总线,UART、I2C、SPI、TTL、RS232、RS422、RS485、CAN、USB、SD卡、1-WIRE、Ethernet。总线英文名为BUS,总即公交车道,谁也可以走。而十六根地址线也是连在一起的,称之为地址总线。