当前位置:文档之家› 直流电机正反转控制

直流电机正反转控制

(课程设计说明书(2015/2016 学年第二学期)课程名称:单片机应用技术课程设计题目:直流电机正反转控制专业班级:电气工程及其自动化1321班学生姓名:学号: *********指导教师:等设计周数:两周设计成绩:2016年6月 24日目录一、课程设计目的-----------------------------------3二、课程设计任务及要求-----------------------------32.1 原始数据及主要任务------------------------------------------32.2 技术要求----------------------------------------------------3三、单片机简介-------------------------------------3四、软件设计---------------------------------------44.1 系统分析及应用种类-------------------------------------------44.2 系统设计-----------------------------------------------------5五、电路设计 --------------------------------------55.1 电机驱动电路设计---------------------------------------------55.2 显示电路设计-------------------------------------------------6 5.3 按键设计-----------------------------------------------------6 5.4 Proteus 仿真图-----------------------------------------------75.5 Protel 99se 原理图-------------------------------------------7六、程序设计---------------------------------------8七、操作控制--------------------------------------13八、心得体会--------------------------------------14九、参考文献--------------------------------------14一、课程设计目的通过长达两周的课程设计,加深对《单片机》课程所学理论知识的理解,运用所学理论知识解决实际问题。

结合课程设计的内容,学会利用Protel软件绘制电路原理图,掌握电路的设计与组装方法,进行软硬件联机调试。

学会查阅相关专业技术资料及设计手册,提高进行独立设计的能力并完成课程设计相关任务。

二、课程设计任务及要求2.1 原始数据及主要任务1.设计直流电机控制电路。

2.设计数码管显示电路。

3.设计开关电路。

4.分配地址,编写系统程序。

5.利用Protel设计硬件电路原理图和PCB图。

6.软硬件联机调试。

7.书写设计报告。

2.2 技术要求设计一个以MCS-51 单片机为核心,使用I/O 口控制三极管连接继电器驱动小型,直流电机,控制正反转。

用两个数码管分别显示两个正反转控制开关控制电机正反转的次数。

三、单片机简介AT89C51单片机,其内部带有4KB的ROM。

无需扩展外部程序存储器。

其中:VCC:供电电压。

GND:接地。

P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。

P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

P3口也可作为AT89C51的一些特殊功能口:P3.0 RXD(串行输入口);P3.1 TXD(串行输出口);P3.2 /INT0(外部中断0);P3.3 /INT1(外部中断1);P3.4 T0(记时器0外部输入);P3.5 T1(记时器1外部输入);P3.6 /WR(外部数据存储器写选通);P3.7 /RD(外部数据存储器读选通)。

RST:复位输入。

EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器,不管是否有内部程序存储器。

当/EA端保持高电平时,此间内部程序存储器。

XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。

XTAL2:来自反向振荡器的输出。

四、软件设计4.1 系统分析及应用种类:应用的软件有 Protel99se Proteus7.5 Keil uVision4.1 Protel99se的应用(1)在桌面上新建立文件夹重名名为直流电机正反转控制(2)打开Protel99se软件(3)运行Protel99se(4)点击File 文件New新建(5)注意保存形式为.DDB2 Proteus7.5的应用(1)打开Proteus7.5软件。

(2)在左上文件中新建设计。

(3)在界面的正上方的“库”中搜索要用的元件,然后拖入新建设计中。

(4)连线,连线有三种无模式连线,自动连线模式,动态光标显示。

(5)移动元件备注元件等。

3 Keil uVision4 的应用(1)打开 Keil uVision4 ,点击project,在新建 Keil project。

(2)首先要选择保存的途径,在新建文件名,最后保存文件。

(3)保存文件啊后会弹出窗口,选择要运行的文件,选好后点击OK会弹出“是”或“否”,只需按否。

(4)新建编写程序窗口。

(5)在新建编写程序窗口写程序。

(6)保存程序文件必须是.C。

(7)最后,将相关的程序放到Protuse软件中进行仿真。

4.2 系统设计:根据课程设计要求在各个软件中进行设计。

1.首先应用Protel99se进行原理图设计,(1)在Protel99se中先设计单片机画出80C51引脚图。

(2)在Protel99se中设计画出共阳极数码管的引脚图。

(3)然后再Protel99se设计原理图界面插入设计的单片机引脚元件和共阳极数码管引脚元件,按课程要求设计电路,其次进行链接元件。

2. 设计原理通过后,在Proteus7.5 进行设计图的修饰和绘制。

3. 在Proteus7.5 中绘制好原理图,然后在Keil uVision4中按要求编写设计程序。

4. 编写好程序在Keil uVision4中编译无误后将程序导入Proteus7.5的原理图中进行仿真。

五、电路设计1、电机驱动电路设计:驱动电路为三极管驱动的桥式电路。

2.显示电路设计采用LED共阴极数码管动态显示数据与个项参数,方法简单,容易控制,如图:3.按键设计该系统中只运用到三个控制按钮,即“正转”,“反转”,“停止”,由于按钮较少,所以采用独立键电路,这种按键电路的按键结构相对行列式按键电路更简单。

如图:4、Proteus 仿真图5. Protel 99se原理图六、程序设计#include <reg51.h>#include <intrins.h>#define INT8U unsigned char#define INT16U unsigned int#define S1_ON() (P3 & (1<<0)) == 0x00 //正转#define S2_ON() (P3 & (1<<2)) == 0x00 //停转#define S3_ON() (P3 & (1<<1)) == 0x00 //反转#define Forward 0#define Stop 1#define Backward 2#define u8 unsigned char#define s8 signed char#define u16 unsigned short#define s16 signed short#define u32 unsigned int#define s32 signed int#define fp32 float#define fp64 doublesbit w1= P1^2;sbit w2=P1^3;#define DIG_SEG P2 //段选u8 code u8DigTab[18] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x00,0x39,0x5e,0x79,0x71,0x40,0x00};//0、1、2、3、4、5、6、7、//8、9、A、B、C、D、E、F、//-u8 idata u8DigShow1;u8 idata u8DigShow2;u8 idata u8DigShow3;u8 idata u8DigShow4;u8 u8DigShowTemp = 0;void delay_ms(u16 cnt){u16 x;for( ; cnt>0; cnt--){for(x=110; x>0; x--);}}//----------------------------------------------------------------- // 延时函数//----------------------------------------------------------------- void delay_us(INT16U x) { for(; x>0; x--) _nop_(); }//----------------------------------------------------------------- // 主程序//-----------------------------------------------------------------/************************************************************** 函数名 : dis_dri* 函数功能 : 数码管扫描函数* 输入 : 无* 输出 : 无**************************************************************/ void dis_dri(void){static u8 u8DisStep = 1;DIG_SEG = 0x00;switch(u8DisStep){case 1: //显示第1位{u8DigShowTemp=u8DigTab[u8DigShow1];DIG_SEG = u8DigShowTemp;w1=0;w2=1;}break;case 2: //显示第2位{u8DigShowTemp=u8DigTab[u8DigShow2];DIG_SEG = u8DigShowTemp;w1=1;w2=0; }break;}u8DisStep++;if(u8DisStep>2) //扫描完8个数码管后,重新从第一个开始扫描{u8DisStep=1;}}void main(){TMOD |= 0x01;TH0 = 0xf8;TL0 = 0x2f;//(65535-63535)TR0 = 1;//ET0 = 1;//ES=1;EA = 1;u8DigShow1 =0;u8DigShow2 =0;u8DigShow3 =0;u8DigShow4 =0;while (1){int speed = 200;char str_flag;char cnt_a;char cnt_b;if(S2_ON()){P0 = ~(1<<Stop);M_DIR = 0;M_PWM = 0;str_flag = 0;continue;}if(S1_ON()){delay_ms(10);if (S1_ON()){while((P3 & (1<<0)) == 0x00);M_DIR = 0;P0 =~(1<<Forward);str_flag = 1;if (++cnt_a>10){cnt_a = 1;}u8DigShow1 = cnt_a%10;}}if (S3_ON()){delay_ms(10);if (S3_ON()){while((P3 & (1<<1)) == 0x00);if (++cnt_b>10){cnt_b = 1;}u8DigShow2 = cnt_b%10;}M_DIR = 1;P0 =~(1<<Forward);str_flag = 1;}if(Key_INC ==0)speed = speed<400?speed+1:400;if(Key_INC == 0) speed = speed>0?speed-1:0;if (str_flag == 1){M_PWM =1;delay_us(speed);M_PWM = 0;delay_us(400-speed);}}}void time0_interrupt() interrupt 1{dis_dri();TH0 = 0xf8;TL0 = 0x2f;//(65535-63535)TR0 = 1;}七、操作控制1、当按下正转按钮时,直流电机根据制定默认状态开始转动,直流电机正转,数码管计数正转次数(此时按下反转不影响正转且反转数码管不计数);2、当再次按下反转按钮时,直流电机反向转动,当按下反转按钮时,直流电机反转,数码管计数反转次数(此时按下正转不影响反转切正传数码管不计数);3、当数码管计数满以后,数字归零,4、按下停止按钮,电机停止转动。

相关主题