实验十直流电机实验目的1、掌握直流电动机的驱动与控制;2、了解脉冲宽度调制(PWM)。实验设备与文件PC机、Stc89c52实验箱、USB线、杜邦线、Stc89c52实验板原理图、直流小电机。控制信号接口驱动输出接口UIOP30/TXDYULN2003141S3LIINAs16BI108088P31/RXD2NB4188066045444INP32/INTO正10P33/INT1GNDVCC店工-904独立键盘模块电机驱动模块图1原理图三、实验原理3.1直流电机控制直流电机多用在无交流电源、需要移动方便的场合,具有低速大力矩等特点。对直流电机可精确控制其旋转速度或转矩,直流电机转速与施加电压成正比,转矩与电流成正比。为了使直流电机高效运行,常见方法是施加一个脉冲宽度调制(PWM)波,其占空比正比于所需速度。PWM信号相对容易产生,电机则起到了一个低通滤波器作用。1
1 实验十 直流电机 一、 实验目的 1、掌握直流电动机的驱动与控制; 2、了解脉冲宽度调制(PWM)。 二、 实验设备与文件 PC 机、stc89c52 实验箱、USB 线、杜邦线、stc89c52 实验板原理图、直流 小电机。 图 1 原理图 三、 实验原理 3.1 直流电机控制 直流电机多用在无交流电源、需要移动方便的场合,具有低速大力矩等特点。 对直流电机可精确控制其旋转速度或转矩,直流电机转速与施加电压成正比,转 矩与电流成正比。为了使直流电机高效运行,常见方法是施加一个脉冲宽度调制 (PWM)波,其占空比正比于所需速度。PWM 信号相对容易产生,电机则起到了一 个低通滤波器作用
如图2所示,采用达林顿管组成了一个可控制直流电机转速和旋转方向的H桥电路,H桥电路可以改变通过直流电机的电流方向,直流电机旋转方向随着电流方向改变。单片机的P1.0口输出PWM信号控制直流电机转速,P1.1口控制直流电机旋转方向。当P1.1=1时,P1.0发送PWM波,直流电机正转:反之,P1.1=0时,P1.0发送PWM信号,直流电机反转。U119XTAL1+5V4PO.J3PO2/AD2MOTORR218R1PO.3/AD3XTAL23Q71kPO.4/AD411PO.S/ADSQ3PO.66/ADRSTQ5PO.ZIAD1P2IP3122一PSENTIP33E3.Q8Q6Q2INC04R4R3IP322SC2547H30DECPe1TYP123TIP32S0251DIR8898电00P3.4/T-08051图2直流电机控制因此,增大和减小电机转速,实际上是通过按下“INC”或“DEC”按键来改变输出PWM信号占空比,控制直流电机转速;按下“DIR”按键来改变P1.1输出,改变直流电机旋转方向。3.2脉冲宽度调制(PWM)脉冲宽度调制,英文名PulseWidthModulation,是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),通过调节占空比的变化来调节信号、能量等的变化。占空比就是指在一个周期内,信号处于高电平的时间占整个信号周期的百分比,如图3是一个占空比为25%PWM方波信号。Ims高电平3ms低电平占空比为25%信号图3占空比为25%的PWM信号2
2 如图 2 所示,采用达林顿管组成了一个可控制直流电机转速和旋转方向的 H 桥电路,H 桥电路可以改变通过直流电机的电流方向,直流电机旋转方向随着电 流方向改变。单片机的 P1.0 口输出 PWM 信号控制直流电机转速,P1.1 口控制直 流电机旋转方向。 当 P1.1=1 时,P1.0 发送 PWM 波,直流电机正转;反之,P1.1=0 时,P1.0 发送 PWM 信号,直流电机反转。 图 2 直流电机控制 因此,增大和减小电机转速,实际上是通过按下“INC”或“DEC”按键来改 变输出 PWM 信号占空比,控制直流电机转速;按下“DIR”按键来改变 P1.1 输出, 改变直流电机旋转方向。 3.2 脉冲宽度调制(PWM) 脉冲宽度调制,英文名 Pulse Width Modulation,是通过对一系列脉冲的宽 度进行调制,等效出所需要的波形(包含形状以及幅值),通过调节占空比的变 化来调节信号、能量等的变化。占空比就是指在一个周期内,信号处于高电平的 时间占整个信号周期的百分比,如图 3 是一个占空比为 25% PWM 方波信号。 图 3 占空比为 25%的 PWM 信号
在PWM信号源的输出端加上低通滤波器,可输出等效直流电压,再调节PWM的占空比就可以调节等效直流电压的值。等效输出电压等于方波的幅值×占空比(Duty)。如图4所示,幅值为5V、占空比为25%的方波信号,等效直流电压为5VX25%=1.25V。5VAR110k-0C1100uF图4PWM信号通过低通滤波器PWM信号把模拟信号转化为数字电路所能处理的编码,数字控制电路很多场合都采用PWM信号。如调光电路,占空比大一点亮度就亮一点,为了不出现闪烁现象,PWM的频率要大于我们人眼识别频率。在直流波电路、蜂鸣器驱动、电机驱动、逆变电路等都用到了PWM信号控制。如果单片机内部集成了PWM功能模块,只需要简单设置相应的PWM控制寄存器即可输出PWM信号。如果单片机内部没有PWM功能模块,可以利用定时器和I/0口,定时器中断计数产生所需的频率,I/0输出高低电平。四、实验内容及步骤1、利用keil4软件搭建好实验环境;2、关闭实验板电源,不要在实验板上接插任何模块。将P1.0用杜邦线连接到电机驱动模块(由ULN2003达林顿管组成)J4的4IN上,P1.1连接到J4的3IN上;然后把小电机端子插到J8的C和D上(或者J8的+和D上),电机端子可以不分线序:再打开实验板电源,下载程序。3、依照实验参考程序,实现按S2和S3键改变直流电机转速,按S5键改变直流电机旋转方向;实验现象如果不明显,可观察调节P1.0的占空比对LED灯亮度的影响:也可在Proteus仿真软件上进行模拟实验。4、注意事项:在实验板上不适合做电机的正反转控制的实验,因为这样会产生很大的反向电动势:做电机实验主要是观察一下实验现象,时间不宜过长,否则可能烧掉电机驱动芯片(高速运行下最好不要超过1分钟,因为电机运行需要很大的电流);电机切勿直接接到实验板的VCC和GND上进行实验,这样很容易烧坏实验板。3
3 在 PWM 信号源的输出端加上低通滤波器,可输出等效直流电压,再调节 PWM 的占空比就可以调节等效直流电压的值。等效输出电压等于方波的幅值×占空比 (Duty)。如图 4 所示,幅值为 5V、占空比为 25%的方波信号,等效直流电压为 5V×25%=1.25V。 图 4 PWM 信号通过低通滤波器 PWM 信号把模拟信号转化为数字电路所能处理的编码,数字控制电路很多场 合都采用 PWM 信号。如调光电路,占空比大一点亮度就亮一点,为了不出现闪烁 现象,PWM 的频率要大于我们人眼识别频率。在直流斩波电路、蜂鸣器驱动、电 机驱动、逆变电路等都用到了 PWM 信号控制。 如果单片机内部集成了 PWM 功能模块,只需要简单设置相应的 PWM 控制寄存 器即可输出 PWM 信号。如果单片机内部没有 PWM 功能模块,可以利用定时器和 I/O 口,定时器中断计数产生所需的频率,I/O 输出高低电平。 四、 实验内容及步骤 1、 利用 keil4 软件搭建好实验环境; 2、 关闭实验板电源,不要在实验板上接插任何模块。将 P1.0 用杜邦线连接 到电机驱动模块(由 ULN2003 达林顿管组成)J4 的 4IN 上,P1.1 连接到 J4 的 3IN 上;然后把小电机端子插到 J8 的 C 和 D 上(或者 J8 的+和 D 上),电机端子可以不分线序;再打开实验板电源,下载程序。 3、 依照实验参考程序,实现按 S2 和 S3 键改变直流电机转速,按 S5 键改变 直流电机旋转方向;实验现象如果不明显,可观察调节 P1.0 的占空比对 LED 灯亮度的影响;也可在 Proteus 仿真软件上进行模拟实验。 4、 注意事项:在实验板上不适合做电机的正反转控制的实验,因为这样会 产生很大的反向电动势;做电机实验主要是观察一下实验现象,时间不 宜过长,否则可能烧掉电机驱动芯片(高速运行下最好不要超过 1 分钟, 因为电机运行需要很大的电流);电机切勿直接接到实验板的 VCC 和 GND 上进行实验,这样很容易烧坏实验板
五、实验参考程序#include<reg52.h>//电机占空比设定值,取值范围0-170,0最快unsigned char pwmmotor_val=130://周期unsigned char pwm_t;//PWM输出I/0sbit PWM = P1'o;//旋转方向控制1/0sbit DIR = P1'1;sbit key_s2 = P3'0;sbit key_s3 = P3'1;sbit key_s5 =P3'3;//毫秒级延时void delay(unsigned int z)unsigned int x, y:for(x = z; x > O; x--)for(y = 114; y>0 ; y-);1//定时器0中断voidtimeroO interrupt11pwm_t++;if (pwm_t == 255)PWM = 0:if(pwm_motor_val ==pwm_t)//到达设定的占空比值时,则改变输出PWM = 1;1void main()TMOD=0x02;//8位自动重载THO = 220:TLO = 220;//11.0592M晶振,50uS计数ETO = 1;1/允许定时器0中断EA = 1;1/总中断允许TRO = 1;//启动定时器0while(1)fif(keys2==0)//S2按下占空比减小4
4 五、 实验参考程序 #include <reg52.h> //电机占空比设定值,取值范围 0-170,0 最快 unsigned char pwm_motor_val = 130; unsigned char pwm_t; //周期 sbit PWM = P1^0; //PWM 输出 I/O sbit DIR = P1^1; //旋转方向控制 I/O sbit key_s2 = P3^0; sbit key_s3 = P3^1; sbit key_s5 = P3^3; void delay(unsigned int z) //毫秒级延时 { unsigned int x,y; for(x = z; x > 0; x-) for(y = 114; y > 0 ; y-); } //定时器 0 中断 void timer0() interrupt 1 { pwm_t++; if(pwm_t == 255) PWM = 0; if(pwm_motor_val == pwm_t) //到达设定的占空比值时,则改变输出 PWM = 1; } void main() { TMOD = 0x02;//8 位自动重载 TH0 = 220; TL0 = 220; //11.0592M 晶振,50uS 计数 ET0 = 1; //允许定时器 0 中断 EA = 1; //总中断允许 TR0 = 1; //启动定时器 0 while(1) { if(key_s2 == 0) //S2 按下占空比减小
delay(5) ;if(key_s22 == 0)tif(pwm_motor_val<170)1pwm_motor_val=pwm_motor_val+10//10是步进值,可修改11亨if(key_s3==0)//S3按下占空比增大(delay(5) ;if(key_s3 == 0)1if(pwm_motor_val>o)1pwm_motor_val=pwm_motor_val-10;11if(key_s5==0)//S5按下改变直流电机旋转方向DIR = !DIR;15
5 { delay(5); if(key_s2 == 0) { if(pwm_motor_val < 170) { pwm_motor_val = pwm_motor_val + 10; //10 是步进值,可修改 } } } if(key_s3 == 0) //S3 按下占空比增大 { delay(5); if(key_s3 == 0) { if(pwm_motor_val > 0) { pwm_motor_val = pwm_motor_val - 10; } } } if(key_s5 == 0) //S5 按下改变直流电机旋转方向 { DIR = !DIR; } } }