直流电机_脉宽调制调速(PWM)

实验三  直流电机脉宽调制调速

1. 编写程序,能够在数码管上显示一个数值。

2. 固定向P1.1输出0,然后测量每秒钟电机转动的转数,将其显示在数码管,每秒刷新一次即可。

3. 使用脉宽调制的方法,动态调整向P1.1输出的内容,使得电机转速能够稳定在一个预定值附近,同时实时显示当前转速。

4. 根据输入修改电机转速目标值。每隔一秒钟读取两个开关的状态,如果S1按下,转速目标值加一,如果S2按下,目标值减一。同时动态调整输出,使得电机转速能够稳定到目标值附近。交替显示目标值和当前转速值。

4.2 编写中断程序,测量电机转速

本程序需要使用定时器定时,并使用中断来同步。中断程序的典型例子如下:

ORG  0000H

LJMP  START

ORG   000BH

LJMP  T0IN ;中断向量表

ORG   0040H

START: ...;初始化

...

T0IN: ...;中断程序

... 

RETI ;中断返回

END

按照脉宽调制的原理,再添加一个快速的定时中断(0.1ms左右),在这个中断里面动态改变P1.1的输出,宏观上输出有效(0)的比例就是预定的控制变量。这个控制变量增大,电机转速就应该提高,但由于各种内部和外部因素,它们之间不存在简单的函数关系,因此必须根据测量出来的实际转速进行动态调整。

首先将电机转速控制在一个预定数值附近,在每一个1秒钟中断测量出当前转速之后,将其与目标值相对比,如果不够则增加控制变量,否则减少之,这样就能逐步达到稳定转速的目的。同时将速度显示出来。

在上面程序的基础上,再加上根据开关状态改变预定转速的代码。同时,在主程序中交替显示目标值和当前转速值,显示一个内容之后等待一段时间(可以由延时代码实现),然后再显示另一个并延时。要显示的内容都是在中断中被修改的。

实验原理

对于直流电机来说,其转速由输入电压决定,因此具有平滑调速的效果;相比而言,交流电机的转速由交流电频率和电机结构决定,难以改变速度。当然,交流电机构造简单,没有换向器,所以容易制造高转速、高电压、大电流、大容量的电机;而直流电机一般用在负荷小,但要求转速连续可调的场合,如伺服电机。

脉宽调制(Pulse Width Modulation,PWM)是一种能够通过开关量输出达到模拟量输出效果的方法。使用PWM可以实现频率调制、电压调制等效果,并且需要的外围器件较少,特别适合于单片机控制领域。这里只关心通过PWM实现电压调制,从而控制直流电机转速的效果。也称作脉宽调制调速。

PWM的基本原理是通过输出一个很高频率的0/1信号,其中1的比例为δ(也叫做占空比),在外围积分元件的作用下,使得总的效果相当于输出δ×A(A为高电平电压)的电压。通过改变占空比就可以调整输出电压,从而达到模拟输出并控制电机转速的效果。

使用单片机实现PWM,就是根据预定的占空比δ来输出0和1,这里δ就是控制变量。最简单的办法就是以某个时间单位(如0.1ms,相当于10kHz)为基准,在前N段输出1,后M-N段输出0,总体的占空比就是N/M。这种方法由于0和1分布不均匀,所以要求基准频率要足够高,否则会出现颠簸现象。

要达到更稳定的效果,可以采用累加进位法如果将总的周期内的0和1均匀分散开。设置一个累加变量x,每次加N,若结果大于M,则输出1,并减去M;否则输出0。这样整体的占空比也是N/M。在实验中取M=256可以使程序更加简单。

另外,由于本实验板的设计,输出0使电机工作。因此对于本实验,上面所说的0和1要翻转过来用。

在本实验板中,电机每转动一次,与之相连的偏心轮将遮挡光电对管一次,因此会产生一个脉冲,送到INT0。要测量转速,既可以测量相邻两次中断之间的时间;也可以测量一秒种之内发生的中断次数。显然,后一种方法更加简单。

进行转速控制时,涉及到三个变量:预期转速,实际转速和控制变量。这里控制变量就是占空比。我们并不能够预先精确知道某个控制变量的值会导致多少的实际转速,因为这里有很多内部和外部因素起作用(如摩擦力,惯性等),但可以确定就是随着控制变量的增加,实际转速会增加。

反馈控制的基本原理就是根据实际结果与预期结果之间的差值,来调节控制变量的值。当实际转速高于预期转速时,我们需要减少控制变量,以降低速度;反之则需要调高控制变量。

本实验的转速控制可以使用简单的比例控制算法,也就是当转速S大于预定值时,将输出0的个数减少;当转速小于预定值时,将输出0的个数增加。改变值正比于测量出的差值。也可自行使用其他更加复杂的算法。

实验中采用的电机最大转速在200转/s左右,转速小于40转/s左右将不稳定,可能会停转。

直流电机_脉宽调制调速(PWM)_第1张图片

直流电机_脉宽调制调速(PWM)_第2张图片

实验三
ORG  0000H
P4 EQU 0C0H
P4SW EQU 0BBH
CLK EQU P4.4
DAT EQU P4.5
LJMP  MAIN
ORG  0003H;外部中断0
LJMP WAIBU
ORG  000BH ;定时器0
LJMP  DINGSHI0
ORG  001BH ;定时器1
LJMP DINGSHI1

       S1  EQU P3.6
       S2  EQU P3.7
MAIN:  MOV DPTR, #TAB
       MOV P4SW, #70H
       MOV R7,#0;交替显示
       MOV R0,#0;计转数
       MOV R3,#100;计目标值
       MOV R1,#0;产生1s定时用
       MOV R6,#0 ;r6,R5,R4计zhuan数
       MOV R5,#0
       MOV R4,#0
       MOV 60H,#100;存高电平
       MOV 61H,#100;存低电平
       
       MOV  R2,60H;R2付初值
       MOV  TMOD,#12H;定时器作方式2
       MOV  TH0,#38H ;200us
       MOV  TL0,#38H
       MOV  TH1,#3CH ;20次产生1s定时初值
       MOV  TL1,#0B0H
       SETB  EA
       SETB  ET1
       SETB  TR1

       SETB  ET0
       SETB  TR0
       
       SETB  EX0
       SETB  IT0

       CLR P1.1 ;P1.1初始状态

 L1:   SJMP L1 ;查询

DINGSHI1: 
PUSH ACC;中断
       PUSH PSW
       INC R1
       CJNE R1,#20,LP1
       MOV R1,#0
;目标值增减
       JNB S1,ZENG
       SJMP L2
ZENG:  INC R3
       CJNE R3,#200,L2
       MOV R3,200;最大速
       SJMP L2
       JNB S2,JIAN
       SJMP L2
JIAN: DEC R3
       CJNE R3,#40,L2
       MOV R3,40
;判断当前转速与目标值关系并调整
L2:    MOV A,R0  
       SUBB A,R3
       JC ZENG1;R0R3 JIAN1
       SJMP BUYONG
ZENG1: INC 61H
       DEC 60H
       SJMP BUYONG
       
JIAN1: INC 60H
       DEC 61H       
;显示
BUYONG:INC R7
       CJNE R7,#2,LP;交替显示JIAO TI XIAN SHI
       MOV R7,#0
;将目标值显示出来
        MOV A,R3 
        MOV B,#100
        DIV AB 
        MOV 62H,A;百位
        XCH A,B
        MOV B,#10
        DIV AB
        MOV 63H,A;十位
        MOV 64H,B;各位
        
       MOV R6,64H;目标转速ZHUAN
       MOV R5,63H
      MOV R4,62H

  LP:   MOV A,R6 
        MOV DPTR,#TAB ;dptr首地址)
        MOVC A,@A+DPTR ;a=欲显示各位字符的字形行
        LCALL SHOW  ;调用SHOW程序(显示)
        
        MOV A,R5
        MOV DPTR,#TAB ;dptr首地址)
        MOVC A,@A+DPTR ;a=欲显示
        LCALL SHOW  ;调用SHOW程序(显示)
        
        MOV A,R4
        MOV DPTR,#TAB ;dptr首地址)
        MOVC A,@A+DPTR ;a=欲显示
        LCALL SHOW  ;调用SHOW程序(显示)   
        MOV R6,#0 ;转数清零
        MOV R5,#0
        MOV R4,#0
        MOV R0,#0
LP1:    POP PSW
        POP ACC 
     RETI


DINGSHI0:  
       PUSH ACC;中断
       PUSH PSW
       DJNZ  R2,EXIT
       CPL  P1.1 
       JNB  P1.1,L3; ;判断P1.1电平高低
       MOV  R2,60H;;若P1.1=1,给R2赋高电平计数值
       SJMP  EXIT
 L3:   MOV  R2,61H;;若P1.1=0,给R2赋低电平计数值
 EXIT: POP PSW
       POP ACC 
       RETI
WAIBU:  INC R0
        INC R6
        CJNE R6,#10,EXIT1
       
        INC R5
        MOV R6,#0
        CJNE R5,#10,EXIT1
        INC R4
        MOV R5,#0
        CJNE R4,#10,EXIT1
        MOV R4,#0
 EXIT1:   RETI
SHOW:   MOV     R0,#8  ;r0=8
SLP:    CLR     CLK  ;P1.0输出低电平
        RLC     A  ;将存放在A中欲显示的字符码右移一位(最低位存入C)
        MOV     DAT,C
        SETB    CLK  ;P1.0输出高电平
        DJNZ    R0,SLP  ;r0减1不为0转到SLP 继续输出字形码 
        RET
TAB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
END




你可能感兴趣的:(单片机)