PWM直流电机调速实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
shortdelay(PWMH);
PWM=0;//turn off电机
shortdelay(PWML);
}
}
五、实验结论及讨论
本实验成功实现了直流电机转速的控制,转速设定值为30r/s,通过数码管显示出当前转速,和设定值,利用脉宽调制原理对电机转速进行间接控制。
本实验实现了通过PWM方法使输出电压改变从而改变直流电机转速的目标,并且电机的转速可以显示出来。因此,本实验既达到了动态调节电机转速,又实现了实时检测电机运转情况。
2.对象模块(PWM电机调速模块)工作原理
直流电机PWM调速模块由测速电路和PWM调速电路两部分组成。模块的电源由接口总线引入。本模块使用的电机为5V直流电机。
1)电机测速部分
①直流电机测速原理介绍
电机测速部分由光电开关完成,电机带动一个周边均匀分布圆孔的金属圆盘,当电机转动时,圆盘跟着一起转动。光源发出的光通过圆孔照射到光电器件上,当圆孔随着电机轴转动时,光电开关可以输出和圆孔数目相同的脉冲,从而测得转速。
}
}
void display(int num)
{
int g,s,b;
b = num/100;
s = num%100/10;
g = num%100%10;
sent(table[b]);
sent(table[s]);
sent(table[g]);
sent(0);sent(0);
sent(table[speed1/100]);
sent(table[speed1%100/10]);
sent(table[speed1%100%10]);
}
void timer0init(void)
{
TMOD = 0X01;
TH0=0XD8;
TL0=0XF0;
}
void detectspeed(void)
{
real_count=count/3.0;
五、实验主代码
#include "reg51.h"
#include<intrins.h>
#define u16 unsigned int
#define uchar unsigned char
#define speed1 30
sbit PWM=P1^7;
sbit DIN=P1^0;
sbit CLK=P1^1;
uchar count ,count_time= 0;
int real_count=0;
uchar time;
uchar PWMH = 400;uchar PWML = 400;
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,\
display(real_count);
}
void changespeed(uchar speed)
{
if(real_count>(speed1))
{PWMH--;PWML++;}
if(real_count<(speed1))
{PWMH++;PWML--;}
}
/********************************************************************/
机电一体化实验报告
题目:
PWM直流电机调速实验
学生姓名:
学号:
指导教师:
张友旺
学院:
机电工程学院
专业班级:
机械1604班
日期2019年12月
一、实验目的
1.了解脉宽调制(PWM)的原理
2.学习用PWM输出模拟量驱动直流电机
3.熟悉51系列单片机的延时程序
二、实验步骤
本实验需要用到本实验需要用到单片机最小应用系统(F1区)、串行静态显示(I3区)和直流电机驱动模块(M1区 )。
void int0(void) interrupt 0
{
count++;
}
void main()
{
PWM=0;//关闭电机
timer0init();
PWM=1;shortdelay(10000);
IT0=1;ET0=EX0=1;IP=0X02;
TR0=EA=1;
while(1)
{
PWM=1;//开启电机
void timer0(void) interrupt 1
{
TR0=EA=0;
count_time++;
if(count_time==30)
{
count_time=0;
detectspeed();
changespeed(speed1);
count=0;
}
timer0init();
TR0=EA=1;
}
{
while(length--){_nop_();}
}
void sent(uchar dat)//sent speed value to the display
{
uchar i = 0;
for(i;i<8;i++)
{
DIN = dat&0x80;
CLK = 0;_nop_();CLK = 1;
dat<<=1;
1.单片机最小应用系统的P1.7接直流电机驱动模块的PWM输入口Control,最小系统的INTO接直流电机驱动模块 PULSEOUT,最小系统的P1.0、P1.1接串行静态显示的DIN、CLK。打开相关模块电源。
2.用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机锁紧插座中,请注意仿真器的方向:缺口朝上。请指导老师检查接线后再打开模块电源。打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加源程序,进行编译,直到编译无误。全速运行程序。
3.观察直流电机转速,一段时间后控制在程序设定的值30转/S的左右。
三、实验原理图
四、实验原理
1.PWM的调速原理
PWM调速是通过改变输出脉冲的占空比,从而改变电机转速的一种调速方法。PWM调速分为单极性和双极性两种。在单极性方式下,电机的转动方向不变,改变的只是转速;而在双极性方式下,电机的转动方向和转速都是可变的。本实验是单极性控制,其基本原理如下:
②电机测速部分电路说明
光电开关产生与电机转速有一定关系的脉冲后,通过LED显示出此时的频率(由于本次试验仅是对频率的调控,所以之后不再区分转速与频率),信号经F/V转换,转换成电压信号,而单片机只能处理数字信号,所以还要通过A/D转换,模拟信号输入到ADC0809模块中,再由ADC0809模块输入到51单片机中,测速部分完毕。
0x77,0x7C,0x39,0x5E,0x7B,0x71,0x00,0x40};//A,B,C,D,E,F, ,-,
void delay1ms(void)
{
uchar a,b;
forBaidu Nhomakorabeab=199;b>0;b--)
for(a=1;a>0;a--);
}
void shortdelay(int length)
假设一个脉冲周期内,高电平电压为Us,持续时间为t1;低电平为0V,持续时间为t2.则脉冲周期T=t1+t2,该周期内平均电压U0=t1*Us/T。令α=t1/T,则U0=α* Us,α表示占空比。当高电平电压不变的情况下,电机两端电压的平均值U0取决于占空比α的大小。改变α的值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。
PWM=0;//turn off电机
shortdelay(PWML);
}
}
五、实验结论及讨论
本实验成功实现了直流电机转速的控制,转速设定值为30r/s,通过数码管显示出当前转速,和设定值,利用脉宽调制原理对电机转速进行间接控制。
本实验实现了通过PWM方法使输出电压改变从而改变直流电机转速的目标,并且电机的转速可以显示出来。因此,本实验既达到了动态调节电机转速,又实现了实时检测电机运转情况。
2.对象模块(PWM电机调速模块)工作原理
直流电机PWM调速模块由测速电路和PWM调速电路两部分组成。模块的电源由接口总线引入。本模块使用的电机为5V直流电机。
1)电机测速部分
①直流电机测速原理介绍
电机测速部分由光电开关完成,电机带动一个周边均匀分布圆孔的金属圆盘,当电机转动时,圆盘跟着一起转动。光源发出的光通过圆孔照射到光电器件上,当圆孔随着电机轴转动时,光电开关可以输出和圆孔数目相同的脉冲,从而测得转速。
}
}
void display(int num)
{
int g,s,b;
b = num/100;
s = num%100/10;
g = num%100%10;
sent(table[b]);
sent(table[s]);
sent(table[g]);
sent(0);sent(0);
sent(table[speed1/100]);
sent(table[speed1%100/10]);
sent(table[speed1%100%10]);
}
void timer0init(void)
{
TMOD = 0X01;
TH0=0XD8;
TL0=0XF0;
}
void detectspeed(void)
{
real_count=count/3.0;
五、实验主代码
#include "reg51.h"
#include<intrins.h>
#define u16 unsigned int
#define uchar unsigned char
#define speed1 30
sbit PWM=P1^7;
sbit DIN=P1^0;
sbit CLK=P1^1;
uchar count ,count_time= 0;
int real_count=0;
uchar time;
uchar PWMH = 400;uchar PWML = 400;
uchar code table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,\
display(real_count);
}
void changespeed(uchar speed)
{
if(real_count>(speed1))
{PWMH--;PWML++;}
if(real_count<(speed1))
{PWMH++;PWML--;}
}
/********************************************************************/
机电一体化实验报告
题目:
PWM直流电机调速实验
学生姓名:
学号:
指导教师:
张友旺
学院:
机电工程学院
专业班级:
机械1604班
日期2019年12月
一、实验目的
1.了解脉宽调制(PWM)的原理
2.学习用PWM输出模拟量驱动直流电机
3.熟悉51系列单片机的延时程序
二、实验步骤
本实验需要用到本实验需要用到单片机最小应用系统(F1区)、串行静态显示(I3区)和直流电机驱动模块(M1区 )。
void int0(void) interrupt 0
{
count++;
}
void main()
{
PWM=0;//关闭电机
timer0init();
PWM=1;shortdelay(10000);
IT0=1;ET0=EX0=1;IP=0X02;
TR0=EA=1;
while(1)
{
PWM=1;//开启电机
void timer0(void) interrupt 1
{
TR0=EA=0;
count_time++;
if(count_time==30)
{
count_time=0;
detectspeed();
changespeed(speed1);
count=0;
}
timer0init();
TR0=EA=1;
}
{
while(length--){_nop_();}
}
void sent(uchar dat)//sent speed value to the display
{
uchar i = 0;
for(i;i<8;i++)
{
DIN = dat&0x80;
CLK = 0;_nop_();CLK = 1;
dat<<=1;
1.单片机最小应用系统的P1.7接直流电机驱动模块的PWM输入口Control,最小系统的INTO接直流电机驱动模块 PULSEOUT,最小系统的P1.0、P1.1接串行静态显示的DIN、CLK。打开相关模块电源。
2.用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机锁紧插座中,请注意仿真器的方向:缺口朝上。请指导老师检查接线后再打开模块电源。打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着添加源程序,进行编译,直到编译无误。全速运行程序。
3.观察直流电机转速,一段时间后控制在程序设定的值30转/S的左右。
三、实验原理图
四、实验原理
1.PWM的调速原理
PWM调速是通过改变输出脉冲的占空比,从而改变电机转速的一种调速方法。PWM调速分为单极性和双极性两种。在单极性方式下,电机的转动方向不变,改变的只是转速;而在双极性方式下,电机的转动方向和转速都是可变的。本实验是单极性控制,其基本原理如下:
②电机测速部分电路说明
光电开关产生与电机转速有一定关系的脉冲后,通过LED显示出此时的频率(由于本次试验仅是对频率的调控,所以之后不再区分转速与频率),信号经F/V转换,转换成电压信号,而单片机只能处理数字信号,所以还要通过A/D转换,模拟信号输入到ADC0809模块中,再由ADC0809模块输入到51单片机中,测速部分完毕。
0x77,0x7C,0x39,0x5E,0x7B,0x71,0x00,0x40};//A,B,C,D,E,F, ,-,
void delay1ms(void)
{
uchar a,b;
forBaidu Nhomakorabeab=199;b>0;b--)
for(a=1;a>0;a--);
}
void shortdelay(int length)
假设一个脉冲周期内,高电平电压为Us,持续时间为t1;低电平为0V,持续时间为t2.则脉冲周期T=t1+t2,该周期内平均电压U0=t1*Us/T。令α=t1/T,则U0=α* Us,α表示占空比。当高电平电压不变的情况下,电机两端电压的平均值U0取决于占空比α的大小。改变α的值就可以改变端电压的平均值,从而达到调速的目的,这就是PWM调速原理。