帮我详细的注释一下PWM? 谢谢。

汇编程序:
PWMH DATA 30H ;高电平脉冲的个数
PWM DATA 31H ;PWM周期
COUNTER DATA 32H
TEMP DATA 33H

ORG 0000H
AJMP MAIN
ORG 000BH
AJMP INTT0

ORG 0100H
MAIN:
MOV SP,#60H ;给堆栈指针赋初值
MOV PWMH,#02H ;
MOV COUNTER,#01H
MOV PWM,#15H
MOV TMOD,#02H ;定时器0在模式2下工作
MOV TL0,#38H ;定时器每200us产生一次溢出
MOV TH0,#38H ;自动重装的值
SETB ET0 ;使能定时器0中断
SETB EA ;使能总中断
SETB TR0 ;开始计时
KSCAN:
JNB P1.1,K1CHECK ;扫描KEY1,
JNB P1.2,K2CHECK ;扫描KEY2,如果按下KEY2,跳转到KEY2处理程序
SJMP KSCAN

K1CHECK:
JB P1.1,K1HANDLE ;去抖动,如果按下KEY1,跳转到KEY1处理程序
SJMP K1CHECK
K1HANDLE:
MOV A,PWMH
CJNE A,PWM,K1H0 ;判断是否到达上边界
SJMP KSCAN ;是,则不进行任何操作
K1H0:
MOV A,PWMH
INC A
CJNE A,PWM,K1H1 ;如果在加1后到达最大值
CLR TR0 ;定时器停止
SETB P1.0 ;P1.0为高电平
SJMP K1H2
K1H1:
CJNE A,#02H,K1H2 ;如果加1后到达下边界
SETB TR0 ;重开定时器
K1H2:
INC PWMH ;增加占空比
SJMP KSCAN

K2CHECK:
JB P1.2,K2HANDLE ;去抖动,如果按下KEY2,跳转到KEY2处理程序
SJMP K2CHECK
K2HANDLE:
MOV A,PWMH
CJNE A,#01H,K2H0 ;判断是否到达下边界
SJMP KSCAN ;是,则不进行任何操作
K2H0:
MOV A,PWMH
MOV TEMP,PWM
DEC A
CJNE A,#01H,K2H1 ;如果在减1后到达下边界
CLR TR0 ;定时器停止
CLR P1.0 ;P1.0为低电平
SJMP K2H2
K2H1:
DEC TEMP
CJNE A,TEMP,K2H2 ;如果到达上边界
SETB TR0 ;启动定时器
K2H2:
DEC PWMH ;降低占空比
SJMP KSCAN

INTT0:
PUSH PSW ;现场保护
PUSH ACC
INC COUNTER ;计数值加1
MOV A,COUNTER
CJNE A,PWMH,INTT01 ;如果等于高电平脉冲数
CLR P1.0 ;P1.0变为低电平
INTT01: CJNE A,PWM,INTT02 ;如果等于周期数
MOV COUNTER,#01H ;计数器复位
SETB P1.0 ;P1.0为高电平
INTT02: POP ACC ;出栈
POP PSW
RETI

END

介绍了PWM 技术的基本原理,并详细介绍了在智能充电器中采用的PWM技术的方法和其优缺点,并针对问题提出了更加合理的解决方案,本文介绍的方法主要面向镍氢和镍镉电池充电器等应用

PWM技术的基本原理

随着电子技术的发展,出现了多种PWM技术,其中包括:相电压控制PWM、脉宽PWM法、随机PWM、SPWM法、线电压控制PWM等,而本文介绍的是在镍氢电池智能充电器中采用的脉宽PWM法。它是把每一脉冲宽度均相等的脉冲列作为PWM波形,通过改变脉冲列的周期可以调频,改变脉冲的宽度或占空比可以调压,采用适当控制方法即可使电压与频率协调变化。可以通过调整PWM的周期、PWM的占空比而达到控制充电电流的目的。

PWM技术的具体应用
PWM软件法控制充电电流
本方法的基本思想就是利用单片机具有的PWM端口,在不改变PWM方波周期的前提下,通过软件的方法调整单片机的PWM控制寄存器来调整PWM的占空比,从而控制充电电流。本方法所要求的单片机必须具有ADC端口和PWM端口这两个必须条件,另外ADC的位数尽量高,单片机的工作速度尽量快。在调整充电电流前,单片机先快速读取充电电流的大小,然后把设定的充电电流与实际读取到的充电电流进行比较,若实际电流偏小则向增加充电电流的方向调整PWM的占空比;若实际电流偏大则向减小充电电流的方向调整PWM的占空比。在软件PWM的调整过程中要注意ADC的读数偏差和电源工作电压等引入的纹波干扰,合理采用算术平均法等数字滤波技术。软件PWM法具有以下优缺点。

优点:

简化了PWM的硬件电路,降低了硬件的成本。利用软件PWM不用外部的硬件PWM和电压比较器,只需要功率MOSFET、续流磁芯、储能电容等元器件,大大简化了外围电路。

可控制涓流大小。在PWM控制充电的过程中,单片机可实时检测ADC端口上充电电流的大小,并根据充电电流大小与设定的涓流进行比较,以决定PWM占空比的调整方向。

电池唤醒充电。单片机利用ADC端口与PWM的寄存器可以任意设定充电电流的大小,所以,对于电池电压比较低的电池,在上电后,可以采取小电流充一段时间的方式进行充电唤醒,并且在小电流的情况下可以近似认为恒流,对电池的冲击破坏也较小。
缺点:

电流控制精度低。充电电流的大小的感知是通过电流采样电阻来实现的,采样电阻上的压降传到单片机的ADC输入端口,单片机读取本端口的电压就可以知道充电电流的大小。若设定采样电阻为Rsample(单位为Ω),采样电阻的压降为Vsample(单位为mV), 10位ADC的参考电压为5.0V。则ADC的1 LSB对应的电压值为 5000mV/1024≈5mV。一个5mV的数值转换成电流值就是50mA,所以软件PWM电流控制精度最大为50mA。若想增加软件PWM的电流控制精度,可以设法降低ADC的参考电压或采用10位以上ADC的单片机。

PWM采用软启动的方式。在进行大电流快速充电的过程中,充电从停止到重新启动的过程中,由于磁芯上的反电动势的存在,所以在重新充电时必须降低PWM的有效占空比,以克服由于软件调整PWM的速度比较慢而带来的无法控制充电电流的问题。

充电效率不是很高。在快速充电时,因为采用了充电软启动,再加上单片机的PWM调整速度比较慢,所以实际上停止充电或小电流慢速上升充电的时间是比较大的。

为了克服2和3缺点带来的充电效率低的问题,我们可以采用充电时间比较长,而停止充电时间比较短的充电方式,例如充2s停50ms,再加上软启动时的电流慢速启动折合成的停止充电时间,设定为50ms,则实际充电效率为(2000ms-100ms)/2000ms=95%,这样也可以保证充电效率在90%以上。

纯硬件PWM法控制充电电流

由于单片机的工作频率一般都在4MHz左右,由单片机产生的PWM的工作频率是很低的,再加上单片机用ADC方式读取充电电流需要的时间,因此用软件PWM的方式调整充电电流的频率是比较低的,为了克服以上的缺陷,可以采用外部高速PWM的方法来控制充电电流。现在智能充电器中采用的PWM控制芯片主要有TL494等,本PWM控制芯片的工作频率可以达到300kHz以上,外加阻容元件就可以实现对电池充电过程中的恒流限压作用,单片机只须用一个普通的I/O端口控制TL494使能即可。另外也可以采用电压比较器替代TL494,如LM393和LM358等。采用纯硬件PWM具有以下优缺点。

优点:

电流精度高。充电电流的控制精度只与电流采样电阻的精度有关,与单片机没有关系。不受软件PWM的调整速度和ADC的精度限制。

充电效率高。不存在软件PWM的慢启动问题,所以在相同的恒流充电和相同的充电时间内,充到电池中的能量高。

对电池损害小。由于充电时的电流比较稳定,波动幅度很小,所以对电池的冲击很小,另外TL494还具有限压作用,可以很好地保护电池。

缺点:

硬件的价格比较贵。TL494的使用在带来以上优点的同时,增加了产品的成本,可以采用LM358或LM393的方式进行克服。

涓流控制简单,并且是脉动的。电池充电结束后,一般采用涓流充电的方式对电池维护充电,以克服电池的自放电效应带来的容量损耗。单片机的普通I/O控制端口无法实现PWM端口的功能,即使可以用软件模拟的方法实现简单的PWM功能,但由于单片机工作的实时性要求,其软件模拟的PWM频率也比较低,所以最终采用的还是脉冲充电的方式,例如在10%的时间是充电的,在另外90%时间内不进行充电。这样对充满电的电池的冲击较小。
单片机 PWM控制端口与硬件PWM融合

对于单纯硬件PWM的涓流充电的脉动问题,可以采用具有PWM端口的单片机,再结合外部PWM芯片即可解决涓流的脉动性。

在充电过程中可以这样控制充电电流:采用恒流大电流快速充电时,可以把单片机的PWM输出全部为高电平(PWM控制芯片高电平使能)或低电平(PWM控制芯片低电平使能);当进行涓流充电时,可以把单片机的PWM控制端口输出PWM信号,然后通过测试电流采样电阻上的压降来调整PWM的占空比,直到符合要求为止。
温馨提示:内容为网友见解,仅供参考
无其他回答

帮我详细的注释一下PWM? 谢谢。
对于单纯硬件PWM的涓流充电的脉动问题,可以采用具有PWM端口的单片机,再结合外部PWM芯片即可解决涓流的脉动性。在充电过程中可以这样控制充电电流:采用恒流大电流快速充电时,可以把单片机的PWM输出全部为高电平(PWM控制芯片高电平使能)或低电平(PWM控制芯片低电平使能);当进行涓流充电时,可以把单片机的P...

帮我解释一下这个PWM控制电机调速的程序。
一、加速减速,就是增加或减少脉冲宽度,改变电机速度!脉冲的宽度由 1、CLK=0的状态持续,由T1的定时决定;2、CLK=1的状态持续,由(T0-T1)的时间决定;二、定时器中断TH0=0x00 ; TL0=0x00 ;1、T0定时器工作1方式,T0定时器启动后,从TH0、TL0赋值的计数值开始增加,增加到0XFFFF后,T0...

求详细解释这个51单片机PWM波原理
如果到了,说明PWM的低电平时间够了,那么就改flag=1,输出改高电平,同时记录次数变量清零,重新开始,如此循环便可得到你想要的PWM波形。

计数器0的溢出为pca计数器的时钟源 什么意思
PWM[54]是定义的一组PWM脉宽输出数组,PWM脉宽输出是0-255;0的时候脉宽输出最大,255的时候脉宽输出最小;然后那个初始化PCA,初始化定时器0就不说了,你自己下一个手册看下就明白;然后是中断,每中断一次index加1,然后判断index是不是等于54,意思就是PWM[54]整个数组里面的PWM是不是都送了一次...

at89c51的pwm输出占空比的概念 后面可以给点注释吗?
PWM输出脚P1.1脚:#define out P1^1占空比全局变量 unsigned char ZKB; \/\/ZKB=1~100即1%~100%void moto_control(){unsigned char i;for(i=0;i<100;i++){if(i==0)out=1; \/\/等于0的时候输出高电平 不等于0的时候保持状态吧 if(i==ZKB)out=0; \/\/当i==你设置的占空比时候 ...

单片机pwm控制电机转速
1”,41ns—400ns输出低电频“0”,这样为一个周期,后面就一直循环吧。如果按键P1.0按下,执行方式1,全速运行,否则以默认方式运行;按键P1.1按下,执行方式2,改变占空比,以50%的速度运行,否则,不作改变;按键P1.2按下,执行方式3,改变占空比,以10%的速度运行,否则,不作改变。

...能使单片机的两个输出口产生2个不同的pwm脉冲吗??懂得话给个程序...
提供一种思路,程序没时间写。1、PWM需要周期,因此定时器必须得设置匹配值,达到周期计数时间后复位TC值;2、两个PWM波形需要产生可调的PWM,那么就需要让定时器知道什么时刻该让这个IO口输出高低电平。可以让两个输出提供参数,比如数值是多少后出现高电平,高电平持续多长数值?3、最后就是关键点了,...

谁帮忙把这个51单片机模仿PWM呼吸灯的主函数程序注释下,很乱
void main (void){ unsigned int t = 1;unsigned int i, TEMP;unsigned int TYPE = 0;bit LOOP = 0;while (1){ if (KEY == 0){ l1:Delay(10000);TYPE = (1 - TYPE);if (TYPE == 0){ t = 1;LOOP = 0;};} if (TYPE == 0){ if (LOOP == 0){ Display(t);t++;...

Altium Designer中如何表示PWM信号输入
1:用字符串注释 2:用线画几个PWM信号 3:标网络标号

C语言写占空比50%PWM波的代码
如果想要进步最好自己写,不要老是要人家给代码之类的。给个思路你吧。有软件PWM和硬件PWM 像51单片机没有硬件PWM只能用软件PWM:1,设定定时器并开中断(定时时间为你需要的PWM频率)2,在中断函数中设定每次中断到来输出PWM的端口电平取反。硬件PWM:根据单片机的datasheet,配置好相关的寄存器并使能PWM...

相似回答