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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

一、引言

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

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

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

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

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

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

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

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

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

(4)在PROTUES下仿真。

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

总体方案原理及设计框图

本设计是基于AT89c51为核心的直流调速器,由单片机控制和产生适合要求的PWM信号,该PWM信号通过驱动芯片电路进行直流调速,使输出电压平均值和功率可以按照PWM信号的占空比而变化,从而达到对直流电机调速的目的。拨码开关输入0~1范围的占空比,用LCD1602作为主液晶显示器,显示输入的占空比控制电机转速,能够实现较好的人机交互。

总体方案设计框图

三、硬件电路图

拨码开关输入模块 AT89c51单片机

LCD1602显示电机驱动模块

直流电机

示波器显示

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

运行

PWM 产生方式 (1)PWM (脉冲宽度调制)是通过控制固定电压的直流电源开关频率,改变负载两端的电压,从而达到控制要求的一种电压调整方法。PWM 可以应用在很多方面,比如:电机调速、温度控制、压力控制等等。

在PWM 驱动控制的调整系统中,按一个固定的频率来接通和断开的电源,并且根据需要改变一个周期内“接通”和“断开”时间的长短。通过改变直流电机电枢上电压的“占空比”来达到改变平均电压大小的目的,从而来控制电动机的转速。正因为如此,PWM 又被称为“开关驱动装置”。PWM 波形如图所示:

PWM 波形图

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

T t D 1

=

则电机的平均转速为

D V V a *max =

其中V a 指的是电机的平均速度,V max 是指电机在全通电时最大速度,D 指的是占空比。

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

速的目的。

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

开始

LCD1602、定时器t1和t0初始化

拨码开关设置PWM 值

主函数把数据送到LCD1602,显示转速,并

调节电机的转速

等待

重新设置

PWM 值

Y

N

片机技术及系统设计周美娟清华大学出版社

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

附录

#include<>

#include<>

#include<>

#include<>

#include<>

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

#define uchar unsigned char

#define uint unsigned int

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

#define Data_Bus P1

sbit PWM=P3^0;

bit PWM_flag=0;

unsigned char Time_flag=0;

unsigned char DSW_data=0x00;

unsigned char PWM_data=0;

unsigned int Speed_data=0;

unsigned char PWM_Precent[5]={0x30,0x30,'%'};

unsigned char MotorSpeed[5]={0x30,0x30,0x30};

//--------------------------

//------- 函数声明 --------

void delay(uint);

void delay_ms(unsigned int ii);//1ms延时函数

void get_PWM(void);

void get_Speed(void);

//====================延时子函数========================= void delay(uint z)

{

uint x,y;

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

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

}

void delay_ms(unsigned int ii)//1ms延时函数

{

unsigned int i,x;

for (x=0;x

{

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

}

}

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

{

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

IT0=1;//触发

EA=1;

}

//==================外部中断0服务程序=================== void Int0_server(void) interrupt 0

{

EA=0;

Speed_data++;

EA=1;

}

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

{

TMOD=0x01; //定时器0为工作方式1

TH0=(65536-50000)/256;

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

ET0=1; //开定时器0中断

TR0=1; //开定时器

EA=1; //开总开关

}

//==================定时器0中断服务程序=============== void Time0_Int() interrupt 1 //定时器0中断子函数

{

TH0=(65536-50000)/256;

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

Time_flag++;

if(Time_flag==20)

{

Time_flag=0;

get_Speed();

}

相关文档
最新文档