分享
2023年基于51单片机的直流电机控制系统.doc
下载文档

ID:857765

大小:113KB

页数:17页

格式:DOC

时间:2023-04-15

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023 基于 51 单片机 直流电机 控制系统
郑州轻工业学院 课程设计说明书 题目:基于51单片机的直流电机控制系统设计 姓 名: 院 〔系〕: 电气信息工程学院 专业班级: 电子信息工程专业 学 号: 指导教师: 成 绩: 时间: 2023 年 12 月 12 日至 2023 年 12 月 26 日 郑州轻工业学院 题目 基于51单片机的直流电机控制系统设计 专业、班级 电子信息工程08级1班 学号 姓名 主要内容、根本要求、主要参考资料等: 主要内容:控制系统主要是以8051单片机为核心组成的控制系统, 本系统中的电机转速与电机两端的电压成比例, 而电机两端的电压与控制波形的占空比成正比, 因此, 由MCU内部的可编程计数器阵列输出PWM波, 以调整电机两端电压与控制波形的占空比, 从而实现调速。 根本要求: 1、掌握汇编编程的原理和方法。 2、熟悉单片机根本特征和电路设计的方法。 3、掌握直流电机的控制方法。 4、熟练运用定时器设计PWM波控制直流电机。 5、形成一篇设计文档。 主要参考资料: [1] 孙涵芳 徐爱卿.MCS-51/96系列单片机原理及应用[M].北京:北京航空航天大学出版社,1977.. [2] 何立民.单片机应用技术选编[M].北京:北京航空航天大学出版社,2023.. [3] 史国生.交直流调速系统[M].北京:化学工业出版社,2023.161-174. 完 成 期 限: 2023.12.12-2023.12.26 指导教师签名: 课程负责人签名: 2011年 12月 11日 本文主要研究了利用MCS-51系列单片机控制PWM信号从而实现对直流电机转速进行控制的方法。控制系统主要是以8051单片机为核心组成的控制系统, 本系统中的电机转速与电机两端的电压成比例, 而电机两端的电压与控制波形的占空比成正比, 因此, 由MCU内部的可编程计数器阵列输出PWM波, 以调整电机两端电压与控制波形的占空比,从而实现调速。 关键词:8051单片机 PWM信号 直流电机 目录 第一章:设计任务 5 第二章:总体设计方案 5 第三章 系统硬件电路设计 6 第四章 系统的软件设计 7 第五章:程序 8 第六章:PCB图 8 第七章:元件清单 8 第八章:参考文献 8 第九章:心得体会 8 第一章:设计任务 任务: 单片机为控制核心的直流电机PWM调速控制系统设计的主要内容以及技术参数: 功能主要包括: 1) 直流电机的正转; 2) 直流电机的反转; 3) 直流电机的加速; 4) 直流电机的减速; 5) 直流电机的转速在数码管上显示; 6) 直流电机的启动; 7) 直流电机的停止; 第二章:总体设计方案 总体设计方案的硬件局部详细框图如图一所示。 数码管显示 按键控制 8051单片机 PWM电机驱动 键盘向单片机输入相应控制指令,由单片机通过P1.0与P1.1其中一口输出与转速相应的PWM脉冲,另一口输出低电平,经过ULN2023芯片控制电路,实现电动机转向与转速的控制。电动机的运转状态通过数码管显示出来。电动机所处速度级以速度档级数显示。正转时最高位显示“三〞 ,其它三位为电机转速;反转时最高位显示“F〞,其它三位为电机转速。每次电动机启动后开始显示,停止时数码管显示出“0000〞。 第三章 系统硬件电路设计 整体框图如下 第四章 系统的软件设计 本系统编程局部工作采用KELI-C51语言完成,采用模块化的设计方法,与各子程序做为实现各局部功能和过程的入口,完成键盘输入、按键识别和功能、PWM脉宽控制和数码管显示等局部的设计。 单片机资源分配如下表: P0 显示模块接口 键盘中断 P1 键盘模块接口 P1.0/P1.1 PWM电机驱动接口 系统时钟 ①PWM脉宽控制:本设计中采用软件延时方式对脉冲宽度进行控制,延时程序函数如下: /xxxxxxxxxxxxxxxxx延时函数xxxxxxxxxxxxxxxxxxxxxxxxx/ 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].北京:北京航空航天大学出版社,2023.. [3] 史国生.交直流调速系统[M].北京:化学工业出版社,2023.161-174. 第九章:心得体会 本次课程设计虽然只有两周,但短短两周我掌握了汇编编程的原理和方法。熟悉了单片机根本特征和电路设计的方法。掌握了直流电机的控制方法。熟练了运用定时器设计PWM波控制直流电机。总之,收获很多。 附件1 /xxxxxxxxxxxx头文件xxxxxxxxx/ #include<reg51.h> #include<absacc.h> #include <intrins.h> /xxxxxxxxxxxxxxxxxxxxxxxxxx / /xxxxxxxx自定义变量xxxxxxxx/ #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; //脉冲加减 /xxxxxxxxxxxxxxxxxxxxxxxxxx/x /xxxxxxxxx控制位定义xxxxxxxxxxxxxxxxxxxx/ 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(); /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ /xxxxxxxxxxxxxxx主函数xxxxxxxxxxxxxxxxxxxx/ 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(); } } /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ /xxxxxxxxxxxxxxx数码管显示xxxxxxxxxxxxxxxx/ 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++; } } /xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ /xxxxxxxxxxxxxxxxx延时函数xxxxxxxxxxxxxxxxxxxxxxxxx/ delays() { uchar i;

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开