视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
基于51单片机的直流电机控制系统
2025-09-28 02:16:21 责编:小OO
文档
郑州轻工业学院

课程设计说明书

题目:基于51单片机的直流电机控制系统设计 

姓    名:                        

院 (系):    电气信息工程学院       

专业班级:    电子信息工程专业      

学    号:                         

指导教师:                         

成    绩:                   

             

时间:  2011 年 12 月 12 日至   2011 年 12 月 26 日

郑州轻工业学院

课 程 设 计 任 务 书

题目    基于51单片机的直流电机控制系统设计                      

专业、班级 电子信息工程08级1班 学号       姓名                      

主要内容、基本要求、主要参考资料等:

主要内容:

控制系统主要是以8051单片机为核心组成的控制系统, 本系统中的电机转速与电机两端的电压成比例, 而电机两端的电压与控制波形的占空比成正比, 因此, 由MCU内部的可编程计数器阵列输出PWM波, 以调整电机两端电压与控制波形的占空比, 从而实现调速。

基本要求:

1、掌握汇编编程的原理和方法。 

2、熟悉单片机基本特征和电路设计的方法。

3、掌握直流电机的控制方法。

4、熟练运用定时器设计PWM波控制直流电机。

5、形成一篇设计文档。

主要参考资料:

[1] 孙涵芳 徐爱卿.MCS-51/96系列单片机原理及应用[M].北京:北京航空航天大学出版社,1977..

[2] 何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,2003..

[3] 史国生.交直流调速系统[M].北京:化学工业出版社,2002.161-174.

完  成  期  限:  2011.12.12-2011.12.26   

指导教师签名:               

课程负责人签名:                   

2011年 12月 11日

摘要

本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。控制系统主要是以8051单片机为核心组成的控制系统, 本系统中的电机转速与电机两端的电压成比例, 而电机两端的电压与控制波形的占空比成正比, 因此, 由MCU内部的可编程计数器阵列输出PWM波, 以调整电机两端电压与控制波形的占空比,从而实现调速。

关键词:8051单片机   PWM信号    直流电机

 

第一章:设计任务

任务: 单片机为控制核心的直流电机PWM调速控制系统设计的主要内容以及技术参数:

功能主要包括:

1)直流电机的正转;

2)直流电机的反转;

3)直流电机的加速;

4)直流电机的减速;

5)直流电机的转速在数码管上显示;

6)直流电机的启动;

7)直流电机的停止;

第二章:总体设计方案

总体设计方案的硬件部分详细框图如图一所示。

键盘向单片机输入相应控制指令,由单片机通过P1.0与P1.1其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过ULN2003芯片控制电路,实现电动机转向与转速的控制。电动机的运转状态通过数码管显示出来。电动机所处速度级以速度档级数显示。正转时最高位显示“三” ,其它三位为电机转速;反转时最高位显示“F”,其它三位为电机转速。每次电动机启动后开始显示,停止时数码管显示出“0000”。 

第三章 系统硬件电路设计

整体框图如下

第四章 系统的软件设计

     本系统编程部分工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各部分功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制和数码管显示等部分的设计。

单片机资源分配如下表:

P0显示模块接口键盘中断
P1键盘模块接口
P1.0/P1.1PWM电机驱动接口

系统时钟
①PWM脉宽控制:本设计中采用软件延时方式对脉冲宽度进行控制,延时程序函数如下:

/*****************延时函数*************************/

delays()

{

    uchar i;

for(i=5000;i>0;i--);

}

②键盘中断处理子程序:采用中断方式,按下键,完成延时去抖动、键码识别、按键功能执行。

要实现按住加/减速键不放时恒加或恒减速直到放开停止,就需在判断是否松开该按键时,每进行一次增加/减少一定的占空比。

③显示子程序:利用数组方式定义显示缓存区,缓存区有8位,分别存放各个数码管要显示的值。

④定时中断处理程序:采用定时方式1,因为单片机使用12M晶振,可产生最高约为65.5ms的延时。对定时器置初值B1E0H可定时20ms,即系统时钟精度可达0.02s。当20ms定时时间到,定时器溢出则响应该定时中断处理程序,完成对定时器的再次赋值,并对全局变量time加1,这样,通过变量time可计算出系统的运行时间。

3、软件设计中的特点:

对于电机的启停,在PWM控制上使用渐变的脉宽调整,即开启后由停止匀加速到默认速度,停止则由于当前速度逐渐降至零。这样有利于保护电机。键盘处理上采用中断方式,不必使程序对键盘反复扫描,提高了程序的效率。

第五章:程序

见附件1

第六章:PCB图

见附件2

第七章:元件清单

见附件3  

第八章:参考文献

[1] 孙涵芳 徐爱卿.MCS-51/96系列单片机原理及应用[M].北京:北京航空航天大学出版社,1977..

[2] 何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,2003..

[3] 史国生.交直流调速系统[M].北京:化学工业出版社,2002.161-174.

第九章:心得体会

本次课程设计虽然只有两周,但短短两周我掌握了汇编编程的原理和方法。熟悉了单片机基本特征和电路设计的方法。掌握了直流电机的控制方法。熟练了运用定时器设计PWM波控制直流电机。总之,收获很多。

附件1

/************头文件*********/

#include

#include

#include

/************************** /

          

/********自定义变量********/

#define uint unsigned int      //自定义变量

#define uchar unsigned char    

char gw,sw,bw,qw;

uchar j;  //定时次数,每次20ms

uchar f=5; //计数的次数

sbit  P10=P1^0;    //PWM输出波形1

sbit  P11=P1^1;    //PWM输出波形2

sbit  P12=P1^2;       //正反转

sbit  P13=P1^3;       //加速

sbit  P14=P1^4;      //减速

sbit  P15=P1^5;      //停止

sbit  P16=P1^6;   //启动

uchar k;

uchar t;   //脉冲加减

/**************************/*

/*********控制位定义********************/

uchar code smg[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x73,0x71};//程序存储区定义字型码表

char data led[4]={0x08,0x04,0x02,0x01};      //位码

uint x;         //数码管显示的数值

display();   //数码管显示       

delays();    //延时函数

key();

displays();

/*****************************************/

/***************主函数********************/

main (void)

{     

    TMOD=0x51;       //T0方式1  定时计数    T1方式1计数

    TH0=0xb1;       //装入初值      20MS

    TL0=0xe0;

    TH1=0x00;    //   计数567

    TL1=0x00;

    TR0=1;       //启动  t0

    TR1=1;       //启动t1

    gw=sw=bw=qw=0; //数码管初始化

    P0=0xc0;

    P2=1;

    while(1)        //无限循环

     {

        display(); //数码管显示    

         key();

       

     }

}

/*****************************************/

/***************数码管显示****************/

display()

{

    uchar i;                                                                            

    gw=x%10;          //求速度个位值,送到个位显示缓冲区

    sw=(x/10)%10;     //求速度十位值,送到十位显示缓冲区

    bw=(x/100)%10;   //求速度百位值,送到百位显示缓冲区

    qw=x/1000;        //求速度千位值,送到千位显示缓冲区

    for(i=0;i<4;)

    {

        P2=led[i];

        if(i==0)                  //显示个位

        {

            P0=smg[gw];

        delays();

        }

            else if(i==1)     //显示十位

            {

            P0=smg[sw];

        delays();

            }

                else if(i==2)  //显示百位

                {

                P0=smg[bw];

                delays();

                }

               else if(i==3)       //显示千位

              {

                if(k==0)            //正转时显示"三"

                {

                 P0=0x49;

                 delays();

                }

                else

                {

                 P0=0x71;         //反转时显示"F"    

                 }

                 }                 

        i++;

    }

}

/*******************************************************/

/*****************延时函数*************************/

delays()

{

    uchar i;

for(i=5000;i>0;i--);

}

/************************************************/

/*********t0定时*中断函数*************/

void t0() interrupt 1 using 2

{

    TH0=0xb1;  //重装t0

    TL0=0xe0;

    f--;

    if(k==0)

    {

if(f      P10=1;

      else  

      P10=0;    

      P11=0;

     }

    else  

    {

        if(f        P11=1;

        else 

        P11=0;

        P10=0;

    }

    if(f==0)

        {

        f=5;

        }  

     j++;

     if(j==50)

     {

    j=0;

    x=TH1*256+TL1;     //t1方式1计数,读入计数值

    TH1=0x00;

    TL1=0x00;

     x++;

    display();

    }

}

/****************按键扫描**************/

key()

{

if(P12==0)            //如果按下,

    {

     while(!P12)    //去抖动

     display(); 

     k=~k;

    }      

    if(P16==0)     //启动

    {

    while(P16==0);

    IE=0x8a;

    }       

if(P13==0)         //加速

    {

    while (P13==0);

    t++;

    }

        if(t>=5)

        t=5;

            if(P14==0)  //减速

            {

            while(P14==0);

            t--;

            }

            if(t<1)

            t=1;

if(P15==0)             //停止

    {

    while(P15==0);

    EA=0;

    P10=0;

    P11=0;

    }     

}    

/******************************************************/

附件2:

附件3:

元件数量(个)元件数量(个)
直流电机1极性电容20uf 

 1
按键6 电容22pf

At51

112MHZ晶振 

1
RP1 四位一体数码管1
Led2电阻1k 

电阻200K

1ULN2003
电阻10K

6电源口HDR2x3 

74LS041下载口IDC

1
课程设计成绩评定表

评定项目内          容

满分评分总分
学习态度学习认真,态度端正,遵守纪律。10
答疑和设计情况认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。40
说明书质量设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。40
回答问题情况回答问题准确,基本概念清楚,有理有据,有一定深度。10
总成绩采用五级分制:优、良、中、及格、不及格
指导教师评语:

                                

                                

  

签名:

                                               年   月   日

下载本文
显示全文
专题