课程设计说明书
题目:基于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.1 | 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 else P10=0; P11=0; } else { if(f 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 2 At51 1 12MHZ晶振 1 RP1 1 四位一体数码管 1 Led 2 电阻1k 1 电阻200K 1 ULN2003 1 电阻10K 6 电源口HDR2x3 1 74LS04 1 下载口IDC 1 评定项目 内 容 满分 评分 总分 学习态度 学习认真,态度端正,遵守纪律。 10 答疑和设计情况 认真查阅资料,勤学好问,提出的问题有一定的深度,分析解决问题的能力较强。 40 说明书质量 设计方案正确、表达清楚;设计思路、实验(论证)方法科学合理;达到课程设计任务书规定的要求;图、表、文字表达准确规范,上交及时。 40 回答问题情况 回答问题准确,基本概念清楚,有理有据,有一定深度。 10 总成绩 采用五级分制:优、良、中、及格、不及格 指导教师评语: