自己的原文哦~ https://blog.51cto.com/whaosoft/14154062
如下图1是无刷电机霍尔信号的滤波电路,为了保证波形质量,简单的阻容滤波并不能完全解决实际复杂的工作环境所带来的波形异常,量产的无刷驱动模块也有该电路。
为了保证滤波质量,在RC滤波后面加一个NPN三极管,利用三极管自身的响应速度达到高质量滤波目的。
三极管响应速度有个最小宽度要求,通常是几十个纳秒到几百纳秒,信号大于最小脉宽要求才能保证正常输出而不失真。
图1:无刷电机霍尔信号滤波
通常在做驱动的时候,会遇到霍尔信号或编码器信号的处理,该信号是脉冲(方波)信号,在滤波之前的波形如图1左边所示,实际上毛刺会更多更杂。
毛刺宽度一般只有几十个纳秒,在RC滤波后面加上一个三极管后可根本滤除毛刺,让输出更干净,质量更高,如图1右边所示。
图2、图3、图4是实测无刷电机霍尔信号滤波前后的波形对比,红色波形代表霍尔信号滤波前的;蓝色波形代表霍尔信号滤波后的。滤波前的毛刺异常恐怖。
图2:滤波前后对比
图3:滤波前后对比(放大)
图4:滤波前后对比(再放大)
图5是实测无刷电机霍尔信号经过RC滤波后和三级管后滤波的波形对比,红色波形代表霍尔信号经过RC滤波后的,蓝色波形代表霍尔信号经过RC滤波再经过三极管滤波后的;
注:两个波形没有反相,是因为上面那个红色波形一直在左右晃动,随机抓取的。
图5:RC滤波和三级管滤波对比
要点:
①该类信号属于OC输出,所以需要加上拉电阻(R4);
②阻容滤波(R2、C1)是低通滤波,信号频率应低于fc=1/2πRC;
③三极管导通时必须工作在饱和状态,通常基极电流Ib>1mA能保证三极管工作在饱和状态;
④三极管输出波形与输入波形反相,这点在程序里可以做取反处理。
.
从温度传感器说起 — 温度传感器是一种用来测量环境或物体温度的器件,它们在各种应用中都扮演着重要的角色,从家用电器到工业控制系统都有广泛应用,像是热水器、干衣机、暖通空调、微波炉等家用电器,还可用于工业生产中的负责监控各种设备仪器,都需要采用温度传感器来实时监测温度的变化,用途相当广泛。
温度传感器的种类多样与特性不同
温度传感器的种类多样,且运作原理各自不同,以下介绍是一些常见的温度传感器的功能与特性及其运作原理。
1. 热电偶(Thermocouple):
热电偶 是由两种不同金属或合金的导线组成的热电偶回路,当两种导线的连接点受到温度变化时,会产生电动势(EMF)。这个产生的电压与温度变化之间有一定的关系,可以通过测量这个电压值来确定温度。
热电偶能够应对极端的温度范围,从非常低的温度到极高的温度,这使得它们在各种工业应用中非常有用。热电偶具有较高的灵敏度,能够快速响应温度变化,这使得它们适用于需要实时控制的应用。热电偶的输出电压与温度之间的关系通常是线性的,这使得简单的电路可以用来解读和量测温度。
由于热电偶主要使用金属或合金制造,因此它们对于一些腐蚀性气体和液体相对较为耐受。热电偶通常能够承受一定的压力,这使得它们适用于一些需要耐压性的环境,如高压加热炉。目前有多种不同材料的热电偶,每种都具有不同的特性。
相较于一些其他高温测量技术,热电偶的制造成本相对较低,使其成为一种经济实用的温度传感解决方案。由于热电偶的输出是电压信号,可以在较长的距离上进行测量,这在一些需要在远距离处测量温度的应用中非常有优势。
更多产品型号: DFR0198, 240-080, SEN-11050 , 3290 , SEN0227 ,642 , 455-00103, 455-00036 , 5024-0762 , CTTS-186019-F02A , ES120-0030 , 455-00112, 455-00124 , E52-CA1GTY 2M, GE-1711ATM, GE-1797ATM ,GE-1797, E52-CA1GTY 1M , E52-CA6AFD1S10 5M
2. 热敏电阻(Thermistor):
热敏电阻
热敏电阻是一种特殊的电阻器件,其电阻值会随着温度变化而变化。通常,热敏电阻的电阻值会随着温度升高而降低,或者随着温度升高而增加,这取决于热敏电阻的材料。一般来说,当温度升高时,热敏电阻的电阻值会下降(NTC - 负温度系数),或者有些热敏电阻的电阻值会随温度升高而上升(PTC - 正温度系数)。
此外,热敏电阻对温度变化非常敏感,这使得它们在需要高灵敏度的应用中特别有用,如精确的温度测量和控制。部分热敏电阻的电阻-温度特性是线性的,即电阻随着温度呈现线性变化,但有些则是非线性的,其电阻-温度曲线可能较复杂。
热敏电阻可用于广泛的温度范围,从极低温度到极高温度,取决于所选用的热敏电阻材料。热敏电阻具有相对较快的响应时间,能够实时反应温度的变化,这使得它们适用于需要实时控制的应用。不同的热敏电阻材料和制造工艺可以调整其性能,如特定温度范围、精确度和灵敏度。
热敏电阻通常制造成小型、简单的器件,这使得它们在成本和体积方面较为经济,适用于多种应用。大多数热敏电阻在操作时消耗较低的功率,这使得它们在许多电池供电的应用中非常实用。
更多产品型号: ERT-J0EM103J, NTCG103JF103FT1, ERT-J0EG103JA, ERT-JZEG103FA, ERT-JZEV104H, NTCG203JH472JT1, NCP21XM221J03RA, NCU18WF104F60RB, NCP21XW223J03RA, PRF18BC471QB5RB, NCP21XV103J03RA, B57256V5473F360, NXRT15WF104FA1B040, NCP21WF104J03RA, NCP15WB473J03RC, ERT-J1VA101J, ERT-J1VG103FA, ERT-J1VR103J, NCU15XH103F60RC,ERT-J0ET202J
3. 电阻温度检测器(RTD - Resistance Temperature Detector):
RTD 电阻温度传感器
电阻温度检测器(RTD)是一种电阻会随着温度变化而变化的器件,它是基于材料的电阻会随温度变化而变化的原理,但与热敏电阻不同,电阻温度检测器的变化与温度呈现线性关系。常见的材料包括白金、镍和铜,其中白金RTD是应用最广泛的。
在一个相对较小的温度范围内,RTD的电阻值与温度之间通常呈现线性关系,这使得温度的测量和校正相对较简单。RTD通常提供较高的测量精确度,尤其是在相对较窄的温度范围内,这使得它在需要高度准确的应用中非常有用。
RTD的电阻值相对稳定,对时间和使用条件的变化的影响较小,这增加了传感器的可靠性,可用不同材料的热电阻应对不同的温度范围,从极低温度到极高温度,满足各种应用需求。
RTD通常具有较小的温度漂移,即在不同温度下的测量稳定性较高。RTD通常不需要额外的加热器件,因此功耗相对较低,适用于长时间运行且要求节能的应用。RTD的温度-电阻特性通常相对稳定,容易进行校正,以确保测量的准确性。RTD对外部环境的影响相对较小,不受湿度、压力等因素的影响。
更多产品型号: PTS080501B100RP100, NB-PTCO-002, TMP6131DECT, PTS120601B1K00P100, NB-PTCO-011, 32207605, P0K1.202.3K.A.010, NB-PTCO-024, 32208571, 32207638, 32208502, PTS060301B100RP100, NB-PTCO-035, 32207615,PPG501JA, PTS080501B500RP100, PTS0603M1B100RP100, 32208548, PTS1206M1B100RP100, HDC3022DEJR
4. IC型温度传感器(Temperature Sensor IC):
微型温湿度传感器芯片
IC型温度传感器通常是一种将温度转换为电压或数字信号的集成电路器件,这些传感器广泛应用于各种电子设备和工业应用中。IC型温度传感器通常具有较高的温度测量精确度,可以满足对精确度要求较高的应用。大多数IC型温度传感器提供数字输出,可以直接与微控制器、微处理器或其他数字电子系统连接。这类传感器通常是高度集成的器件,集成了传感器件、信号处理电路和通信接口,节省了系统设计的成本和空间。
很多IC型温度传感器的功耗相对较低,使其适用于电池供电或要求节能的应用。这些传感器可覆盖广泛的温度范围,包括室内温度、低温、高温等,覆盖了多种应用需求。一些IC型温度传感器内置了校正和补偿电路,能够提高其在不同条件下的性能稳定性。
多数IC型温度传感器支持标准的数字通信接口,例如I2C、SPI,这使得与其他数字器件的连接更加方便。由于IC型温度传感器通常支持内部处理和校正,对使用者来说比较简便,不需要复杂的外部电路。
更多产品型号: KTY81/110 , 112 , SE95DP,118, LM335ADT, MCP9700T-E/TT, MCP9501PT-095E/OT, TMP6131DECR, LMT01QLPGQ1, MCP98244T-BE/MNY, TMP6131ELPGMQ1, MCP9700AT-E/LT, MCP9700T-E/LT,TC74A0-3.3VCTTR, STS40-CD1B-R3, MCP9808T-E/MC, MCP9700A-E/TO, AS6200C-AWLT-L, MCP9808T-E/MS, MLX90632SLD-BCB-000-RE, AT30TS74-SS8M-T, PCT2075TP,147
5. 红外线温度传感器(Infrared Temperature Sensor):
红外测温枪
红外线温度传感器是一种非接触式温度传感技术,无需与物体直接接触,而是通过检测物体发射的红外线辐射来测量物体的表面温度。它们检测物体发射的红外线辐射并转换为温度数据。这种传感器通常用于远距离和非接触式的温度测量。红外线温度传感器通常具有快速的响应时间,能够在短时间内提供实时的温度数据。
红外线温度传感器对不同物体表面的辐射特性具有适应性,并且不受物体表面材料的影响,因此适用于各种物体,并具有广泛的温度范围,从极低温度到极高温度都可以进行准确测量,在一些合适的应用条件下,红外线温度传感器可以提供较高的测量精确度。
红外线温度传感器不受光线、湿度等外部环境因素的影响,因此适用于一些特殊环境,如高辐射、灰尘或潮湿的场合,且由于红外线温度传感器是非接触式的,因此可以在较远的距离上进行测量,这对于需要在远距离处进行温度监测的应用非常有用,可以被安装在难以接近的地方,并通过无线或有线方式进行远程监测。
更多产品型号: TPIS 1S 1385 / 5029, MLX90632SLD-BCB-000-RE, TPIS 1T 1086 L5.5,
MLX90614ESF-AAA-000-TU, MLX90614ESF-DCA-000-TU, AMG8833, MLX90614ESF-ACC-000-TU, MLX90614ESF-DCC-000-TU, MLX90614ESF-BCC-000-TU, MLX90614KSF-AAA-000-TU, MLX90614KSF-ACC-000-TU, MLX90614ESF-ACF-000-TU, MLX90614ESF-DCH-000-TU, MLX90614ESF-BCH-000-TU, MLX90614ESF-BCI-000-TU, ZTP-148SRC1, ZTP-148SR, ZTP-135SR
温度传感器的选择与设计技巧
不同类型的传感器有不同的运作原理,但大致上可归纳为对温度变化产生敏感的材料或原理。测量这种材料或原理的变化,并转换为电信号或其他形式的输出,以表示温度变化。选择适当的温度传感器取决于应用的需求,例如准确度、灵敏度、反应时间、温度范围等因素。
在应用中使用温度传感器时,设计技巧是关键,以确保系统能够准确、稳定地测量温度。在设计系统时,首先需根据应用的需求和环境条件,选择适当的温度传感器类型,如热敏电阻、热电偶、红外线传感器等,然后考虑系统所需的温度测量精确度和分辨率,并选择相应的传感器,较高精确度通常需要更昂贵的传感器。
使用温度传感器时应先实施校正程序,以确保传感器的输出与实际温度之间的一致性。校正应定期执行,尤其在传感器长时间使用后或环境条件发生变化时。在设计中也需要考虑防止电磁干扰的方法,以避免传感器输出受到外部电磁场的影响,这可能包括使用屏蔽材料或远离电磁源。
此外,还需考虑传感器的工作环境,包括温度范围、湿度、压力等因素,以确保所选择的传感器能够在预期的环境中正确运作,并需考虑传感器的电源需求和功耗,尤其是在需要长时间运行或是使用电池供电的情况下,合理的电源管理有助于延长系统的运行时间。
在设计中还需要加入保护措施,以防止传感器受到过电压、过电流或静电放电等可能损坏传感器的因素。在可能受到温度变化影响的情况下,考虑使用温度补偿技术,以提高温度传感器的准确性。
在设计时还需要考虑如何处理和传输传感器的数据,这可能包括使用微控制器、数据处理算法和通信协议。正确的安装和放置传感器是确保正确温度测量的关键,应避免将传感器放置在可能受到外部热源或冷源影响的位置。上述的这些技巧将有助于确保温度传感器在特定应用中可靠地执行其功能。
温度传感器常遇见的问题与解决方案
在设计中使用温度传感器时,可能会面临一些常见的问题,像是校正和精确度问题,传感器的输出可能受到制造差异或长时间使用而产生的漂移影响,因此需要定期进行校正,可使用已知温度的参考点来进行调整。此外,应选择具有较高精确度的传感器,并在需要时采用多点校正。
在设计时也常会遇到电磁干扰的问题,外部电磁场可能影响传感器的输出,导致不准确的温度测量,此时应该使用屏蔽材料,远离可能的电磁场,或者使用差动输入设计来减少电磁干扰的影响。
此外,应用环境条件也会对温度传感器造成影响,在极端的环境条件,如高温、低温、高湿度等,可能影响传感器的性能。此时应选择符合应用需求的传感器,并确保传感器能够适应预期的环境条件。若有必要,可使用防护罩、加热器件或冷却系统等方法,以维持传感器适当的工作条件。
传感器的高功耗可能影响系统的电源管理,尤其在使用电池供电的应用中。解决方法是针对低功耗应用选择低功耗的传感器,并实施有效的电源管理策略,如睡眠模式、动态功率调节等。
另一方面,一些传感器可能在极端温度条件下产生非线性或漂移,此时应进行适当的温度校正,使用传感器的线性区间,并在可能的情况下选择具有较低温度漂移的传感器。当然,若传感器的安装位置不当,也容易受到外部热源或冷源的影响。此时应确保传感器的安装位置是适当的,远离可能影响其性能的热源或冷源。
温度传感器也需要进行数据处理和通信,此时可能引入错误,导致不准确的温度读数。所以应使用可靠的数据处理算法,并确保使用准确的通信协议,以确保传感器数据的可靠性。
类型
应用特性
热电偶
热电偶是一种广泛应用于高温和极端环境中的温度传感器,其特性使得它适合于各种工业和科学应用。
热敏电阻
热敏电阻是一种经济实用、应用广泛的温度传感器,其优势在于灵敏度高、成本低、且可适应多种应用需求。
电阻温度检测器(RTD)
电阻温度检测器以其高精确度、稳定性和适应性强的特性,成为工业控制和温度监测应用中常见的传感器之一。
IC型温度传感器
IC型温度传感器在精确度、集成度、节能性等方面具有优势,使其成为许多电子产品和工业应用中常见的温度传感解决方案。
红外线温度传感器
红外线温度传感器具有非接触、快速、适应性强、适用于不同温度范围等特性,使得它在许多行业和应用中都有广泛的应用价值。
结语
本文所提到的这些关于温度传感器的问题和解决方法,提供了在使用温度传感器时的一些建议,但具体的解决方法可能还需取决于特定的应用和传感器类型,必须综合考虑各种因素,包括环境、功耗、精确度要求等,将有助于确保温度传感系统的正确运作。
电容故障
电容损坏引发的故障在电子设备中是最高的,其中尤其以电解电容的损坏最为常见。电容损坏表现为:容量变小、完全失去容量、漏电、短路。
电容在电路中所起的作用不同,引起的故障也各有特点:在工控电路板中,数字电路占绝大多数,电容多用做电源滤波,用做信号耦合和振荡电路的电容较少。用在开关电源中的电解电容如果损坏,则开关电源可能不起振,没有电压输出;或者输出电压滤波不好,电路因电压不稳而发生逻辑混乱,表现为机器工作时好时坏或开不了机,如果电容并在数字电路的电源正负极之间,故障表现同上。
这在电脑主板上表现尤其明显,很多电脑用了几年就出现有时开不了机,有时又可以开机的现象,打开机箱,往往可以看见有电解电容鼓包的现象,如果将电容拆下来量一下容量,发现比实际值要低很多。
电容的寿命与环境温度直接有关,环境温度越高,电容寿命越短。这个规律不但适用电解电容,也适用其它电容。所以在寻找故障电容时应重点检查和热源靠得比较近的电容,如散热片旁及大功率元器件旁的电容,离其越近,损坏的可能性就越大。所以在检修查找时应有所侧重。
有些电容漏电比较严重,用手指触摸时甚至会烫手,这种电容必须更换。在检修时好时坏的故障时,排除了接触不良的可能性以外,一般大部分就是电容损坏引起的故障了。所以在碰到此类故障时,可以将电容重点检查一下,换掉电容后往往令人惊喜。
电阻故障
常看见许多初学者在检修电路时在电阻上折腾,又是拆又是焊的,其实修得多了,你只要了解了电阻的损坏特点,就不必大费周章。
电阻是电器设备中数量最多的元件,但不是损坏率最高的元件。电阻损坏以开路最常见,阻值变大较少见,阻值变小十分少见。常见的有碳膜电阻、金属膜电阻、线绕电阻和保险电阻几种。
前两种电阻应用最广,其损坏的特点一是低阻值 (100Ω以下) 和高阻值 (100kΩ以上) 的损坏率较高,中间阻值 (如几百欧到几十千欧) 的极少损坏;二是低阻值电阻损坏时往往是烧焦发黑,很容易发现,而高阻值电阻损坏时很少有痕迹。
线绕电阻一般用作大电流限流,阻值不大;圆柱形线绕电阻烧坏时有的会发黑或表面爆皮、裂纹,有的没有痕迹;水泥电阻是线绕电阻的一种,烧坏时可能会断裂,否则也没有可见痕迹;保险电阻烧坏时有的表面会炸掉一块皮,有的也没有什么痕迹,但绝不会烧焦发黑。根据以上特点,在检查电阻时可有所侧重,快速找出损坏的电阻。
根据以上列出的特点,我们先可以观察一下电路板上低阻值电阻有没有烧黑的痕迹,再根据电阻损坏时绝大多数开路或阻值变大以及高阻值电阻容易损坏的特点,我们就可以用万用表在电路板上先直接量高阻值的电阻两端的阻值。
如果量得阻值比标称阻值大,则这个电阻肯定损坏 (要注意等阻值显示稳定后才下结论,因为电路中有可能并联电容元件,有一个充放电过程) ,如果量得阻值比标称阻值小,则一般不用理会它。这样在电路板上每一个电阻都量一遍,即使“错杀”一千,也不会放过一个了。
运算放大器故障
运算放大器好坏的判别对相当多的电子维修者有一定的难度,不只文化程度的关系,在此与大家共同探讨一下,希望对大家有所帮助。
理想运算放大器具有“虚短”和“虚断”的特性,这两个特性对分析线性运用的运放电路十分有用。为了保证线性运用,运放必须在闭环(负反馈)下工作。如果没有负反馈,开环放大下的运放成为一个比较器。如果要判断器件的好坏,先应分清楚器件在电路中是做放大器用还是做比较器用。
根据放大器虚短的原理,就是说如果这个运算放大器工作正常的话,其同向输入端和反向输入端电压必然相等,即使有差别也是mv级的,当然在某些高输入阻抗电路中,万用表的内阻会对电压测试有点影响,但一般也不会超过0.2V,如果有0.5V以上的差别,则放大器必坏无疑。
如果器件是做比较器用,则允许同向输入端和反向输入端不等。同向电压>反向电压,则输出电压接近正的最大值;同向电压<反向电压,则输出电压接近0V或负的最大值(视乎双电源或单电源)。如果检测到电压不符合这个规则,则器件必坏无疑!这样你不必使用代换法,不必拆下电路板上的芯片就可以判断运算放大器的好坏了。
SMT元件故障
有些贴片元件非常细小,用普通万用表表笔测试检修时很不方便,一是容易造成短路,二是对涂有绝缘涂层的电路板不便接触到元件管脚的金属部分。这里告诉大家一个简便方法,会给检测带来不少方便。
取两枚最小号的缝衣针,将之与万用表笔靠紧,然后取一根多股电缆里的细铜线,用细铜线将表笔和缝衣针绑在一起,再用焊锡焊牢。这样用带有细小针尖的表笔去测那些SMT元件的时候就再无短路之虞,而且针尖可以刺破绝缘涂层,直捣关键部位,再也不必费神去刮那些膜膜了。
公共电源短路故障
电路板维修中,如果碰到公共电源短路的故障往往头大,因为很多器件都共用同一电源,每一个用此电源的器件都有短路的嫌疑。
如果板上元件不多,采用“锄大地”的方式终归可以找到短路点;如果元件太多,“锄大地”能不能锄到状况就要靠运气了。在此推荐一比较管用的方法,采用此法,事半功倍,往往能很快找到故障点。
要有一个电压电流皆可调的电源,电压0-30V,电流0-3A,这种电源不贵,大概300元左右。将开路电压调到器件电源电压水平,先将电流调至最小,将此电压加在电路的电源电压点如74系列芯片的5V和0V端,视乎短路程度,慢慢将电流增大。用手摸器件,当摸到某个器件发热明显,这个往往就是损坏的元件,可将之取下进一步测量确认。当然操作时电压一定不能超过器件的工作电压,并且不能接反,否则会烧坏其它好的器件。
板卡故障
工业控制用到的板卡越来越多,很多板卡采用金手指插入插槽的方式。由于工业现场环境恶劣,多尘、潮湿、多腐蚀气体的环境易使板卡产生接触不良故障,很多朋友可能通过更换板卡的方式解决了问题,但购买板卡的费用非常可观,尤其某些进口设备的板卡。
其实大家不妨使用橡皮擦在金手指上反复擦几下,将金手指上的污物清理干净后,再试机,没准就解决了问题,方法简单又实用。
电气故障
各种时好时坏电气故障从概率大小来讲大概包括以下几种情况:
.
在高频领域,信号或电磁波必须沿着具有均匀特征阻抗的传输路径传播。一旦阻抗失配或不连续现象,一部分信号被反射回发送端,剩余部分电磁波将继续被传输到接收端。
信号反射和衰减的程度取决于阻抗不连续的程度。当失配阻抗幅度增加时,更大部分的信号会被反射,接收端观察到的信号衰减或劣化也就更多。
阻抗失配现象在交流耦合(又称隔直)电容的SMT焊盘、板到板连接器以及电缆到板连接器(如SMA)处经常会遇到。
在如下图1所示的交流耦合电容SMT焊盘的案例中,沿着具有100Ω差分阻抗和5mil铜箔宽度的PCB走线传播的信号,在到达具有更宽铜箔(如0603封装的30mil宽)的SMT焊盘时将遇到阻抗不连续性。这种现象可以用下方公式(1)和式(2)解释。
铜箔的横截面积或宽度的增加将增大条状电容,进而给传输通道的特征阻抗带来电容不连续性,即负的浪涌。
为了尽量减小电容的不连续性,需要裁剪掉位于SMT焊盘正下方的参考平面区域,并在内层创建铜填充,分别如图2和图3所示。
这样可以增加SMT焊盘与其参考平面或返回路径之间的距离,从而减小电容的不连续性。同时应插入微型缝合过孔,用于在原始参考平面和内层新参考铜箔之间提供电气和物理连接,以建立正确的信号返回路径,避免EMI辐射问题。
但是,距离“d ”不应增加得太大,否则将使条状电感超过条状电容并引起电感不连续性。式中:
相同概念也可以应用于板到板(B2B)和电缆到板(C2B)连接器的SMT焊盘。
下面将通过TDR和插损分析完成上述概念的验证。
分析是通过在EMPro软件中建立SMT 焊盘3D 模型, 然后导入Keysight ADS中进行TDR和插损仿真完成的。
分析交流耦合电容的SMT焊盘效应
在EMPro中建立一个具有中等损耗基板的SMT的3D模型,其中一对微带差分走线长2英寸、宽5mil,采用单端模式,与其参考平面距离3.5mil,这对走线从30mil宽SMT焊盘的一端进入,并从另一端引出。
图4和图5分别显示了仿真得到的TDR和插损图。
参考平面没有裁剪的SMT设计造成的阻抗失配是12Ω,插损在20GHz时为-6.5dB。一旦对SMT焊盘下方的参考平面区域进行了裁剪(其中“d ”设为10mil),失配阻抗就可以减小到2Ω,20GHz时的插损减小到-3dB。
进一步增加“d ”会导致条状电感超过电容,从而引起电感不连续性,转而使插损变差(即-4.5dB)。
分析B2B连接器的SMT焊盘效应
在EMPro中建立一个B2B连接器的SMT焊盘的3D模型,其中连接器引脚间距是20mil,引脚宽度是6mil,焊盘连接到一对长5英寸、宽5mil,采用单端模式的微带差分走线,走线距其参考平面3.5mil。
SMT焊盘的厚度是40mil,包括连接器引脚和焊锡在内的这个厚度几乎是微带PCB走线厚度的40倍。
铜厚度的增加将导致电容的不连续性和更高的信号衰减。这种现象可以分别由图6和图7所示的TDR和插损仿真图中看出来。
通过裁剪掉SMT焊盘正下方适当间距“d ”(即7mil)的铜区域,可以最大限度地减小阻抗失配。
小结
本文的分析证明,裁剪掉SMT焊盘正下方的参考平面区域可以减小阻抗失配,增加传输线的带宽。
SMT焊盘与内部参考铜箔之间的距离取决于SMT焊盘的宽度,以及包括连接器引脚和焊锡在内的SMT焊盘有效厚度。在条件允许的情况下,PCB投产之前应先进行3D建模和仿真,确保构建的传输通道具有良好的信号完整性。
.
信号反射现象
信号传输过程中感受到阻抗的变化,就会发生信号的反射。这个信号可能是驱动端发出的信号,也可能是远端反射回来的反射信号。根据反射系数的公式,当信号感受到阻抗变小,就会发生负反射,反射的负电压会使信号产生下冲。信号在驱动端和远端负载之间多次反射,其结果就是信号振铃。大多数芯片的输出阻抗都很低,如果输出阻抗小于PCB走线的特性阻抗,那么在没有源端端接的情况下,必然产生信号振铃。
什么是过冲(overshoot):过冲就是第一个峰值或谷值超过设定电压——对于上升沿是指最高电压而对于下降沿是指最低电压。
什么是下冲(undershoot):下冲是指下一个谷值或峰值。过分的过冲能够引起保护二极管工作,导致过早地失效。过分的下冲能够引起假的时钟或数据错误(误作)。
过冲非常相关的是振铃,它紧随过冲发生,信号会跌落到低于稳态值,然后可能会反弹到高于稳态,这个过程可能持续一段时间,直到稳定接近于稳态。振铃持续的时间也叫做安定时间。振荡(ringing)和环绕振荡(rounding)的现象是反复出现过冲和下冲。
抑制信号反射等电路设计技巧
如果时钟信号链路比较长,为了解决信号反射问题,会在时钟输出信号上串接一个比如22或者33欧姆的小电阻。
而且随着电阻的加大,振铃会消失,然而信号上升沿不再那么陡峭了,串联电阻是为了减小反射波,避免反射波叠加引起过冲。
这个解决方法叫阻抗匹配,阻抗在信号完整性问题中占据着极其重要的地位。
.
从底层硬件角度出发剖析了一下CPU对代码的识别和读取,内容之精彩,读完感觉学到的很多东西瞬间联系起来了,分享给大家。
先说一下半导体,啥叫半导体?就是介于导体和绝缘体中间的一种东西,比如二极管。
电流可以从A端流向C端,但反过来则不行。你可以把它理解成一种防止电流逆流的东西。
当C端10V,A端0V,二极管可以视为断开。
当C端0V,A端10V,二极管可以视为导线,结果就是A端的电流源源不断的流向C端,导致最后的结果就是A端=C端=10V。
等等,不是说好的C端0V,A端10V么?咋就变成结果是A端=C端=10V了?你可以把这个理解成初始状态,当最后稳定下来之后就会变成A端=C端=10V。
文科的童鞋们对不住了,实在不懂问高中物理老师吧。反正你不能理解的话就记住这种情况下它相当于导线就行了。
利用半导体的这个特性,我们可以制作一些有趣的电路,比如【与门】。
此时A端B端只要有一个是0V,那Y端就会和0V地方直接导通,导致Y端也变成0V。只有AB两端都是10V,Y和AB之间才没有电流流动,Y端也才是10V。
我们把这个装置成为【与门】,把有电压的地方计为1,0电压的地方计为0。至于具体几V电压,那不重要。也就是AB必须同时输入1,输出端Y才是1;AB有一个是0,输出端Y就是0。
其他还有【或门】【非门】和【异或门】,跟这个都差不多,或门就是输入有一个是1输出就是1,输入00则输入0。
非门也好理解,就是输入1输出0,输入0输出1。
异或门难理解一些,不过也就那么回事,输入01或者10则输出1,输入00或者11则输出0。(即输入两个一样的值则输出0,输入两个不一样的值则输出1)。
这几种门都可以用二极管或者三极管做出来,具体怎么做就不演示了,有兴趣的童鞋可以自己试试。当然实际并不是用二极管三极管做的,因为它们太费电了。实际是用场效应管(也叫MOS管)做的。
然后我们就可以用门电路来做CPU了。当然做CPU还是挺难的,我们先从简单的开始:加法器。加法器顾名思义,就是一种用来算加法的电路,最简单的就是下面这种。
AB只能输入0或者1,也就是这个加法器能算0+0,1+0或者1+1。
输出端S是结果,而C则代表是不是发生进位了,二进制1+1=10嘛。这个时候C=1,S=0。
费了大半天的力气,算个1+1是不是特别有成就感?
那再进一步算个1+2吧(二进制01+10),然后我们就发现了一个新的问题:第二位需要处理第一位有可能进位的问题,所以我们还得设计一个全加法器。
每次都这么画实在太麻烦了,我们简化一下。
也就是有3个输入2个输出,分别输入要相加的两个数和上一位的进位,然后输入结果和是否进位。然后我们把这个全加法器串起来:
我们就有了一个4位加法器,可以计算4位数的加法也就是15+15,已经达到了幼儿园中班水平,是不是特别给力?
做完加法器我们再做个乘法器吧,当然乘任意10进制数是有点麻烦的,我们先做个乘2的吧。
乘2就很简单了,对于一个2进制数数我们在后面加个0就算是乘2了。比如:
5=101(2)
10=1010(2)
以我们只要把输入都往前移动一位,再在最低位上补个零就算是乘2了。具体逻辑电路图我就不画,你们知道咋回事就行了。
那乘3呢?简单,先位移一次(乘2)再加一次。乘5呢?先位移两次(乘4)再加一次。
所以一般简单的CPU是没有乘法的,而乘法则是通过位移和加算的组合来通过软件来实现的。这说的有点远了,我们还是继续做CPU吧。
现在假设你有8位加法器了,也有一个位移1位的模块了。串起来你就能算(A+B)×2了!激动人心,已经差不多到了准小学生水平。
那我要是想算A×2+B呢?简单,你把加法器模块和位移模块的接线改一下就行了,改成输入A先过位移模块,再进加法器就可以了。
你的意思是我改个程序还得重新接线?
所以你以为呢?
实际上,编程就是把线来回插啊。惊喜不惊喜?意外不意外?
早期的计算机就是这样编程的,几分钟就算完了但插线好几天。而且插线是个细致且需要耐心的工作,所以那个时候的程序员都是清一色的漂亮女孩子,穿制服的那种,就像照片上这样。是不是有种生不逢时的感觉?
插线也是个累死人的工作。所以我们需要改进一下,让CPU可以根据指令来相加或者乘2。这里再引入两个模块,一个叫flip-flop,简称FF,中文好像叫触发器,如下图这样。
这个模块的作用是存储1bit数据。比如上面这个RS型的FF,R是Reset,输入1则清零。S是Set,输入1则保存1。RS都输入0的时候,会一直输出刚才保存的内容。
我们用FF来保存计算的中间数据(也可以是中间状态或者别的什么),1bit肯定是不够的,不过我们可以并联嘛,用4个或者8个来保存4位或者8位数据。这种我们称之为寄存器(Register)。另外一个叫MUX,中文叫选择器,如下图就是一个选择器。
这个就简单了,sel输入0则输出i0的数据,i0是什么就输出什么,01皆可。同理sel如果输入1则输出i1的数据。当然选择器可以做的很长,比如这种四进一出的具体原理不细说了,其实看看逻辑图琢磨一下就懂了,知道有这个东西就行了。下图是一个四进一出-选择器。
有这个东西我们就可以给加法器和乘2模块(位移)设计一个激活针脚。
这个激活针脚输入1则激活这个模块,输入0则不激活。这样我们就可以控制数据是流入加法器还是位移模块了。
于是我们给CPU先设计8个输入针脚,4位指令,4位数据。
我们再设计3个指令:
为什么这么设计呢,刚才也说了,我们可以为每个模块设计一个激活针脚。然后我们可以分别用指令输入的第二第三第四个针脚连接寄存器,加法器和位移器的激活针脚。
这样我们输入0100这个指令的时候,寄存器输入被激活,其他模块都是0没有激活,数据就存入寄存器了。同理,如果我们输入0001这个指令,则加法器开始工作,我们就可以执行相加这个操作了。
这里就可以简单回答这个问题的第一个小问题了:CPU是为什么能看懂这些二级制的数呢?
为什么CPU能看懂,因为CPU里面的线就是这么接的呗。你输入一个二进制数,就像开关一样激活CPU里面若干个指定的模块以及改变这些模块的连同方式,最终得出结果。
几个可能会被问的问题
Q:CPU里面可能有成千上万个小模块,一个32位/64位的指令能控制那么多吗?
A:我们举例子的CPU里面只有3个模块,就直接接了。真正的CPU里会有一个解码器(decoder),把指令翻译成需要的形式。
Q:你举例子的简单CPU,如果我输入指令0011会怎么样?
A:当然是同时激活了加法器和位移器从而产生不可预料的后果,简单的说因为你使用了没有设计的指令,所以后果自负呗。在真正的CPU上这么干大概率就是崩溃呗,不过肯定会有各种保护性的设计。
细心的小伙伴可能发现一个问题:你设计的指令【0001,数据与寄存器相加,结果保存到寄存器】这个一步做不出来吧?
毕竟还有一个回写的过程,实际上确实是这样。我们设计的简易CPU执行一个指令差不多得三步,读取指令,执行指令,写寄存器。
经典的RISC设计则是分5步:读取指令(IF),解码指令(ID),执行指令(EX),内存操作(MEM),写寄存器(WB)。我们平常用的x86的CPU有的指令可能要分将近20个步骤。
你可以理解有这么一个开关,我们啪的按一下,CPU就走一步,你按的越快CPU就走的越快。咦?听说你有个想法?少年,你这个想法很危险啊,姑且不说你能不能按那么快。拿现代的CPU来说,也就2GHz多吧,大概一秒也就按个20亿下吧。
就算你能按那么快,虽然速度是上去了,但功耗会大大增加,发热上升稳定性下降。江湖上确实有这种玩法,名曰超频,不过新手不推荐你尝试哈。
那CPU怎么知道自己走到哪一步了呢?前面不是介绍了FF么,这个不光可以用来存中间数据,也可以用来存中间状态,也就是走到哪了。
具体的设计涉及到FSM(finite-state machine),也就是有限状态机理论,以及怎么用FF实装。这个也是很重要的一块,考试必考哈,只不过跟题目关系不大,这里就不展开讲了。
我们再继续刚才的讲,现在我们有3个指令了。我们来试试算个(1+4)X2+3吧。
0100 0001 ;寄存器存入1
0001 0100 ;寄存器的数字加4
0010 0000 ;乘2
0001 0011 ;再加三
太棒了,靠这台计算机我们应该可以打败所有的幼儿园小朋友,称霸大班了。而且现在我们用的是4位的,如果换成8位的CPU完全可以吊打低年级小学生了!
实际上用程序控制CPU是个挺高级的想法,再此之前计算机(器)的CPU都是单独设计的。
1969年一家日本公司BUSICOM想搞程控的计算器,而负责设计CPU的美国公司也觉得每次都重新设计CPU是个挺傻X的事,于是双方一拍即合,于1970年推出一种划时代的产品,世界上第一款微处理器4004。
这个架构改变了世界,那家负责设计CPU的美国公司也一步一步成为了业界巨头。哦对了,它叫Intel,对,就是噔噔噔噔的那个。
我们把刚才的程序整理一下:
"01000001000101000010000000010011"
你来把它输入CPU,我去准备一下去幼儿园大班踢馆的工作。
什么!?等我们输完了人家小朋友掰手指都能算出来了?
没办法机器语言就是这么反人类。哦,忘记说了,这种只有01组成的语言被称之为机器语言(机器码),是CPU唯一可以理解的语言。不过你把机器语言让人读,绝对一秒变典韦,这谁也受不了。
所以我们还是改进一下吧。不过话虽这么讲,也就往前个30年,直接输入01也是个挺普遍的事情。
于是我们把我们机器语言写成的程序:
0100 0001 ;寄存器存入1
0001 0100 ;寄存器的数字加4
0010 0000 ;乘2
0001 0011 ;再加三
改写成:
MOV 1 ;寄存器存入1
ADD 4 ;寄存器的数字加4
SHL 0 ;乘2(介于我们设计的乘法器暂时只能乘2,这个0是占位的)
ADD 3 ;再加三
是不是容易读多了?这就叫汇编语言。
汇编语言的好处在于它和机器语言一一对应。
也就是我们写的汇编可以完美的改写成机器语言,直接指挥cpu,进行底层开发;我们也可以把内存中的数据dump出来,以汇编语言的形式展示出来,方便调试和debug。
汇编语言极大的增强了机器语言的可读性和开发效率,但对于人类来说也依然是太晦涩了,于是我们又发明了高级语言,以近似于人类的语法来表现数据结构和算法。
比如很多语言都可以这么写:
a=(1+4)*2+3;
当然这样计算机是不认识的,我们要把它翻译成计算机认识的形式,这个过程叫编译,用来做这个事的东西叫编译器。
具体怎么把高级语言弄成汇编语言/机器语言的,一本书都写不完,我们就举个简单的例子。
我们把:
(1+4)*2+3
转换成:
1,4,+,2,*,3,+
这种写法叫后缀表示法,也成为逆波兰表示法。相对的,我们平常用的表示法叫中缀表示法,也就是符号方中间,比如1+4。而后缀表示法则写成1,4,+。
转换成这种写法的好处是没有先乘除后加减的影响,也没有括号了,直接算就行了。
具体怎么转换的可以找本讲编译原理的书看看,这里不展开讲了。
转换成这种形式之后我们就可以把它改成成汇编语言了。
从头开始处理,最开始是1,一个数字,那就存入寄存器:
MOV 1
之后是4,+,那就加一下:
ADD 4
然后是2,*,那就乘一下(介于我们设计的乘法器暂时只能乘2,这个0是占位的):
SHL 0
最后是3,+,那再加一下:
ADD 3
最后我们把翻译好的汇编整理一下:
MOV 1
ADD 4
SHL 0
ADD 3
再简单的转换成机器语言,就可以拿到我们设计的简单CPU上运行了。
其实到了这一步,应该把这个问题都讲清楚了:C语言写出来的东西是怎么翻译成二进制的,电脑又是怎么运行这个二进制的。
只不过题主最后还提到栈和硬件的关系,这里就再多说几句。
其实栈是一种数据结构,跟CPU无关。只不过栈这个数据结构实在太常用了,以至于CPU会针对性的进行优化。为了能让我们的CPU也能用栈,我们给它增加几个组件。
第一,增加一组寄存器。现在有两组寄存器了,我们分别成为A和B。
第二,增加两个指令,RDA/RDB和WRA/WRB,分别为把指定内存地址的数据读到寄存器A/B,和把寄存器A/B的内容写到指定地址。
顺便再说下内存,内存有个地址总线,有个数据总线。比如你要把1100这个数字存到0011这个地址,就把1100接到数据总线,0011接到地址总线,都准备好了啪嚓一按开关(对,就是我们前面提到的那个开关),就算是存进去了。
什么叫DDR内存呢,就是你按这个开关的时候存进去一个数字,抬起来之前你把地址和数据都更新一下,然后一松手,啪!又进去一个。也就是正常的内存你按一下进去1个数据,现在你按一下进去俩数据,这就叫双倍速率(Double Data Rate,简称DDR)
加了这几个命令之后我们发现按原来的设计,CPU每个指令针脚控制一个模块的方式的话针脚不够用了。所以我们就需要加一个解码器了(decoder)。
于是我们选择用第二个位作为是否选择寄存器的针脚。如果为0,则第三第四位可以正常激活位移器和加法器;如果为1则只激活寄存器而不激活位移和加法器,然后用第四位来决定是寄存器A还是B。这样变成了:
最后我们可以用第一位来控制是不是进行内存操作。如果第一位为1则也不激活位移和加法器模块,然后用第三个针脚来控制是读还是写。这样就有了:
我们加了个解码器之后,加法器的激活条件从p4变成了(NOT (p1 OR p2)) AND p4。
加法器的输入则由第三个针脚判断,0则为寄存器A,1为寄存器B。这就是简单的指令解码啦。
当然我们也可以选择不向下兼容,另外设计一套指令。不过放到现实世界恐怕就要出大乱子了,所以你也可以想象我们平常用的x86背了个多大的历史包袱。
这个时候我们用栈的话,先栈地址初始化:
0101 1000 ; MOVB 16; 把栈底地址定义为1000
之后入栈的话,比如把数字3,4入栈:
1111 0011 ; WR 03; 把3写到内存,地址为1000
0011 0001 ; ADDB 01; 栈地址+1
1111 0100 ; WR 04; 把3写到内存,地址为1001
0011 0001 ; ADDB 01; 栈地址+1
这样就把3,4都保存到栈里了。
出栈的话反过来:
0011 1111 ; ADDB -1; 栈地址-1
1101 0000 ; RD 00; 把内容读入寄存器A,00是占位
0011 1111 ; ADDB -1; 栈地址-1
1101 0000 ; RD 00; 把内容读入寄存器A,00是占位
这样就依次得到4,3两个值。
所以,入栈出栈其实就是把数据写道指定的内存位置,CPU其实不知道你是在干啥。当然我们也可以让CPU知道。
接下来我们再改进一下,给CPU再加一个寄存器SP,并定义两个指令:一个PUSH,一个POP。动作分别是把数据写入SP的地址,然后SP=SP+1,POP的话反过来。
这样有什么好处呢?好处在于PUSH/POP这样的指令消耗特别少,速度特别快。而栈这种数据结构在各种程序里用的又特别频繁,设计成专用的指令则可以很大程度上提升效率。
当然前提是编译器知道这个指令,并且做了优化,所以同样的程序(c语言写的),编译参数不一样(打开/关闭某些特性),编译出来的东西也就不一样,在不同硬件上的运行的效率也就会不一样。
比如上古时代的mmx,今天的SSE4.2,AVX-512,给力不给力?特别给力,但你平常用的程序支不支持是另一码事,要支持怎么办?重新编译呗。
这个时候开源的优势就显示出来了,重新编译很方便。闭源的话你就要指望作者开恩啦。
对于大多数人来说,电脑就是个黑箱,我们很难理解它到底是怎用工作的。这个问题又很难一句两句解释清楚,因为它是一环扣一环的,每一环都很抽象,每一环都是基础值俩个学分,展开了讲没上限的那种。
这就导致了即使是系统学过计算机的人也不见得就有一个明确而清晰的思路。想用尽量短的篇幅和尽量简单的语言把这个事从头到位解释了一下,希望能给大家解答一些疑惑。
.
利用二极管的单向导电性可以设计出好玩、实用的电路。
分享本文,分析限幅电路和钳位电路,是如何用二极管来实现的。
限幅电路
如下图所示,当在正半周期,并且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的导通电压。
二极管钳位保护电路
.
低功耗模式
本文讨论下STM32低功耗模式,先看如下手册。
对比了 STM32F0 和 STM32F1 两者进入低功耗是一样的,低功耗模式有三种:
一般做开发大多都是选择停机模式,因为停机模式功耗较低,而且任一中断或事件都能唤醒。待机模式虽然功耗最低,电流只差10个微安,但是只有特定的事件和引脚可以唤醒,实时性不是很好。
先来看下官方库进入低功耗的方式。
void PWR_EnterSleepMode(uint8_t PWR_SLEEPEntry); //睡眠模式
void PWR_EnterSTOPMode(uint32_t PWR_Regulator, uint8_t PWR_STOPEntry); //停机模式
void PWR_EnterSTANDBYMode(void); //待机模式
这里我们用到停机模式,有两个参数 。
第一个PWR_Regulator是选择电源是否进入低功耗。
#define PWR_Regulator_ON //电源不进低功耗 唤醒基本没延迟
#define PWR_Regulator_LowPower //电源进去低功耗 不过唤醒启动有一点延迟
第二个参数PWR_STOPEntry选择唤醒的方式。
#define PWR_STOPEntry_WFI //中断唤醒
#define PWR_STOPEntry_WFE //事件唤醒
停机模式唤醒后自动选择系统内部时钟,看自己的应用是否需要重新配置。如果你的系统时钟是HSI或者HSE是要重新配置,一般都需要重新配置,直接调用系统时钟配置函数。
另外停机模式唤醒后,flash程序是从中断或事件开始执行的。
如何做到停机模式更低功耗
代码
RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR,ENABLE); //使能时钟
PWR_EnterSTOPMode(PWR_Regulator_LowPower,PWR_STOPEntry_WFI);
上面代码第一个参数PWR_Regulator_LowPower是配置电源低功耗模式。第二个参数PWR_STOPEntry_WFI用来确定是中断唤醒还是事件唤醒,或者两者都要。
第二步你要把所有引脚IO口释放,全部配置成模拟输入状态,此时IO口几乎0消耗,具体见手册说明。
我们只要在进入低功耗之前把IO口配置一下就行了(根据自己应用需要配置IO),但是唤醒之后就要重新配置IO口了。
注意,在配置IO模拟输入之前,一定不要锁定IO口。我之前就踩了这个坑,在配置成模拟输入之前我们串口两个引脚锁定了导致我的功耗一直在90uA左右下不去。
正确配置的功耗在10uA左右,这功耗已经相当低了,用四节5号电池够你用至少1年了。
.
1. TIMER分类:
STM32中一共有11个定时器,其中TIM6、TIM7是基本定时器;TIM2、TIM3、TIM4、TIM5是通用定时器;TIM1和TIM8是高级定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick。
其中TIM1和TIM8是能够产生3对PWM互补输出,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。
2、PWM波形产生的原理:
通用定时器可以利用GPIO引脚进行脉冲输出,在配置为比较输出、PWM输出功能时,捕获/比较寄存器TIMx_CCR被用作比较功能,下面把它简称为比较寄存器。
这里直接举例说明定时器的PWM输出工作过程:若配置脉冲计数器TIMx_CNT为向上计数,而重载寄存器TIMx_ARR被配置为N,即TIMx_CNT的当前计数值数值X在TIMxCLK时钟源的驱动下不断累加,当TIMx_CNT的数值X大于N时,会重置TIMx_CNT数值为0重新计数。
而在TIMxCNT计数的同时,TIMxCNT的计数值X会与比较寄存器TIMx_CCR预先存储了的数值A进行比较,当脉冲计数器TIMx_CNT的数值X小于比较寄存器TIMx_CCR的值A时,输出高电平(或低电平),相反地,当脉冲计数器的数值X大于或等于比较寄存器的值A时,输出低电平(或高电平)。
如此循环,得到的输出脉冲周期就为重载寄存器TIMx_ARR存储的数值(N+1)乘以触发脉冲的时钟周期,其脉冲宽度则为比较寄存器TIMx_CCR的值A乘以触发脉冲的时钟周期,即输出PWM的占空比为 A/(N+1) 。
3、STM32产生PWM的配置方法:
1、配置GPIO口:
配置IO口的时候无非就是开启时钟,然后选择引脚、模式、速率,最后就是用结构体初始化。不过在32上,不是每一个IO引脚都可以直接使用于PWM输出,因为在硬件上已经规定了用某些引脚来连接PWM的输出口。下面是定时器的引脚重映像,其实就是引脚的复用功能选择:
a.定时器1的引脚复用功能映像:
b.定时器2的引脚复用功能映像:
c.定时器3的引脚复用功能映像:
d.定时器4的引脚复用功能映像:
根据以上重映像表,我们使用定时器3的通道2作为PWM的输出引脚,所以需要对PB5引脚进行配置,对IO口操作代码:
GPIO_InitTypeDef GPIO_InitStructure;//定义结构体
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE);//使能GPIO外设和AFIO复用功能模块时钟
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //选择Timer3部分重映像
//选择定时器3的通道2作为PWM的输出引脚TIM3_CH2->PB5 GPIOB.5
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //TIM_CH2
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽功能
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化引脚
2、初始化定时器:
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;//定义初始化结构体
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //使能定时器3时钟
//初始化TIM3
TIM_TimeBaseStructure.TIM_Period = arr; //自动重装载寄存器的值
TIM_TimeBaseStructure.TIM_Prescaler =psc; //TIMX预分频的值
TIM_TimeBaseStructure.TIM_ClockDivision = 0; //时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数
TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据以上功能对定时器进行初始化
3、设置TIM3_CH2的PWM模式,使能TIM3的CH2输出:
TIM_OCInitTypeDef TIM_OCInitStructure;//定义结构体
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2;//选择定时器模式,TIM脉冲宽度调制模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;//比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;//输出比较极性低
TIM_OC2Init(TIM3, &TIM_OCInitStructure);//根据结构体信息进行初始化
TIM_OC2PreloadConfig(TIM3, TIM_OCPreload_Enable); //使能定时器TIM2在CCR2上的预装载值
4、使能定时器3:
TIM_Cmd(TIM3, ENABLE); //使能定时器TIM3
经过以上的操作,定时器3的第二通道已经可以正常工作并输出PWM波了,只是其占空比和频率都是固定的,我们可以通过改变TIM3_CCR2,则可以控制它的占空比。修改占空比的函数为:
TIM_SetCompare2(TIM3,n); //n不同,占空比不同。
5、修改pwm波形的占空比:
编写一个函数:
void TIM3_PWM_Init(u16 arr,u16 psc);
将以上所有的代码都加进来这个函数中,只要在main函数中调用该函数进行初始化,然后使用TIM_SetCompare2()函数修改PWM的占空比就可以在PB5脚得到需要的PWM波形了。关于频率以及占空比的计算方法有以下例子:
int main(void)
{
TIM3_PWM_Init(9999,143);//频率为:72*10^6/(9999+1)/(143+1)=50Hz
TIM_SetCompare2(TIM3,4999);//得到占空比为50%的pwm波形
while(1);
}
.
本文章是关于ADC/DAC设计经典问答,涵盖时钟占空比、共模电压、增益误差、微分相位误差、互调失真等常见问题。
1. 什么是小信号带宽(SSBW)?
小信号带宽(Small Signal Bandwidth (SSBW))是指在指定的幅值输入信号及特定的频率下,它的输出幅值比低频时的输出幅值下降指定值时,该特定频率为小信号带宽。
2. 什么是共模电压(VCM)?
共模电压(Common Mode Voltage (VCM ))是差动输入的两个引脚上相同的直流输入电压。
3. 什么是MSB(最高有效位)?
MSB(最高有效位(Most Significant Bit)),是具有最大的值或权重的位。它的值是满量程的一半。
4. 什么是采样(孔径)延时?
采样(孔径)延时(Sampling (Aperture) Delay)是时钟输入的后边缘到采样开关打开所需的时间。采样/保持电路有效地停止输入信号捕获,并进入“保持”模式,确定时钟延时后的采样。
5. 什么是满量程(FS)输入范围?
满量程输入范围(Full Scale Input Range),是指模数转换器上数字化的输入电压的输入范围,既不低于这个范围也不超过这个范围。比如 V REF + = 3.5V 和 VREF - = 1.5V, FS = (VREF + )-(VREF - ) =2.0V。
6. 什么是时钟占空比?
时钟占空比(Clock Duty Cycle)是时钟波形高电平时间和一个时钟周期总时间的比值。
7. 什么是位的有效数(ENOB ,或有效位)?
位的有效数(ENOB ,或有效位)(Effective Number of Bits (ENOB, 或Effective Bits))是信噪比和失真的比率,或SINAD的另一种表达方法。ENOB定义为(SINAD -1.76)/ 6.02,这个位数(ENOB)表示转换器是与理想的模数转换器等效。
8. 什么是增益误差?
增益误差是在第一个代码和最后一个代码发生转换时,实际输人电压与理想输人电压之差。即,这个差值是:满量程 - 2 LSB。
9. 许多模数转换器在数据手册中提供的应用,在Va, Vd 和Vref引脚上出现了三个电容。这三个电容器都是必须的吗?
根据特定器件和电路板的布局,一个或两个电容可能就足够了。较大的电容,通常是5到10?F的,提供了低阻抗大容量存储,在转换期间保证了电压的稳定性。较小值的电容器吸收较高频率的噪音尖峰。如果印制电路板具有非常好的布局用于低噪声工作,而且不包含一个微控制器或其他的嘈杂的数字逻辑,可能需要更少的电容器。但是为使ADC工作电平精度获得保证,一般情况下最好是遵循数据手册的推荐。
10. 什么是零误差?
ADC双级输出的零误差是理论的输入电压(典型的是中心值加1/2LSB)和实际输入电压之间的差异,这个实际输入电压引起了输出从0到1的转换。
11. 什么是输出保持时间?
输出保持时间是指在输入时钟边缘后输出有效数据的时间长度。
12. 什么是分辨率?
分辨率是模拟增量,相当于1 LSB转换器代码的变化。分辨率也被定义为转换器位数(n)的个数。数字代码的个数等于2^n,其中“n”是位的个数。举一个例子,一个12位转换器模拟信号和2 ^ 12 = 4096数字编码的映射关系。12位模数转换器的分辨率,是输入电压的满量程除以2^12,或4096,不会引起输出代码超出范围。
13. 什么是微分相位误差?
微分相位误差(Differential Phase Error)是指,小信号正弦波在两个不同的直流(DC)输入电平重构下,输出相位的差。
14. 什么是模/数转换器的动态指标?
模/数转换器的动态指标(DynamicSpecifications)涉及到那些交流(AC)输入信号。这些包括信/噪比(SNR),SINAD(信号噪声+失真),ENOB(有效位数),THD(总谐波失真),IMD(互调失真),FPBW(全功率带宽),SSBW(小信号带宽)。
15. 什么是互调失真(IMD)?
互调失真(Intermodulation Distortion),是指没有出现在输入端,作为两个正弦曲线的频率同时作用于模数转换器的输入,而形成的额外的频谱成分。它被定义为在互调积中的能量和原始频率中的总能量比值。互调失真(IMD)通常用分贝(dB)来表示。
16. 什么是增益温度系数(满量程温度系数)?
增益温度系数(满量程温度系数)是指增益误差变化量和温度变化量的比值。通常用每百万分之/ 摄氏度(ppm/°C)表示。
17. 什么是总谐波失真(THD)?
总谐波失真(THD),用dB或dBc表示,是指总的谐波电平(美国国家半导体模数转换器是9个谐波段)和输入信号的倍频出现在输出的电平。总谐波失真(THD)计算方法如下:THD=“sqrt”[ ( f2xf2 + f3xf3 +f4xf4 + f5xf5 + f6xf6 + f7xf7 + f8xf8 + f9xf9 + f10xf10) / (f1xf1) ] f1是输入信号的基频,f2 到f10这9个谐波频率是基频的倍频。
18. 什么是零刻度偏移误差?
单极输出模数转换器的零刻度偏移误差是指理想的输入电压(1/2 LSB) 和实际输入电压之间的差,引起输出代码由0到输出代码1的转换。
19. 什么是全功率带宽(FPBW)?
全功率带宽(FPBW)是指满量程输入在重构的输出基频下降到3分贝时低于其低频值的频率。
20. 什么LSB(最低有效位)?
LSB(最低有效位),是指所有位中最小的值或权值。这个值是m*VREF/2 n,其中:“ m ”为主,是基准量程因子(这是最常见的单位),其中“n”是模数转换器的分辨率。
21. 怎样才能消除模数转换器时钟线和控制线上的超调量和/或欠调量?
超调量和/或欠调量,是由高速信号边缘和不匹配信号终端混合引起的。增加一个47-100Ω电阻串联到输入,电阻要尽可能的靠近时钟源。目的是为了和时钟线上的信号阻抗匹配,输电线路也应该这样考虑。串联的终端用一个小的附加电源,为减少摆动效应通常是足够了。
22. 什么是输出延时?
输出延时是指输入时钟的后边缘到数据更新出现在输出引脚的延迟时间。
23. 什么是孔径抖动?
孔径抖动是指采样值间孔径延时的变化。孔径抖动作为输入噪声出现。
24. 什么是信号噪声及失真比(S/(N+D) 或 SINAD) ?
信号噪声及失真比(S/(N+D) 或 SINAD),用分贝表示(dB),出现在输出的输入信号的有效值和所有其他光谱成分的有效值的比值,频谱成分包括低于时钟频率一半频谱的谐波,但不包括直流。
25. 什么是满量程阶跃响应?
满量程阶跃响应,定义为VIN从VREF-变化到VREF+,或从VREF+变化到 VREF-,为转换器设定足够的恢复,并满足其额定精度的转换所需的时间。
26. 什么是通道延时(潜伏期)?
通道延时(潜伏期),是指转换启动到转换的数据出现在输出驱动级时之间的时钟周期的数量。数据对于任何给定的采样是可利用通道延时加上输出延迟后进行采样。每隔一个时钟周期,可得到新的数据,但数据落后于通道延时加上输出延时。
27. 什么是模拟 /数字转换器的静态指标?
静态指标是关于模数转换器的直流(DC )信号输入的指标。这些包括增益误差,偏移误差,以及微分与积分线性误差。
28. 什么是总不可调整误差(TUE)?
总不可调整误差(Total Unadjusted Error(TUE)),是指理想的情况下数字代码的中心和输入电压范围相关的电压的最大偏差。总未调整误差包括偏移误差,增益误差,以及微分与积分非线性误差。
29. 什么是满量程误差?
满量程误差,是最后代码的转换离理想的1个 1/2 LSB 以下VREF +到多大范围的测量,并定义为:VFSE =Vmax + 1.5 LSB- VREF + ,其中Vmax是转换为最大代码时的电压,可以用伏特表示,最低有效位或满量程范围的百分数。
30. 什么是转换时间?
转换时间是指模数转换器完全一个转换所需的时间。转换时间不包括采样时间,多路复用器设置时间,或完成一个转换周期的其他部分,转换时间可能少于吞吐量时间。
31. 什么是电源抑制比(PSRR) ?
电源抑制比(Power Supply Rejection Ratio),可分为两种规格。直流电源抑制比(DC PSRR )是特定参数的变化量(例如,满量程误差)和一个电源电压指定变化量的比值。交流电源抑制比(AC PSRR)是衡量一个电源上叠加的特定频率和振幅的信号,这个信号在输出上的输出振幅,和它在电源引脚上的振幅的比值。电源抑制比(PSRR)通常用分贝表示。
32. 什么是遗漏码?
遗漏码,是那些输出码被忽略的,或将永远不会出现在模数转换器输出的。这些码不能通过任何输入值。
33. 什么是吞吐量率?
吞吐率是模数转换器最高的连续转换率。
34. 什么是信噪比(SNR)?
信噪比(SNR)是一个比率,用分贝(dB)表示,出现在输出的输入信号的有效值和所有其他频谱成分(低于采样频率的一半,除谐波分量和直流分量外)总和的有效值的比率。信噪比 (SNR)是信号电平的有效值与各种噪声(包括量化噪声、热噪声、白噪声等)有效值之比的分贝数。其中信号是指基波分量的有效值,噪声指奈奎斯特频率以下的全部非基波分量的有效值(除谐波分量和直流分量外)。
35. 什么是吞吐时间?
吞吐时间是指转换器完成一次转换所花的时间。吞吐时间包括任何多路复用器的建立时间,采样时间,转换时间,输出显示时间。
36. 什么是直流共模误差?
直流共模误差(DC Common-Mode Error)是用于模数转换器的差分输入的一个规格。当两个输入上的模拟电压被改变相同的值时,发生输出代码的变化量。它通常用LSBs表示。
37. 什么是偏置误差?
ADC的偏置误差定义为使最低位被置成“1”状态时ADC的输人电压,与理论上使最低位被置成“1”状态时的输人电压之差。
38. 印制电路板的电源地是否应作为数字和模拟的共同地?
是的,他们应该是一样的。但是重要的是,要慎重给所有电源和信号布线以使地电流与电源和信号分开。
.
BLDC电机控制算法
无刷电机属于自换流型(自我方向转换),因此控制起来更加复杂。
BLDC电机控制要求了解电机进行整流转向的转子位置和机制。对于闭环速度控制,有两个附加要求,即对于转子速度/或电机电流以及PWM信号进行测量,以控制电机速度功率。
BLDC电机可以根据应用要求采用边排列或中心排列PWM信号。大多数应用仅要求速度变化操作,将采用6个独立的边排列PWM信号。这就提供了最高的分辨率。如果应用要求服务器定位、能耗制动或动力倒转,推荐使用补充的中心排列PWM信号。
为了感应转子位置,BLDC电机采用霍尔效应传感器来提供绝对定位感应。这就导致了更多线的使用和更高的成本。无传感器BLDC控制省去了对于霍尔传感器的需要,而是采用电机的反电动势(电动势)来预测转子位置。无传感器控制对于像风扇和泵这样的低成本变速应用至关重要。在采有BLDC电机时,冰箱和空调压缩机也需要无传感器控制。
空载时间的插入和补充
大多数BLDC电机不需要互补的PWM、空载时间插入或空载时间补偿。可能会要求这些特性的BLDC应用仅为高性能BLDC伺服电动机、正弦波激励式BLDC电机、无刷AC、或PC同步电机。
控制算法
许多不同的控制算法都被用以提供对于BLDC电机的控制。典型地,将功率晶体管用作线性稳压器来控制电机电压。当驱动高功率电机时,这种方法并不实用。高功率电机必须采用PWM控制,并要求一个微控制器来提供起动和控制功能。
控制算法必须提供下列三项功能:
脉冲宽度调制仅用于将可变电压应用到电机绕组。有效电压与PWM占空度成正比。当得到适当的整流换向时,BLDC的扭矩速度特性与一下直流电机相同。可以用可变电压来控制电机的速度和可变转矩。
功率晶体管的换向实现了定子中的适当绕组,可根据转子位置生成最佳的转矩。在一个BLDC电机中,MCU必须知道转子的位置并能够在恰当的时间进行整流换向。
BLDC电机的梯形整流换向
对于直流无刷电机的最简单的方法之一是采用所谓的梯形整流换向。
图1:用于BLDC电机的梯形控制器的简化框架
在这个原理图中,每一次要通过一对电机终端来控制电流,而第三个电机终端总是与电源电子性断开。
嵌入大电机中的三种霍尔器件用于提供数字信号,它们在60度的扇形区内测量转子位置,并在电机控制器上提供这些信息。由于每次两个绕组上的电流量相等,而第三个绕组上的电流为零,这种方法仅能产生具有六个方向共中之一的电流空间矢量。随着电机的转向,电机终端的电流在每转60度时,电开关一次(整流换向),因此电流空间矢量总是在90度相移的最接近30度的位置。
图2:梯形控制:驱动波形和整流处的转矩
因此每个绕组的电流波型为梯形,从零开始到正电流再到零然后再到负电流。
这就产生了电流空间矢量,当它随着转子的旋转在6个不同的方向上进行步升时,它将接近平衡旋转。
在像空调和冰霜这样的电机应用中,采用霍尔传感器并不是一个不变的选择。在非联绕组中感应的反电动势传感器可以用来取得相同的结果。
这种梯形驱动系统因其控制电路的简易性而非常普通,但是它们在整流过程中却要遭遇转矩纹波问题。
BDLC电机的正弦整流换向
梯形整流换向还不足以为提供平衡、精准的无刷直流电机控制。这主要是因为在一个三相无刷电机(带有一个正统波反电动势)中所产生的转矩由下列等式来定义:
转轴转矩= 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(一个独立于转轴角度的常数)
正弦整流换向无刷电机控制器努力驱动三个电机绕组,其三路电流随着电机转动而平稳的进行正弦变化。选择这些电流的相关相位,这样它们将会产生平稳的转子电流空间矢量,方向是与转子正交的方向,并具有不变量。这就消除了与北形转向相关的转矩纹波和转向脉冲。
为了随着电机的旋转,生成电机电流的平稳的正弦波调制,就要求对于转子位置有一个精确有测量。霍尔器件仅提供了对于转子位置的粗略计算,还不足以达到目的要求。基于这个原因,就要求从编码器或相似器件发出角反馈。
图3:BLDC电机正弦波控制器的简化框图
由于绕组电流必须结合产生一个平稳的常量转子电流空间矢量,而且定子绕组的每个定位相距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数学转换将一个三相系统修改成两个坐标系统:
其中Ia和Ib正交基准面的组成部分,Io是不重要的homoplanar部分
图4:三相转子电流与转动参考系的关系
Park转换:Park数学转换将双向静态系统转换成转动系统矢量
两相α, β帧表示通过Clarke转换进行计算,然后输入到矢量转动模块,它在这里转动角θ,以符合附着于转子能量的d, q帧。根据上述公式,实现了角度θ的转换。
AC电机的磁场定向矢量控制的基本结构
Clarke变换采用三相电流IA, IB 以及 IC,来计算两相正交定子轴的电流Isd和 Isq。这两个在固定座标定子相中的电流被变换成Isd 和Isq,成为Park变换d, q中的元素。其通过电机通量模型来计算的电流Isd, Isq 以及瞬时流量角θ被用来计算交流感应电机的电动扭矩。
图2:矢量控制交流电机的基本原理
这些导出值与参考值相互比较,并由PI控制器更新。
基于矢量的电机控制的一个固有优势是,可以采用同一原理,选择适合的数学模型去分别控制各种类型的AC, PM-AC 或者 BLDC电机。
BLDC电机的矢量控制
BLDC电机是磁场定向矢量控制的主要选择。采用了FOC的无刷电机可以获得更高的效率,最高效率可以达到95%,并且对电机在高速时也十分有效率。
步进电机控制算法
如下是步进电机控制示意图:
步进电机控制通常采用双向驱动电流,其电机步进由按顺序切换绕组来实现。通常这种步进电机有3个驱动顺序:
1、单相全步进驱动:
在这种模式中,其绕组按如下顺序加电,AB/CD/BA/DC (BA表示绕组AB的加电是反方向进行的)。这一顺序被称为单相全步进模式,或者波驱动模式。在任何一个时间,只有一相加电。
2、双相全步进驱动:
在这种模式中,双相一起加电,因此,转子总是在两个极之间。此模式被称为双相全步进,这一模式是两极电机的常态驱动顺序,可输出的扭矩最大。
3、半步进模式:
这种模式将单相步进和双相步进结合在一起加电:单相加电,然后双相加电,然后单相加电…,因此,电机以半步进增量运转。这一模式被称为半步进模式,其电机每个励磁的有效步距角减少了一半,其输出的扭矩也较低。
以上3种模式均可用于反方向转动(逆时针方向),如果顺序相反则不行。
通常,步进电机具有多极,以便减小步距角,但是,绕组的数量和驱动顺序是不变的。
通用DC控制算法
通用电机的速度控制,特别是采用2种电路的电机:
1、相角控制
2、PWM斩波控制
相角控制
相角控制是通用电机速度控制的最简单的方法。通过TRIAC的点弧角的变动来控制速度。相角控制是非常经济的解决方案,但是,效率不太高,易于电磁干扰(EMI)。
通用电机的相角控制
以上示图表明了相角控制的机理,是TRIAC速度控制的典型应用。TRIAC门脉冲的周相移动产生了有效率的电压,从而产生了不同的电机速度,并且采用了过零交叉检测电路,建立了时序参考,以延迟门脉冲。
PWM斩波控制
PWM控制是通用电机速度控制的,更先进的解决方案。在这一解决方案中,功率MOFSET,或者IGBT接通高频整流AC线电压,进而为电机产生随时间变化的电压。
通用电机的PWM斩波控制
其开关频率范围一般为10-20 KHz,以消除噪声。这一通用电机的控制方法可以获得更佳的电流控制和更佳的EMI性能,因此,效率更高。
.
1 共模信号和差模信号
通常电源线有三根线,火线L,零线N和地线PE。
电压和电流的变化通过导线传输时有两种形态, 一种是两根导线分别做为往返线路传输, 我们称之为"差模";另一种是两根导线做去路,地线做返回传输, 我们称之为"共模"。
如上图, 蓝色信号是在两根导线内部作往返传输的,我们称之为"差模";黄色信号是在信号与地线之间传输的,我们称之为"共模"。
2 共模干扰与差模干扰
任何两根电源线上所存在的干扰,均可用共模干扰和差模干扰来表示。
共模干扰在导线与地(机壳)之间传输,属于非对称性干扰,它定义为任何载流导体与参考地之间的不希望有的电位差;
差模干扰在两导线之间传输,属于对称性干扰,它定义为任何两个载流导体之间的不希望有的电位差。
在一般情况下,共模干扰幅度大、频率高,还可以通过导线产生辐射,所造成的干扰较大。差模干扰幅度小、频率低、所造成的干扰较小。
共模干扰信号
共模干扰的电流大小不一定相等,但是方向(相位)相同的。电气设备对外的干扰多以共模干扰为主,外来的干扰也多以共模干扰为主,共模干扰本身一般不会对设备产生危害,但是如果共模干扰转变为差模干扰,干扰就严重了,因为有用信号都是差模信号。
差模干扰信号
差模干扰的电流大小相等,方向(相位)相反。由于走线的分布电容、电感、信号走线阻抗不连续,以及信号回流路径流过了意料之外的通路等,差模电流会转换成共模电流。
共模干扰产生原因
共模干扰电流
共模干扰一般是以共模干扰电流存在的形式出现的,一般情况下共模干扰电流产生的原因有三个方面:
注意事项
如何抑制共模干扰
共模干扰作为EMC干扰中最为常见且危害较大的干扰,我们抑制它最直接的方法就是滤波。
在电路中串入共模电感,当有共模干扰电流流经线圈时,由于共模干扰电流的同向性,会在线圈内产生同向的磁场而增大线圈的感抗,使线圈表现为高阻抗,产生较强的阻尼效果,以此衰减共模干扰电流,达到滤波的目的;
当电路中的正常差模电流流经共模电感时,电流在同相绕制的共模电感线圈中产生反向的磁场而相互抵消,因而对正常的差模电流基本没有衰减作用。
案例——USB信号上的共模干扰抑制方法
上图,USB 端口的滤波处理-使用共模电感。
USB 传输线上的信号是差分信号而干扰源是共模干扰信号,在传输线上串上共模电感能较好的抑制共模干扰,而对有用的差分信号没有任何衰减。
上图,USB 高速运行会在DM/DP信号线上产生很强的共模干扰。
上图,电路中加入滤波器-共模电感后共模干扰信号得到有效抑制。
如果共模干扰源是在电源回路,可使用共模电容来抑制干扰信号。
在电路中引入共模电容,则共模电容提供最短的路径使共模干扰信号被旁路,从而抑制共模干扰的产生。
如果电源回路同时还存在差模干扰,使用差模电容来抑制干扰。
在电路中引入差模电容,则差模电容提供最短的路径使差模干扰信号被旁路,从而抑制差模干扰的产生。
共模干扰作为EMC干扰中最为常见且危害很大的干扰,抑制它的方法除了滤波外,还可以通过对信号线路进行屏蔽,在PCB 板上大面积铺地降低地线阻抗来减少共模信号强度等方法。
.
单片机是控制电子产品的大脑
生活中的许多电器都使用了单片机,例如:手机、电视机、冰箱、洗衣机、儿童玩具。那么,单片机在这些电器中究竟做了些什么呢?
单片机是这些电器动作的关键,是指挥硬件运行的。例如:接收按钮或按键的输入信号,按照事先编好的程序,指挥马达和LCD的外围功能电路动作。
单片机的构成如下图所示。
单片机是由CPU、内存、外围功能等部分组成的。如果将单片机比作人,那么CPU是负责思考的,内存是负责记忆的,外围功能相当于视觉的感官系统及控制手脚动作的神经系统。
尽管我们说CPU相当于人的大脑,但它不能像人的大脑一样自发思考。CPU只能依次读取并执行事先存储在内存中的指令组合。当然CPU执行的指令并不是“走路”、“讲话”等高难度命令,而是一些非常简单的指令,象从内存的某个地方“读取数据”或把某个数据“写入”内存的某个地方,或做加法、乘法和逻辑运算等。然而这些简单指令的组合,却能实现许多复杂的功能。
会思考的CPU
让我们从CPU的构成来了解它的作用吧,如下图所示。
程序计数器
CPU读取指令时需要知道要执行的指令保存在内存的什么位置,这个位置信息称为地址(相当于家庭住址)。程序计数器(PC)就是存储地址的寄存器。通常,PC是按1递增设计的,也就是说,当CPU执行了0000地址中的指令后,PC会自动加1,变成0001地址。每执行一条指令PC都会自动加1,指向下一条指令的地址。可以说,PC决定了程序执行的顺序。
指令解码电路
指令解码电路是解读从内存中读取的指令的含义。运算电路是根据解码结果操作的。确切地讲,指令解码电路就是我们在“数字电路入门(2)”中学过的解码电路,只不过电路结构稍微复杂些,所以,指令解码电路的工作原理就是从被符号化(被加密)的指令中,还原指令。
运算电路
运算电路也称为ALU(Arithmetic and Logic Unit),是完成运算的电路。能进行加法、乘法等算术运算、也能进行AND、OR 、BIT-SHIFT等逻辑运算。运算是在指令解码电路的控制下进行的。通常运算电路的构成都比较复杂。
CPU内部寄存器
CPU内部寄存器是存储临时信息的场所。有存储运算值和运算结果的通用寄存器,也有一些特殊寄存器,比如存储运算标志的标志寄存器等。也就是说,运算电路进行运算时,并不是在内存中直接运算的,而是将内存中的数据复制到通用寄存器,在通用寄存器中进行运算的。
CPU的工作原理
让我们通过一个具体运算3+4,来说明CPU的操作过程吧。
假设保存在内存中的程序和数据如下。
步骤1:
当程序被执行时,CPU就读取当前PC指向的地址0000中的指令(该操作称为指令读取)。经过解码电路解读后,这条指令的意思是“读取0100地址中的内容,然后,保存到寄存器1”。于是CPU就执行指令,从0100地址中读取数据,存入寄存器1。
寄存器1:0→3(由0变为3)
由于执行了1条指令,因此,PC的值变为0001
步骤2:
由于PC的值为0001,因此CPU就读取0001地址中的指令,经解码电路解码后,CPU执行该指令。然后PC再加1。
寄存器2:0→4(由0变为4)
PC:0001→0000
步骤3:
由于PC的值为0002,因此CPU从0002地址中读取指令,送给指令解码电路。解码结果是:将寄存器1和寄存器2相加,然后将结果存于寄存器1。
寄存器1:3→7
PC:2→3
于是3+4的结果7被存于寄存器1,加法运算结束。CPU就是这样,依次处理每一条简单的指令。
能记忆的内存
内存是单片机的记忆装置,主要记忆程序和数据,大体上分为ROM和RAM两大类相关文章:单片机中的RAM vs ROM。
ROM
ROM(Read Only Memory)是只读内存的简称。保存在ROM中的数据不能删除,也不会因断电而丢失。ROM主要用于保存用户程序和在程序执行中保持不变的常数。
大多数瑞萨(Renesas)的单片机都用闪存作为ROM。这是因为闪存不仅可以象ROM一样,即使关机也不会丢失数据,而且还允许修改数据。
RAM
RAM(Random Access Memory)是可随机读/写内存的简称。可以随时读写数据,但关机后,保存在RAM中的数据也随之消失。主要用于存储程序中的变量。
在单芯片单片机中(*1),常常用SRAM作为内部RAM。SRAM允许高速访问,但是,内部结构太复杂,很难实现高密度集成,不适合用作大容量内存。
除SRAM外,DRAM也是常见的RAM。DRAM的结构比较容易实现高密度集成,因此,比SRAM的容量大。但是,将高速逻辑电路和DRAM安装于同一个晶片上较为困难,因此,一般在单芯片单片机中很少使用,基本上都是用作外围电路。
(*1)单芯片单片机是指:将CPU,ROM,RAM,振荡电路,定时器和串行I/F等集成于一个LSI的微处理器。单芯片单片机的基础上再配置一些系统的主要外围电路,而形成的大规模集成电路称为系统LSI。
“为何要使用单片机……”
为什么很多电器设备都要使用单片机呢?
让我们用一个点亮LED的电路为例,来说明。如下图所示,不使用单片机的电路是一个由LED,开关和电阻构成的简单电路。
使用单片机的电路如下图所示。
很显然,使用单片机的电路要复杂得多,而且设计电路还要花费精力与财力。好象使用单片机并没有什么优点。
但是,现在下结论还为时尚早。
如果我们让这个电路做一些比较复杂的操作,会怎么样呢。例如:如果希望LED在按下开关后,经过一段时间再点亮或熄灭,那么,对于安装有单片机的电路来说,只需更改单片机中的程序就可以了,并不需更改原电路。另一方面,对于没有单片机的电路来说,就必须在元电路中加入定时器IC,或者用标准逻辑IC和FPGA构成逻辑电路,才能实现这个功能。
也就是说,在更改和添加新功能时,带有单片机的电路显然更加容易实现。这正是电器设备使用单片机的原因。单片机可真是个方便的东西哦!
.
电感是电源电路中一个重要的组成部分,电感的位置可以帮助我们在复杂的电路中,一眼锁定电源部分所在的位置。本文就来浅析一下在DCDC电路中如何去选择适当的电感及其参数。欢迎指正与补充。
1. 电感的分类
DCDC电路中常用的电感大致可以分为以下两种:
2. 电源中电感的功能
以基本的buck电路为例(后续计算都建立在buck电路的基础上),电感在电路中主要起以下两个作用:
(a)储能:作为一个储能元件,在Q1导通时,L和Cout储存能量,保证在Q1关断,Q2导通时的供电,形成续流回路。
(b)平滑输出电流:由于电感有阻碍电流变化的特性,L和Cout组成二阶滤波系统,平滑输出电流。
3. 电感感值的计算
根据电感两端电压和电流的关系可做如下推导:
故,通过带入最大带载电流和最大输入电压,便可倒推出最小的电感值。
4. 其他电感参数考虑
除了要考虑电感感值之外,还需要注意电感的饱和电流和DCR。电感饱和后,其磁导率u会大大下降,导致电感量的下降,最后电感失去抑制电流突变的能力。饱和后的电感电流波形会出现明显的畸变,出现温升异常或者明显啸叫的现象。
通过电感波形可以得到电感需承受的峰值电流的算式:
成品电感的规格上都会标注它的饱和电流,选择电感时要注意选择饱和电流大于IL_peak的电感。
DCR(Direct Current Resistance)指的是电感的直流电阻,对于相同尺寸大小的电感器,其直流电阻通常会呈现以下特点:如果电感值较高,则直流电阻值较高;如果电感值较低,则直流电阻值较低。DCR的大小与电感的发热损耗息息相关,所以在选择电感时一般期望DCR尽可能地小,来提升效率。