直流电机PWM调速系统的设计与仿真.docx

上传人:b****7 文档编号:9800327 上传时间:2023-02-06 格式:DOCX 页数:14 大小:79.12KB
下载 相关 举报
直流电机PWM调速系统的设计与仿真.docx_第1页
第1页 / 共14页
直流电机PWM调速系统的设计与仿真.docx_第2页
第2页 / 共14页
直流电机PWM调速系统的设计与仿真.docx_第3页
第3页 / 共14页
直流电机PWM调速系统的设计与仿真.docx_第4页
第4页 / 共14页
直流电机PWM调速系统的设计与仿真.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

直流电机PWM调速系统的设计与仿真.docx

《直流电机PWM调速系统的设计与仿真.docx》由会员分享,可在线阅读,更多相关《直流电机PWM调速系统的设计与仿真.docx(14页珍藏版)》请在冰豆网上搜索。

直流电机PWM调速系统的设计与仿真.docx

直流电机PWM调速系统的设计与仿真

直流电机PWM调速系统的设计与仿真

、引言

1本课题设计的目的和要求

1.直流电机PWM调速系统的目的:

(1)熟悉直流电机PWM调速系统的整体运行过程和总体布局

(2)掌握该硬件电路的设计方法

(3)掌握电机PWM调速系统程序的设计和调试

2.直流电机PWM调速系统的要求

(1)可输入0~1范围的占空比,占空比可用电位器输入、拨码开关输入或键盘输入。

(2)设计电机驱动电路,根据输入的占空比控制电机转速。

(3)检测电机转速,并用LED或LCD显示。

(4)在PROTUE下S仿真。

二、系统总体框图与原理说明

总体方案原理及设计框图

本设计是基于AT89c51为核心的直流调速器,由单片机控制和产生适合要求的PWM信号,该PWM信号通过驱动芯片电路进行直流调速,使输出电压平均值和功率可以按照PWM信号的占空比而变化,从而达到对直流电机调速的目的。

拨码开关输入0~1范

围的占空比,用LCD1602作为主液晶显示器,显示输入的占空比控制电机转速,能够实现较好的人机交互。

拨码开关输入模块

总体方案设计框图

三、硬件电路图

用压控振荡器(可用555电路构成)来模拟直流电机的运行

PWM产生方式

(1)PWM(脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。

PWM可以应用在很多方面,比如:

电机调速、温度控制、压力控制等等。

在PWM驱动控制的调整系统中,按一个固定的频率来接通和断开的电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。

通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。

正因为如此,PWM又被称为“开关驱动装置”。

PWM波形如图所示:

PWM波形图

设电机始终接通电路时,电机转速最大为Vmax,设占空比为:

Dt1

T

则电机的平均转速为

VaVmax*D

其中Va指的是电机的平均速度,

Vmax是指电机在全通电时最大速度,D指的是占空比。

max

由上面的公式可见,当改变占空比D时,就可以得到不同电机平均速度Va,从而达到调速的目的。

(2)单片机片内软件生成PWM信号PWM信号采用单片机定时中断的方式软件模拟产生,这样实现比较容易,可以节约硬件成本。

 

VSSVDDVEErsrweDom皿D3M仍D6D7

-

k,X

f

V

21inco

厂Ou」

厂h/lol6厂

 

c

0

a

2

3

4

5

6

\

\

\

I

\

\

\

a

7

0)

5

4

co

-I

O-TW«8人-uw«x-

LM26L

八TEXTV

pun—pre—nL:

99ZnaLgl5pmmcu25FsDE"

sDEss01234567VVVRREDDDDDDDD

 

开始

 

s-

OFFON

!

=■■

1

J

Q

M=1l=M

z

3

J

■■=1

5

L

~6~

7

"s-

DIPSW8

DSW1

LGDt

PULPrecent!

472

Hotor.Speeds257

UJUJ>

oo>

wziSr

Or

00QDGOOQ

1

»4

»l却

16«

OFFON

I=^

^■=1

1=^

■1

15"

■2

14■

■3

13-

■4

12"

^■=1

^■=1

^■=1

^■=1

■5

11■

■6

10-

■7

9"

■8

DIPSW8

••••-w

 

周美娟

清华大学出版社

统设计

2.微型计算机控制技术实用教程潘新民王燕芳电子工业出版社

附录

 

#include<>

#include<>

#include<>

#include<>

#include<>

//==========================

#defineucharunsignedchar#defineuintunsignedint//==========================

#defineData_BusP1

sbitPWM=P3^0;

bitPWM_flag=0;

unsignedcharTime_flag=0;

unsignedcharDSW_data=0x00;

unsignedcharPWM_data=0;

unsignedintSpeed_data=0;

unsignedcharPWM_Precent[5]={0x30,0x30,'%'};

unsignedcharMotorSpeed[5]={0x30,0x30,0x30};

//

//函数声明

voiddelay(uint);

voiddelay_ms(unsignedintii);//1ms延时函数

voidget_PWM(void);

voidget_Speed(void);

//====================延时子函数=========================voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)for(y=110;y>0;y--);

}

voiddelay_ms(unsignedintii)//1ms延时函数

{

unsignedinti,x;

for(x=0;x

{

for(i=0;i<200;i++);

//===================外部中断0初始化程序===============voidInit_int0(void)

{

EX0=1;//开外部中断0

IT0=1;//触发

EA=1;}

//==================外部中断0服务程序===================voidInt0_server(void)interrupt0

{

EA=0;

Speed_data++;

EA=1;}

//===================定时器0初始化设置===================voidTime0_Init()//定时器0初始化函数

{

TMOD=0x01;//定时器0为工作方式1TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//初始化为定时时间为50msET0=1;//开定时器0中断

TR0=1;//开定时器

EA=1;//开总开关}

//==================定时器0中断服务程序===============voidTime0_Int()interrupt1//定时器0中断子函数

{

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;//初始化为定时时间为50msTime_flag++;

if(Time_flag==20)

{

Time_flag=0;get_Speed();

}

//====================定时器1初始化设置==============计=算方波数voidinit_timer1(void)

{

TMOD|=0x10;//定时器1为工作方式116bit

TH1=0xFF;

TL1=0xFE;

ET1=1;//开定时器1中断

TR1=1;//开定时器

EA=1;//开总开关

}

//==================定时器1中断服务程序===============voidtimer1_server(void)interrupt3

{

if(PWM_flag)

{

TH1=(65536-PWM_data*200)/256;

TL1=(65536-PWM_data*200)%256;

PWM=1;

PWM_flag=~PWM_flag;

}

else

{

TH1=(45536+PWM_data*200)/256;

TL1=(45536+PWM_data*200)%256;//初始化为定时时间为20msPWM=0;

PWM_flag=~PWM_flag;

}

}

//==================get_PWM============================voidget_PWM(void)

{

DSW_data=Data_Bus;

if(DSW_data==0x00)

{

TR1=0;

PWM=0;

PWM_Precent[0]=0x30;

PWM_Precent[1]=0x30;

}

else

{

PWM_data=DSW_data*100/256;PWM_Precent[0]=PWM_data/10+0x30;

PWM_Precent[1]=PWM_data%10+0x30;

TR1=1;

}

}

//==================get_Speed============================voidget_Speed(void)

{

MotorSpeed[0]=Speed_data/100+0x30;MotorSpeed[1]=Speed_data/10%10+0x30;

MotorSpeed[2]=Speed_data%10+0x30;

Speed_data=0;

}

//主函数

voidmain()

{

PWM=0;

get_PWM();

Init_int0();

Time0_Init();

init_timer1();

LCD_init();//LCD1602初始化

LCD_write_command(0x01);//LCD清屏

delay_ms(10);

DisplayChar(0,1,"PWM_Precent:

");

DisplayChar(13,1,PWM_Precent);

DisplayChar(0,0,"Motor_Speed:

");

DisplayChar(13,0,MotorSpeed);

while

(1)

{

get_PWM();

DisplayChar(13,1,PWM_Precent);

DisplayChar(13,0,MotorSpeed);

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1