基于PWM的电机调速系统

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

基于PWM的电机调速系统

实验目的:

1.学会并掌握可keil软件的使用;

2.学会并掌握protues软件的使用;

3.通过实验巩固单片机相关知识和检验自身动手能力

实验要求:

掌握单片机相关知识,利用调PWM占空比的方式来控制直流电机的转速,并且在led数码管上显示转速。

实验设备和仪器:

1.89c51单片机最小系统

2.直流电机

3.示波器

实验内容:

本次实验设计是由小组五个成员共同完成基于PWM的电机调速系统并完成实物搭建和撰写实验报告。本次实验小组共提供了两个方案,方案一和方案二,两个方案各自具有优缺点,详细内容会在下面给出。

方案一实验步骤:

1.利用protues画电路图,电路图如图1所示:

图1:方案一电路图

2.根据电路图编写C语言代码:

代码如下:

#include

sbit PWM=P2^7;

sbit CS3=P2^3;

sbit CS2=P2^2;

sbit CS1=P2^1;

sbit CS0=P2^0;

sbit key1=P1^0;

sbit key2=P1^1;

sbit key3=P1^2;

sbit key4=P1^3;

unsigned char timer1;

unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

void Time1Config();

void main(void)

{

Time1Config();

while(1)

{

if(timer1>100) //PWM周期为100*0.5ms

{

timer1=0;

}

if(~key1)

{

if(timer1 <30) //改变30这个值可以改变直流电机的速度

{

PWM=1;

}

else

{

PWM=0;

}

CS0=0;CS1=0;CS2=1;CS3=0;

P0=tab[3];

P0=0xff;

CS0=0;CS1=0;CS2=0;CS3=1;

P0=tab[0];

P0=0xff;

}

else if(~key2)

{if(timer1 <50)

{

PWM=1;

else

{

PWM=0;

}

CS0=0;CS1=0;CS2=1;CS3=0; P0=tab[5];

P0=0xff;

CS0=0;CS1=0;CS2=0;CS3=1; P0=tab[0];

P0=0xff;

}

else if(~key3)

{if(timer1 <80)

{

PWM=1;

}

else

{

PWM=0;

}

CS0=0;CS1=0;CS2=1;CS3=0; P0=tab[8];

P0=0xff;

CS0=0;CS1=0;CS2=0;CS3=1; P0=tab[0];

P0=0xff;

}

else if(~key4)

{if(timer1 <100)

{

PWM=1;

}

else

{

PWM=0;

}

CS0=0;CS1=1;CS2=0;CS3=0; P0=tab[1];

CS0=0;CS1=0;CS2=1;CS3=0;

P0=tab[0];

P0=0xff;

CS0=0;CS1=0;CS2=0;CS3=1;

P0=tab[0];

P0=0xff;

}

}

}

void Time1Config()

{

TMOD|= 0x10; //设置定时计数器工作方式1为定时器

//--定时器赋初始值,12MHZ下定时0.5ms--//

TH1 = 0xFE;

TL1 = 0x0C;

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

EA = 1;

TR1 = 1; //开启定时器

}

void Time1(void) interrupt 3 //3 为定时器1的中断号{

TH1 = 0xFE; //重新赋初值

TL1 = 0x0C;

timer1++;

}

3.实验仿真,部分仿真结果如图2图3所示:

图2:仿真结果图(1)

图3:仿真结果图(2)

4.实物验证结果如图4所示:

图4:方案一实物验证结果

实物验证可以明显感觉到电机转速的变化,由于每个开发板不同,相比仿真程序,对实物验证程序进行了略微的修改,最终能达到要求。

方案二实验步骤:

1.利用protues画电路图,电路图如图5所示:

图5:方案二protues电路图

2.编写C语言程序代码:

代码如下:

#include

#define uchar unsigned char

#define uint unsigned int

sbit key1=P3^1;

sbit CLOCK=P2^4;

sbit ST=P2^5;

sbit EOC=P2^6;

sbit OE=P2^7;

sbit PWM=P3^7;

uint temp,temp1;

sbit CS3=P2^3;

sbit CS2=P2^2;

sbit CS1=P2^1;

sbit CS0=P2^0;

uchar tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; uchar start;

void delayms(uint ms)

{

uchar j;

while(ms--)

相关文档
最新文档