虫虫首页| 资源下载| 资源专辑| 精品软件
登录| 注册

高频电压信号

  • 模块电源功能性参数指标及测试方法

      模块电源的电气性能是通过一系列测试来呈现的,下列为一般的功能性测试项目,详细说明如下: 电源调整率(Line Regulation) 负载调整率(Load Regulation) 综合调整率(Conmine Regulation) 输出涟波及杂讯(Ripple & Noise) 输入功率及效率(Input Power, Efficiency) 动态负载或暂态负载(Dynamic or Transient Response) 起动(Set-Up)及保持(Hold-Up)时间 常规功能(Functions)测试 1. 电源调整率   电源调整率的定义为电源供应器于输入电压变化时提供其稳定输出电压的能力。测试步骤如下:于待测电源供应器以正常输入电压及负载状况下热机稳定后,分别于低输入电压(Min),正常输入电压(Normal),及高输入电压(Max)下测量并记录其输出电压值。 电源调整率通常以一正常之固定负载(Nominal Load)下,由输入电压变化所造成其输出电压偏差率(deviation)的百分比,如下列公式所示:   [Vo(max)-Vo(min)] / Vo(normal) 2. 负载调整率   负载调整率的定义为开关电源于输出负载电流变化时,提供其稳定输出电压的能力。测试步骤如下:于待测电源供应器以正常输入电压及负载状况下热机稳定后,测量正常负载下之输出电压值,再分别于轻载(Min)、重载(Max)负载下,测量并记录其输出电压值(分别为Vo(max)与Vo(min)),负载调整率通常以正常之固定输入电压下,由负载电流变化所造成其输出电压偏差率的百分比,如下列公式所示:   [Vo(max)-Vo(min)] / Vo(normal)    3. 综合调整率   综合调整率的定义为电源供应器于输入电压与输出负载电流变化时,提供其稳定输出电压的能力。这是电源调整率与负载调整率的综合,此项测试系为上述电源调整率与负载调整率的综合,可提供对电源供应器于改变输入电压与负载状况下更正确的性能验证。 综合调整率用下列方式表示:于输入电压与输出负载电流变化下,其输出电压之偏差量须于规定之上下限电压范围内(即输出电压之上下限绝对值以内)或某一百分比界限内。 4. 输出杂讯   输出杂讯(PARD)系指于输入电压与输出负载电流均不变的情况下,其平均直流输出电压上的周期性与随机性偏差量的电压值。输出杂讯是表示在经过稳压及滤波后的直流输出电压上所有不需要的交流和噪声部份(包含低频之50/60Hz电源倍频信号、高于20 KHz之高频切换信号及其谐波,再与其它之随机性信号所组成)),通常以mVp-p峰对峰值电压为单位来表示。   一般的开关电源的规格均以输出直流输出电压的1%以内为输出杂讯之规格,其频宽为20Hz到20MHz。电源实际工作时最恶劣的状况(如输出负载电流最大、输入电源电压最低等),若电源供应器在恶劣环境状况下,其输出直流电压加上杂讯后之输出瞬时电压,仍能够维持稳定的输出电压不超过输出高低电压界限情形,否则将可能会导致电源电压超过或低于逻辑电路(如TTL电路)之承受电源电压而误动作,进一步造成死机现象。   同时测量电路必须有良好的隔离处理及阻抗匹配,为避免导线上产生不必要的干扰、振铃和驻波,一般都采用双同轴电缆并以50Ω于其端点上,并使用差动式量测方法(可避免地回路之杂讯电流),来获得正确的测量结果。 5. 输入功率与效率   电源供应器的输入功率之定义为以下之公式:   True Power = Pav(watt) = Vrms x Arms x Power Factor 即为对一周期内其输入电压与电流乘积之积分值,需注意的是Watt≠VrmsArms而是Watt=VrmsArmsxP.F.,其中P.F.为功率因素(Power Factor),通常无功率因素校正电路电源供应器的功率因素在0.6~0.7左右,其功率因素为1~0之间。   电源供应器的效率之定义为为输出直流功率之总和与输入功率之比值。效率提供对电源供应器正确工作的验证,若效率超过规定范围,即表示设计或零件材料上有问题,效率太低时会导致散热增加而影响其使用寿命。 6. 动态负载或暂态负载   一个定电压输出的电源,于设计中具备反馈控制回路,能够将其输出电压连续不断地维持稳定的输出电压。由于实际上反馈控制回路有一定的频宽,因此限制了电源供应器对负载电流变化时的反应。若控制回路输入与输出之相移于增益(Unity Gain)为1时,超过180度,则电源供应器之输出便会呈现不稳定、失控或振荡之现象。实际上,电源供应器工作时的负载电流也是动态变化的,而不是始终维持不变(例如硬盘、软驱、CPU或RAM动作等),因此动态负载测试对电源供应器而言是极为重要的。可编程序电子负载可用来模拟电源供应器实际工作时最恶劣的负载情况,如负载电流迅速上升、下降之斜率、周期等,若电源供应器在恶劣负载状况下,仍能够维持稳定的输出电压不产生过高激(Overshoot)或过低(Undershoot)情形,否则会导致电源之输出电压超过负载组件(如TTL电路其输出瞬时电压应介于4.75V至5.25V之间,才不致引起TTL逻辑电路之误动作)之承受电源电压而误动作,进一步造成死机现象。 7. 启动时间与保持时间   启动时间为电源供应器从输入接上电源起到其输出电压上升到稳压范围内为止的时间,以一输出为5V的电源供应器为例,启动时间为从电源开机起到输出电压达到4.75V为止的时间。   保持时间为电源供应器从输入切断电源起到其输出电压下降到稳压范围外为止的时间,以一输出为5V的电源供应器为例,保持时间为从关机起到输出电压低于4.75V为止的时间,一般值为17ms或20ms以上,以避免电力公司供电中于少了半周或一周之状况下而受影响。    8. 其它 在电源具备一些特定保护功能的前提下,还需要进行保护功能测试,如过电压保护(OVP)测试、短路保护测试、过功保护等

    标签: 模块电源 参数 指标 测试方法

    上传时间: 2013-10-22

    上传用户:zouxinwang

  • 变频器维修手册大全

    变频器是利用电力半导体器件的通断作用将工频电源变换为另一频率的电能控制装置。主要由整流(交流变直流)、滤波、再次整流(直流变交流)、制动单元、驱动单元、检测单元微处理单元等组成的。 目前,通用型变频器绝大多数是交—直—交型变频器,通常尤以电压器变 频器为通用,其主回路图(见图1.1),它是变频器的核心电路,由整流回路(交—直交换),直流滤波电路(能耗电路)及逆变电路(直—交变换)组成,当然 还包括有限流电路、制动电路、控制电路等组成部分。 1)整流电路 如图所示,通用变频器的整流电路是由三相桥 式整流桥组成。它的功能是将工频电源进行整流,经中间直流环节平波后为逆变电路和控制电路提供所需的直流电源。三相交流电源一般需经过吸收电容和压敏电阻 网络引入整流桥的输入端。网络的作用,是吸收交流电网的高频谐波信号和浪涌过电压,从而避免由此而损坏变频器。当电源电压为三相380V时,整流器件的最 大反向电压一般为1200—1600V,最大整流电流为变频器额定电流的两倍。 2)滤波电路 逆变器的负载属感性负载的异步电动机,无论异步电 动机处于电动或发电状态,在直流滤波电路和异步电动机之间,总会有无功功率的交换,这种无功能量要靠直流中间电路的储能元件来缓冲。同时,三相整流桥输出 的电压和电流属直流脉冲电压和电流。为了减小直流电压和电流的波动,直流滤波电路起到对整流电路的输出进行滤波的作用。通用变频器直流滤波电 路的大容量铝电解电容,通常是由若干个电容器串联和并联构成电容器组,以得到所需的耐压值和容量。另外,因为电解电容器容量有较大的离散性,这将使它们随 的电压不相等。因此,电容器要各并联一个阻值等相的匀压电阻,消除离散性的影响,因而电容的寿命则会严重制约变频器的寿命。 3)逆变电路 逆变电路的作用是在控制电路的作用下,将直流电路输出的直流电源转换成频率和电压都可以任意调节的交流电源。逆变电路的输出就是变频器的输出,所以逆变电路是变频器的核心电路之一,起着非常重要的作用。最常见的逆变电路结构形式是利用六个功率开关器件(GTR、IGBT、GTO等)组成的三相桥式逆变电路,有规律的控制逆变器中功率开关器件的导通与关断,可以得到任意频率的三相交流输出。通常的中小容量的变频器主回路器件一般采用集成模块或智能模块。智能模块的内部高度集成了整流模块、逆变模块、各种传感器、保护电路及驱动电路。如三菱公司 生产的IPMPM50RSA120,富士公司生产的7MBP50RA060,西门子公司生产的BSM50GD120等,内部集成了整流模块、功率因数校正 电路、IGBT逆变模块及各种检测保护功能。模块的典型开关频率为20KHz,保护功能为欠电压、过电压和过热故障时输出故障信号灯。逆变电路中都设置有续流电路。续流电路的功能是当频率下降时,异步电 动机的同步转速也随之下降。为异步电动机的再生电能反馈至直流电路提供通道。在逆变过程中,寄生电感释放能量提供通道。另外,当位于同一桥臂上的两个开 关,同时处于开通状态时将会出现短路现象,并烧毁换流器件。所以在实际的通用变频器中还设有缓冲电路等各种相应的辅助电路,以保证电路的正常工作和在发生 意外情况时,对换流器件进行保护 。

    标签: 变频器 维修手册

    上传时间: 2013-10-18

    上传用户:子虚乌有

  • AL-XHZ系列消弧消谐及过电压保护装置

    AL-XHZ系列消弧消谐及过电压保护装置 我公司研制出了XHZ消弧线圈及过电压保护装置,能将中性点非有效接地系统的相间、相地过电压限制在电网安全范围内,彻底解决了各种过电压对电网的威胁,提高了电网安全供电的可靠性。 1、装置动作速度快,能快速消除间歇性弧光及稳定性弧光接地故障,抑制孤光接地过电压,防止事故进一步扩大,降低线路的事故跳闸率。 2、能将系统的大气过电压和操作过电压限制到较低的电压水平,保证了电网及设备的绝缘安全。 3、能够快速、有效地消除系统的谐振过电压,防止长时间谐振过电压对系统绝缘破坏,防止谐振过电压对电网中装设的避雷器及小感性负载的损伤。 4、装置动作后,允许200A的电容电流连续通过至少2小时以上,用户可以完成转移负荷的倒闸操作之后再处理故障线路。 5、能够准确查找单相接地故障线路,对防止事故的进一步扩大,减轻运行和维护人员的工作量有重要的意义。 6、由于其限制过电压的机理与电网电流的大小无关,因而其保护性能不受电网运行方式的改变和电网扩大的影响。 7、本装置中的电压互感器可以向计量仪表和继电保护装置提供系统的电压信号,能够替代常规的PT柜。 8、能够测量系统的单相接地电容电流。 9、结构简单,体积小,安装、调试方便,适用范围广。 10、性价比,相对于消弧线圈系统而言,性价比较高。 11、选线功能,无论系统发生的是何种类型的接地故障,均能够对接地线路进行准确地选择。

    标签: AL-XHZ 消弧消谐 保护装置 过电压

    上传时间: 2013-11-22

    上传用户:cazjing

  • 导轨式直流电压隔离变送器

      该产品采用先进的隔离技术,能够对直流电压信号进行隔离检/监测,产品体积小,功耗低,精度高。输入、输出和辅助电源之间可以承受2500VDC 隔离耐压,可以灵活应用。广泛用于电力、化工、石油、工业和自动控制等领域。

    标签: 导轨式 直流电压 隔离变送器

    上传时间: 2013-10-12

    上传用户:小小小熊

  • 数字电压表设计

    采用AT可编程器件,用ADC0809采集电压信号。

    标签: 数字 电压表设计

    上传时间: 2013-11-03

    上传用户:sunchao524

  • 多路电压采集系统

    多路电压采集系统一、实验目的1.熟悉可编程芯片ADC0809,8253的工作过程,掌握它们的编程方法。2.加深对所学知识的理解并学会应用所学的知识,达到在应用中掌握知识的目的。 二、实验内容与要求1.基本要求通过一个A/D转换器循环采样4路模拟电压,每隔一定时间去采样一次,一次按顺序采样4路信号。A/D转换器芯片AD0809将采样到的模拟信号转换为数字信号,转换完成后,CPU读取数据转换结果,并将结果送入外设即CRT/LED显示,显示包括电压路数和数据值。2. 提高要求 (1) 可以实现循环采集和选择采集2种方式。(2)在CRT上绘制电压变化曲线。 三、实验报告要求 1.设计目的和内容 2.总体设计 3.硬件设计:原理图(接线图)及简要说明 4.软件设计框图及程序清单5.设计结果和体会(包括遇到的问题及解决的方法) 四、总体设计设计思路如下:1) 4路模拟电压信号通过4个电位器提供0-5V的电压信号。2) 选择ADC0809芯片作为A/D转换器,4路输入信号分别接到ADC0809的IN0—IN4通道,每隔一定的时间采样一次,采完一路采集下一路,4路电压循环采集。3) 利用3个LED数码管显示数据,1个数码管用来显示输入电压路数,3个数码管用来显示电压采样值。4) 延时由8253定时/计数器来实现。 五、硬件电路设计根据设计思路,硬件主要利用了微机实验平台上的ADC0809模数转换器、8253定时/计数器以及LED显示输出等模块。电路原理图如下:1.基本接口实验板部分1) 电位计模块,4个电位计输出4路1-5V的电压信号。2) ADC0809模数转换器,将4路电压信号接到IN0-IN3,ADD_A、ADD_B、ADD_C分别接A0、A1、A2,CS_AD接CS0时,4个采样通道对应的地址分别为280H—283H。3) 延时模块,8253和8255组成延时电路。8255的PA0接到8253的OUT0,程序中查询计数是否结束。硬件电路图如图1所示。 图1 基本实验板上的电路图实验板上的LED显示部分实验板上主要用到了LED数码管显示电路,插孔CS1用于数码管段码的输出选通,插孔CS2用于数码管位选信号的输出选通。电路图如图2所示。

    标签: 多路 电压采集

    上传时间: 2013-11-06

    上传用户:sunchao524

  • 抗EMC干扰光电隔离放大器/转换器/变送器IC-技术资料参考

    隔离放大器IC___产品特点: 1.精度等级:0.1级、0.2级、0.5级。 2.0-2.5V/0-5V/0-10V/1-5V等标准电压信号、0-1mA/ 0-10mA/0-20mA/4-20mA等标准电流信号输入, 输出标准的隔离信号。 3.输出电压信号:0-5V/0-10V/1-5V、输出电流信号:0-10mA/0-20mA/4-20mA,具有高带载能力。 4.全量程范围内极高的线性度(非线性度<0.2%) 隔离放大器IC___应用举例: 1.直流电流/电压信号的隔离、转换及放大 2.模拟信号地线干扰抑制及数据隔离采集 3.信号远程无失传输 4.电力监控、医疗设备隔离安全栅 5.一进一出、一进两出、两进两出模拟信号转换 隔离放大器IC___产品型号及定义 连续隔离电压值: 3000VDC 电源电压输入范围: ±10%Vin 焊接温度(10秒): +300℃ AOT -U(A)□ -P□- O□ 输入电压或电流信号值 U1:0-5V A1:0—1mA U2:0-10V A2: 0—10mA U3:0-75mV A3: 0—20mA U4:0-2.5V A4: 4—20mA U5:0-±5V A5:0—±1mA U6:0-±10V A6: 0—±10mA U7:0-±100mV A7: 0—±20mA U8:用户自定义 A8: 用户自定义 隔离放大器IC___辅助电源 P1:DC24V P2:DC12V   P3:DC5V P4:DC15V P5:用户自定义 隔离放大器IC____输出信号 O1: 4-20mA O2: 0-20mA O4: 0-5V O5: 0-10V O6: 1-5V O7: 0-±5V O8: 0-±10V O9: -20-+20mA O10: 用户自定义 隔离放大器IC___产品特征: 奥通 光耦隔离系列产品是通过模拟信号(线性光耦)隔离放大,转换按比列输出的一种信号隔离放大器,产品抗干扰强。广泛应用在电力、工业控制转换,仪器仪表、远程监控、医疗设备、工业自控等需要电量隔离测控的行业。光耦隔离系列产品属于双隔离产品,输入信号与辅助电源隔离,辅助电源与输出隔离 ,隔离电压3000VDC 隔离放大器IC___产品说明: 1.SIP12脚符合UL94V-0标准阻燃封装 2.只需外接电位器既可调节零点和增益 3.电源、信号、输入输出 3000VDC隔离 4.工业级温度范围:-45~+85度 5.有较强的抗EMC电磁干扰和高频信号空间干扰特性 6.大小: 32.0mm*13.8mm*8.8mm

    标签: EMC IC 干扰 光电隔离

    上传时间: 2014-01-04

    上传用户:wangzeng

  • 高频电子线路学习与解题指导_阳昌汉

    《高频电子线路学习与解题指导(修订版)》包括高频小信号调谐放大器、高频功率放大器、正弦波振荡器、振幅调制电路、调幅信号的解调电路、角度调制电路、调角信号的解调电路和变频电路等各章节的重点与难点分析说明,典型例题的分析计算和思考题与习题的参考解答。

    标签: 高频电子线路

    上传时间: 2014-12-31

    上传用户:ljd123456

  • Arduino学习笔记4_Arduino软件模拟PWM

    注:1.这篇文章断断续续写了很久,画图技术也不精,难免错漏,大家凑合看.有问题可以留言.      2.论坛排版把我的代码缩进全弄没了,大家将代码粘贴到arduino编译器,然后按ctrl+T重新格式化代码格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脉宽调制波,通过调整输出信号占空比,从而达到改 变输出平均电压的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 个8 位精度PWM 引脚,分别是3, 5, 6, 9, 10, 11 脚。我们可以使用analogWrite()控 制PWM 脚输出频率大概在500Hz 的左右的PWM 调制波。分辨率8 位即2 的8 次方等于 256 级精度。但是有时候我们会觉得6 个PWM 引脚不够用。比如我们做一个10 路灯调光, 就需要有10 个PWM 脚。Arduino Duemilanove 2009 有13 个数字输出脚,如果它们都可以 PWM 的话,就能满足条件了。于是本文介绍用软件模拟PWM。 二、Arduino 软件模拟PWM Arduino PWM 调压原理:PWM 有好几种方法。而Arduino 因为电源和实现难度限制,一般 使用周期恒定,占空比变化的单极性PWM。 通过调整一个周期里面输出脚高/低电平的时间比(即是占空比)去获得给一个用电器不同 的平均功率。 如图所示,假设PWM 波形周期1ms(即1kHz),分辨率1000 级。那么需要一个信号时间 精度1ms/1000=1us 的信号源,即1MHz。所以说,PWM 的实现难点在于需要使用很高频的 信号源,才能获得快速与高精度。下面先由一个简单的PWM 程序开始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 这是一个软件PWM 控制Arduino D13 引脚的例子。只需要一块Arduino 即可测试此代码。 程序解析:由for 循环可以看出,完成一个PWM 周期,共循环255 次。 假设bright=100 时候,在第0~100 次循环中,i 等于1 到99 均小于bright,于是输出PWMPin 高电平; 然后第100 到255 次循环里面,i 等于100~255 大于bright,于是输出PWMPin 低电平。无 论输出高低电平都保持30us。 那么说,如果bright=100 的话,就有100 次循环是高电平,155 次循环是低电平。 如果忽略指令执行时间的话,这次的PWM 波形占空比为100/255,如果调整bright 的值, 就能改变接在D13 的LED 的亮度。 这里设置了每次for 循环之后,将bright 加一,并且当bright 加到255 时归0。所以,我们 看到的最终效果就是LED 慢慢变亮,到顶之后然后突然暗回去重新变亮。 这是最基本的PWM 方法,也应该是大家想的比较多的想法。 然后介绍一个简单一点的。思维风格完全不同。不过对于驱动一个LED 来说,效果与上面 的程序一样。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,这段代码少了一个For 循环。它先输出一个高电平,然后维持(bright*30)us。然 后输出一个低电平,维持时间((255-bright)*30)us。这样两次高低就能完成一个PWM 周期。 分辨率也是255。 三、多引脚PWM Arduino 本身已有PWM 引脚并且运行起来不占CPU 时间,所以软件模拟一个引脚的PWM 完全没有实用意义。我们软件模拟的价值在于:他能将任意的数字IO 口变成PWM 引脚。 当一片Arduino 要同时控制多个PWM,并且没有其他重任务的时候,就要用软件PWM 了。 多引脚PWM 有一种下面的方式: int brights[14] = {0}; //定义14个引脚的初始亮度,可以随意设置 int StartPWMPin = 0, EndPWMPin = 13; //设置D0~D13为PWM 引脚 int PWMResolution = 255; //设置PWM 占空比分辨率 void setup() { //定义所有IO 端输出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //随便定义个初始亮度,便于观察 brights[ i ] = random(0, 255); } } void loop() { //这for 循环是为14盏灯做渐亮的。每次Arduino loop()循环, //brights 自增一次。直到brights=255时候,将brights 置零重新计数。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是计数一个PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每个PWM 周期均遍历所有引脚 { if(i < brights[j])\   所以我们要更改PWM 周期的话,我们将精度(代码里面的变量:PWMResolution)降低就行,比如一般调整LED 亮度的话,我们用64 级精度就行。这样速度就是2x32x64=4ms。就不会闪了。

    标签: Arduino PWM 软件模拟

    上传时间: 2013-10-08

    上传用户:dingdingcandy

  • Arduino学习笔记4_Arduino软件模拟PWM

    注:1.这篇文章断断续续写了很久,画图技术也不精,难免错漏,大家凑合看.有问题可以留言.      2.论坛排版把我的代码缩进全弄没了,大家将代码粘贴到arduino编译器,然后按ctrl+T重新格式化代码格式即可看的舒服. 一、什么是PWM PWM 即Pulse Wavelength Modulation 脉宽调制波,通过调整输出信号占空比,从而达到改 变输出平均电压的目的。相信Arduino 的PWM 大家都不陌生,在Arduino Duemilanove 2009 中,有6 个8 位精度PWM 引脚,分别是3, 5, 6, 9, 10, 11 脚。我们可以使用analogWrite()控 制PWM 脚输出频率大概在500Hz 的左右的PWM 调制波。分辨率8 位即2 的8 次方等于 256 级精度。但是有时候我们会觉得6 个PWM 引脚不够用。比如我们做一个10 路灯调光, 就需要有10 个PWM 脚。Arduino Duemilanove 2009 有13 个数字输出脚,如果它们都可以 PWM 的话,就能满足条件了。于是本文介绍用软件模拟PWM。 二、Arduino 软件模拟PWM Arduino PWM 调压原理:PWM 有好几种方法。而Arduino 因为电源和实现难度限制,一般 使用周期恒定,占空比变化的单极性PWM。 通过调整一个周期里面输出脚高/低电平的时间比(即是占空比)去获得给一个用电器不同 的平均功率。 如图所示,假设PWM 波形周期1ms(即1kHz),分辨率1000 级。那么需要一个信号时间 精度1ms/1000=1us 的信号源,即1MHz。所以说,PWM 的实现难点在于需要使用很高频的 信号源,才能获得快速与高精度。下面先由一个简单的PWM 程序开始: const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { if((bright++) == 255) bright = 0; for(int i = 0; i < 255; i++) { if(i < bright) { digitalWrite(PWMPin, HIGH); delayMicroseconds(30); } else { digitalWrite(PWMPin, LOW); delayMicroseconds(30); } } } 这是一个软件PWM 控制Arduino D13 引脚的例子。只需要一块Arduino 即可测试此代码。 程序解析:由for 循环可以看出,完成一个PWM 周期,共循环255 次。 假设bright=100 时候,在第0~100 次循环中,i 等于1 到99 均小于bright,于是输出PWMPin 高电平; 然后第100 到255 次循环里面,i 等于100~255 大于bright,于是输出PWMPin 低电平。无 论输出高低电平都保持30us。 那么说,如果bright=100 的话,就有100 次循环是高电平,155 次循环是低电平。 如果忽略指令执行时间的话,这次的PWM 波形占空比为100/255,如果调整bright 的值, 就能改变接在D13 的LED 的亮度。 这里设置了每次for 循环之后,将bright 加一,并且当bright 加到255 时归0。所以,我们 看到的最终效果就是LED 慢慢变亮,到顶之后然后突然暗回去重新变亮。 这是最基本的PWM 方法,也应该是大家想的比较多的想法。 然后介绍一个简单一点的。思维风格完全不同。不过对于驱动一个LED 来说,效果与上面 的程序一样。 const int PWMPin = 13; int bright = 0; void setup() { pinMode(PWMPin, OUTPUT); } void loop() { digitalWrite(PWMPin, HIGH); delayMicroseconds(bright*30); digitalWrite(PWMPin, LOW); delayMicroseconds((255 - bright)*30); if((bright++) == 255) bright = 0; } 可以看出,这段代码少了一个For 循环。它先输出一个高电平,然后维持(bright*30)us。然 后输出一个低电平,维持时间((255-bright)*30)us。这样两次高低就能完成一个PWM 周期。 分辨率也是255。 三、多引脚PWM Arduino 本身已有PWM 引脚并且运行起来不占CPU 时间,所以软件模拟一个引脚的PWM 完全没有实用意义。我们软件模拟的价值在于:他能将任意的数字IO 口变成PWM 引脚。 当一片Arduino 要同时控制多个PWM,并且没有其他重任务的时候,就要用软件PWM 了。 多引脚PWM 有一种下面的方式: int brights[14] = {0}; //定义14个引脚的初始亮度,可以随意设置 int StartPWMPin = 0, EndPWMPin = 13; //设置D0~D13为PWM 引脚 int PWMResolution = 255; //设置PWM 占空比分辨率 void setup() { //定义所有IO 端输出 for(int i = StartPWMPin; i <= EndPWMPin; i++) { pinMode(i, OUTPUT); //随便定义个初始亮度,便于观察 brights[ i ] = random(0, 255); } } void loop() { //这for 循环是为14盏灯做渐亮的。每次Arduino loop()循环, //brights 自增一次。直到brights=255时候,将brights 置零重新计数。 for(int i = StartPWMPin; i <= EndPWMPin; i++) { if((brights[i]++) == PWMResolution) brights[i] = 0; } for(int i = 0; i <= PWMResolution; i++) //i 是计数一个PWM 周期 { for(int j = StartPWMPin; j <= EndPWMPin; j++) //每个PWM 周期均遍历所有引脚 { if(i < brights[j])\   所以我们要更改PWM 周期的话,我们将精度(代码里面的变量:PWMResolution)降低就行,比如一般调整LED 亮度的话,我们用64 级精度就行。这样速度就是2x32x64=4ms。就不会闪了。

    标签: Arduino PWM 软件模拟

    上传时间: 2013-10-23

    上传用户:mqien