收藏 分销(赏)

大连理工大学基于单片机的直流电机调速系统设计mlm.doc

上传人:人****来 文档编号:2991866 上传时间:2024-06-12 格式:DOC 页数:14 大小:1.49MB 下载积分:8 金币
下载 相关 举报
大连理工大学基于单片机的直流电机调速系统设计mlm.doc_第1页
第1页 / 共14页
大连理工大学基于单片机的直流电机调速系统设计mlm.doc_第2页
第2页 / 共14页


点击查看更多>>
资源描述
大连理工大学本科实验报告 题目:基于AT89S52单片机直流电机设计 课程名称: 《电子工程训练》 学院(系): 电信学部 专 业: 通信工程 班 级: 电子1102班 学 号: 201181442 学生姓名: 陈柯锦 成 绩: 2014年 11月 12日 电子安装实验室安全守则 (请在下一页手抄一份安全守则) 1、 每次实验前,认真预习准备,仔细阅读实验安全守则,严格按照安全规范进行实验,确保实验安全; 2、 桌面要保持整洁,不允许有杂物,禁止将水杯、瓶装水放在桌面; 3、 电烙铁在使用前,必须检查电源线有无烫损漏线情况,一经发现,立即找老 师进行安全处理; 4、 电烙铁长时间不使用,应将电源线拔掉;电烙铁使用后,应放回烙铁架中,以免烫伤物品; 5、 实验结束后,必须拔掉电烙铁的电源线;已经加热的电烙铁,必须冷却后再放入抽屉中; 6、 焊锡中含铅,不要含在口中,实验结束后要洗手; 7、 稳压电源在使用前,应先调好要使用的电压,再进行线路连接,并确保连接的极性正确; 8、 抢救触电人员时,应首先切断电源或用绝缘物体挑开电源线,使触电者脱离电源,千万不要用手拖拉触电人员,以免连环触电; 9、 实验结束后,必须关闭桌面电源开关,将桌面收拾干净,工具物品整理好。 题目:基于AT89S52单片机直流电机设计 1 设计要求 a) 实现直流9V电源到5V输出的转换。 b) 设计单片机最小系统。 c)用单片机控制直流电机启动、加速、减速、正反转和停止。 d)利用数码管输出显示电机转动的档位和正反转标志。 2 设计分析及系统方案设计 1)方案设计: 首先对电压的转换可以使用整流桥和7805芯片来设计,直流电机只要能提供一定的直流就可以转动,改变电压极性可以改变转动方向,可以通过给直流电机提供脉冲信号来驱动它,利用PWM控制占空比从而达到改变电机速度,因此可以通过调整占空比从而能实现调速的目的。直流电机的驱动电路要有过流保护作用,可用二极管来实现,另外电机的驱动电流是比较大的所以需要用三极管来放大电流。程序可以通过对51单片机定时器重装初值进行改变,从而改变时间。数码管的显示采用四位一体数码,管利用四个选通端来控制不同位置的数码管输出显示,公用一组数据线。选用单片机四个引脚控制选通端,利用一个八位口来实现数据输出显示。 图2-1 总电路设计图 3 各功能模块硬件电路设计 1)电源电路 利用7805来实现电压的转换。在输入端由于输入直流电压存在极性不确定的情况,选用桥式整流避免输入电压的极性不同队之后电路的影响。7805两侧加入两个电容用于滤波,避免杂波对之后单片机系统的影响。当输出电压不足5V时,可在输入端并联一个大电容,利用其储能的作用抬升输入电压,从而使得7805输出达到5V。 图3-1 电源电路 2)H桥驱动电路 基于三极管的使用机理和特性,在驱动电机中采用H桥功率驱动电路,H桥功率驱动电路可应用于步进电机、交流电机及直流电机等的驱动.直流电机控制使用H桥驱动电路(下图所示),当P1^0输出1,P1^1输出0时,控制1输出的占空比可以实现电机的调速;P1^0输出0,P1^1输出1时,电机转动方向改变,利用输出1的引脚变化来实现电机的正反转。 图3-2 H桥的电机驱动电路 3)51最小系统 单片机CPU部分 采用STC89C52芯片,封装DIP-40。40个引脚,用40个排针引出,40脚接VCC,20脚接GND,P0,P1,P2,P3做I\O接口。9脚接RST(复位电路)。18,19脚接晶振,(这次实验用晶振为12M)。31脚接EA,使能单片机。 晶振部分 采用12M晶振,接电容30P(可以用更小点的电容,小点的电容理论上效果会好点),用于滤波。在焊接电路的时候,晶振部分加了一个晶振插座,这样,可以更换升级晶振,以便适应不同的系统。 复位电路部分 电复位和手动复位,电复位就是接一个10uF的电容,手动复位就是接一个开关,这个开关选用点触开关比较方便。开关按下之后RET引脚为高,单片机复位。 P2^0引脚接一个LED灯,用于调试最小系统是否正常工作。P0口由于不输出高电平,不用拉动外部负载,所以未接上拉电阻,直接与之后的四位一体数码管的数据线相连,输出低电平有效。 图3-3 51最小系统 4)LCD显示模块 四位数码管是一种半导体发光器件,其基本单元是发光二极管。能显示4个数码管叫四位数码管。数码管按段数分为七段数码管和八段数码管,八段数码管比七段数码管多一个发光二极管单元(多一个小数点显示);按发光二极管单元连接方式分为共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管。共阳数码管在应用时应将公共极COM接到+5V,当某一字段发光二极管的阴极为低电平时,相应字段就点亮。当某一字段的阴极为高电平时,相应字段就不亮。共阴数码管是指将所有发光二极管的阴极接到一起形成公共阴极(COM)的数码管。共阴数码管在应用时应将公共极COM接到地线GND上,当某一字段发光二极管的阳极为高电平时,相应字段就点亮。当某一字段的阳极为低电平时,相应字段就不亮。 图3-4-1四位一体共阳极数码管ARK SR41028 图3-4-2 LCD显示电路 4 系统软件设计 1)软件流程图 图4-1 程序流程图 2)程序代码 #define _1_C_ #include "reg51.h" #include "1.h" #include "absacc.h" #include "intrins.h" #define uchar unsigned char #define uint unsigned int /********变量定义**********/ uchar code smg[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xB8,0x8E};//定义共阳数码管表 char data led[4]={0xfd,0xfb,0xf7,0xef}; //数码管选择 char g; //个 uint x; //数码管显示的数值 uchar k; //正反转标志位 int t=0; //档位调节位 int m=0; //译码器选择位 bit stop=1; //终止标志 uchar f=9; //供电周期 sbit P30=P1^0; //正向供电 sbit P31=P1^1; //反向供电 sbit P10=P1^2; //正反转 sbit P11=P1^3; //加速 sbit P12=P1^4; //减速 sbit P13=P1^5; //停止 //sbit P14=P1^6; //启动 sbit P15=P1^7; //外部中断控制位 /*****************延时函数******************************/ void delay () { uchar i; for(i=4608;i>0;i--); } /*****************定时器0背景程序***********************/ void time0 () { if(k==0) { if(f<t) P30=1; else P30=0; P31=0; } else { if(f<t) P31=1; else P31=0; P30=0; } if(f==0) { f=9; } } /*****************数码管显示****************************/ void display () { uchar i,n; if(stop==0) { x=t; g=x%10; //求速度个位值,送到个位显示缓冲区 for(i=0;i<4;) { P2=led[i]; if(i==0) //显示个位 { P0=smg[g]; delay(); } else if(i==1) //显示十位 { P0=0xB7; delay(); } else if(i==2) //显示百位 { P0=0xC1; delay(); } else if(i==3) //显示千位 { if(k==0) //正转不显示 { P0=0xFF; delay(); } else { P0=0xBF; //反转时显示"-" delay(); } } P0=0xFF; //去重影 i++; } } else { for(n=0;n<4;) { P2=led[n]; if(n==0) { P0=0x8C; delay(); } else if(n==1) { P0=0xC0; delay(); } else if(n==2) { P0=0x87; delay(); } else if(n==3) { P0=0x92; delay(); } P0=0xFF; //去重影 n++; } } } /*****************按键扫描******************************/ void key () { if(P10==0) //如果按下 { while(!P10) //去抖动 display(); k=~k; } if(P13==0) //启动 { while(P13==0); IE |= 0x80; //EA置1 TH0=-(18433/256); //给定时器0装入初值 TL0=-(18433%256); TR0=1; //定时器0开始计数 EX0=1; //开外部中断0 stop=0; } if(P11==0) //加速 { while (P11==0); t++; } if(t>=9) t=9; if(P12==0) //减速 { while(P12==0); t--; } if(t<1) t=0; /*****************定时器0中断程序***********************/ void TIME0_ROUTING () interrupt 1 using 2 { TH0=-(18433/256); //定时器0初始化 TL0=-(18433%256); f--; P15=0; time0(); P15=1; } /*****************外部中断0初始化***********************/ void INIT_INT0 () { IT1 = 1; IT0 = 1; IP &= 0x00; //设定外部中断0优先级为低优先级 IE |= 0x01; //开外部中断0 } /*******************************************************/ /*****************定时器0初始化*************************/ void INIT_TIME0 () { TMOD &= 0x00; //工作模式清零 TMOD |= 0x01; //工作模式选方式1 IP &= 0xFD; //设定定时器0中断为低优先级 IE |= 0x02; //开定时器0中断 } /*****************中断初始化****************************/ void InitInterrupt () { INIT_INT0(); INIT_TIME0(); } /*****************主函数********************************/ void main () { IE=0x00; //关中断 InitInterrupt(); //中断初始化 g=0; //数码管初始化 P0=0xFF; P2=0xF1 x=0; k=0; while(1) { display (); key(); } 5 系统调试运行结果说明计分析 运用汇编语言进行程序编写,运用MedWin进行单片机仿真,运用Keil C51进行软件的仿真。通过硬件可实现9V转换为5V的接口,按下相应的键时,直流电机能实现启动、左传、右转、加速、减速等功能。 6 结论和体会 通过本次实验,我对电路的硬件设计和软件编程的结合有了一定的锻炼,在电路的焊接有了初步的认识和实践,尽管第一次焊的电路不够美观,设计不够合理,但是这也是一种新的体验和学习。在51单片机的编程上,由于以前是用汇编编程,所以用c编程显得比较不熟练,但是在老师的悉心指导下,也成功的完成了电路的编程。本次实验收获颇多,希望以后有更多的机会去尝试,锻炼自己的综合能力。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服