步进电机控制最小系统 带红外控制.docx

上传人:b****2 文档编号:20199744 上传时间:2023-04-25 格式:DOCX 页数:28 大小:795.85KB
下载 相关 举报
步进电机控制最小系统 带红外控制.docx_第1页
第1页 / 共28页
步进电机控制最小系统 带红外控制.docx_第2页
第2页 / 共28页
步进电机控制最小系统 带红外控制.docx_第3页
第3页 / 共28页
步进电机控制最小系统 带红外控制.docx_第4页
第4页 / 共28页
步进电机控制最小系统 带红外控制.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

步进电机控制最小系统 带红外控制.docx

《步进电机控制最小系统 带红外控制.docx》由会员分享,可在线阅读,更多相关《步进电机控制最小系统 带红外控制.docx(28页珍藏版)》请在冰豆网上搜索。

步进电机控制最小系统 带红外控制.docx

步进电机控制最小系统带红外控制

 

单片机课设报告

 

课题名称:

最小系统及PCB板开发设计

姓名:

学号:

班级:

电子科学与技术091班

指导教师:

马光喜谢本亮李良荣周骅

 

2012年7月

最小系统及PCB板开发设计

一、课程设计目的

1、加强实践,巩固课堂学到的理论知识,掌握单片机开发一个实际应用系统的实现技能。

2、锻炼提高将所学的专业知识应用在一个实际的单片机控制应用系统设计与实现的能力。

3.、熟悉单片机最小系统的基本工作原理,能利用单片机进行系统开发,为毕业设计做好铺垫。

4、掌握并完成基本PCB板的设计与制作工艺。

二、课程设计任务

1、单片机最小系统的构成设计2、单片机最小系统的开发板的软件使用3、单片机应用程序的编辑与汇编软件(Keil)的使用4、单片机应用系统软硬件设计与调试,ISP的使用5、proteus软件的使用学习与PCB板的设计

三、课程设计具体内容

1、学习理解开发板的构造和使用方法,熟悉开发板的各部分本功能和实现方法;

2、调试开发板的实验程序,掌握开发板的使用方法;

3、利用开发板完成步进电机的设计,掌握开发板的使用方法;4、用proteus完成最小系统的原理图设计,并进行仿真,并利用proteus完成PCB板的设计;

5、设计开发无线通信控制系统,要求能用红外脉冲控制实现设计的功能。

四、单片机最小系统的基本原理

4.1MCS-51基本结构

图1.1MCS-51基本结构

MCS-51单片机是一款非常经典的单片机,极具代表性,而且资料非常丰富。

4.2AT89S52基本结构

AT89S52引脚结构如图1.2所示,它是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。

在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。

具有以下标准功能:

8k字节Flash,512字节RAM,32位I/O口线,看门狗定时器,内置4KBEEPROM,MAX810复位电路,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口。

另外AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。

空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。

掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。

最高运作频率35Mhz,6T/12T可选。

和Atmel的对比AT89S52单片机具有8K字节程序存储空间;512字节数据存储空间;内带4K字节EEPROM存储空间以及可直接使用串口下载。

4.3最小系统硬件结构图

图1.3最小系统架构

如图1.3所示,系统所能实现的液晶显示,数码管显示,二极管发光,红外接收,蜂鸣器等电路都已焊接或联通,主芯片89C52与外部电路之间通过短接冒或跳线连接,将程序烧录后即可实现我们预先设定的功能,操作十分方便。

4.4键盘电路

当用跳线帽将JP7的2、3脚端接时,该电路形成一个完整的4x4矩阵键盘。

当用跳线帽将JP7的1、2脚短路时,K2、K6、K10、K14构成一个4位独立键盘。

4.5液晶显示电路

LCD1602本身带有内部字符发生存储器(CGROM),这里面存储了常用的标点符号、数字、大小写字母以及日文假名等,若要显示某个字符,查出对应的代码即可。

1602液晶有两行,每行可以显示16个字符(字母或数字),也就是说一共可以显示32个字符。

液晶显示屏是长方形的,我们把这个长方形的屏幕分成十六个小块,并给每一小块编一个号码,以便识别不同的小块。

在设计时,我们可以将设计者的信息和电机的工作状态在液晶屏上显示出来。

4.6电机电路及原理

步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件。

在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,称为“步距角”,它的旋转是以固定的角度一步一步运行的。

可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的;同时可以通过控制脉冲频率来控制电机转动的速度和加速度,从而达到调速的目的。

本系统板采用的是两相五线制步进电机,驱动电路比较简单,如下图:

图1.6五线步进电机

本设计使用两相五线步进电机,采用四相八拍工作方式(A→AC→C→CB→B→BD→D→DA→A)。

对应一个脉冲信号,电机转子转过的角位移用θ表示。

θ=360度(转子齿数J*运行拍数),以常规二、四相,转子齿为50齿电机为例。

四拍运行时步距角为θ=360度/(50*4)=1.8度(俗称整步),八拍运行时步距角为θ=360度/(50*8)=0.9度(俗称半步)。

这个步距角可以称之为‘电机固有步距角’,它不一定是电机实际工作时的真正步距角,真正的步距角和驱动器有关。

步进电机设计实现功能:

开关打开后电机即正向转动;方向控制:

方向控制键(K14)可改变电机转动方向。

反向转动时方向显示灯处于点亮状态,正向转动显示灯处于熄灭状态;速度控制:

加速控制键(K6)和减速控制键(K10)可控制电机转动速度。

电机每完成一个八拍转速指示灯闪烁一次。

当电机达到最大转速时警报响起;暂停控制:

转动过程中按下K2键暂停,再次按下电机按暂停前状态继续转动。

4.7红外控制电路及原理

红外遥控信号是一连串的二进制脉冲码。

为了使其在无线传输过程中免受其他红外信号的干扰,通常都是先将其调制在特定的载波频率上,然后再经红外发射二极管发射出去,而红外线接收装置则要滤除其他杂波,只接收该特定频率的信号并将其还原成二进制脉冲码,也就是解调.目前,对于这种进行了调制的红外遥控信号,通常是采用一体化红外线接收头进行调解.一体化红外线接收头将红外光电二极管,低噪音放大器,限幅器,带通滤波器,解调器,,以及整形驱动电路等集成在一起.一体化红外线接收头体积小,灵敏度高,外接元件少,抗干扰能力强,使用十分方便.有一体化红外接收头构成的电路十分简单,如下图:

图中C2为电源高频旁路电容。

红外遥控解码:

遥控器发射的信号由一串O和1的二进制代码组成.不同的芯片对0和1的编码有所不同。

通常有曼彻斯特编码和脉冲宽度编码。

TC9012-p.htm"target="_blank"title="TC9012货源和PDF资料">TC9012的O和1采用PWM方法编码,即脉冲宽度调制,其O码和1码如图1所示(以遥控接收输出的波形为例)。

O码由O.56ms低电平和0.56ms高电平组合而成.脉冲宽度为1.12ms.1码由0.56ms低电平和1.69ms高电平组合而成.脉冲宽度为2.25ms。

在编写解码程序时.通过判断脉冲的宽度,即可得到0或1。

即可根据程序的规定执行相应的功能。

5、电路的设计及实现

5.1电路总体设计与功能

根据老师提供的电机和器材,我们将其转速设为个五档,用四个独立键盘控制电机的开启、停止、加速、减速、正转和反转,在按键按下的同时,蜂鸣器发出“滴”的一声来提示有按键按下,同时在液晶显示器上显示设计人员和电机工作的状态,主要是液晶屏的第一行固定显示设计人员的名字和学号:

"ZhaoAndDX0009",第二行根据电机运动状态的不同显示电机的转向,转速等相关信息。

5.2具体功能实现

首先在KEIL中编写程序,编辑、编译并仿真无误后,根据程序中定义的端口连接电路,用跳线帽将JP7的1、2脚短路,K2、K6、K10、K14构成一个4位独立键盘,四个按键分别与与89C52的P1.0—P1.3连接,P1.4—P1.7用杜邦线连接至步进电机驱动电路芯片的输入端,用杜邦线将芯片输出端与电机接线口连接,输出口从上往下于电机引线的连接顺序依次是:

红、蓝、黄、绿,

黑白公共端;用短接冒将P3.5短接实现蜂鸣器电路的接通;P0.0—P1.7也分别用短接冒短接,这样液晶显示电路也就和89C52接通了,为了让程序顺利从电脑烧录到芯片中,要用短接冒分别将P3.0和P3.1短接,这样电路主要构架已基本连接完毕,其余的细节按照程序中定义联通即可。

电路整体效果如图1.8所示。

将LEIL中编译生成的n.hex文件用ISP烧录到芯片中,检查无误后,按程序中的定义调节按键,液晶显示屏输出结果如图1.9-1.11所示:

由图可知,有按键按下后,液晶屏均能正确显示电机的的开启、停止、加速、减速、正转和反转状态,同时电机实际运动状态与按键定义的功能和液晶屏显示的状态一致,有次验证了程序的可靠性,并且达到了设计的目标和要求。

5.3红外控制的实现

红外遥控信号是一连串的二进制脉冲码,在电路中经过解码后就变成了0或1的逻辑信号,在实验中在KEIL中编写程序,编辑、编译并仿真无误烧录到芯片中,逐个验证遥控器上各个按键的功能,最终我们得到了遥控器上四个与本系统上按键功能对应的四个按钮:

4—开启/停止,5—加速,"退出"—减速,"灰色按键"—改变转向。

得到四个功能按键后,其控制液晶屏显示和电机转动效果与按键控制的效果相同,值得一提的是,采用红外遥控后,芯片对信号的反应更加灵敏,大大提高了控制的精度。

5.4总结

经过构思,调试验证,成功实现了预期的目标,电机能够按照预期的设定运转,液晶显示屏能够实时动态显示电机的状态,红外遥控功能也是正常的,完成了本次设计的基本任务。

但是也有一些不尽人意的地方,比如按下按键改变电机转速的时候,电机会顿一下,这在实际工程中是不利于电机正常运转的,再者就是原本我们计划再按下按键的时候,指示灯会亮一下,结果也没有实现,这也是需要改进的地方,本次课设虽然结束了,但是遗留的问题,我仍然会在以后的学习中逐个解决,尽量把系统的功能作为完善,趋于完美,这才是一名优秀的电子工程师应该对自己的要求。

6、本次课设的感想

这次课程设计,经过自己的努力,完成了预期的任务,同时也发现了自己还有许多地方需要加强,因为对最小系统板的不熟悉,使得在刚开始的时候,几乎不知从何下手,后来经过查看老师给的资料,大家一起讨论,我们才对手上这块板子的结构有了一个基本的认识。

再者我们上课时学的微机原理和单片机技术都是汇编语言,使用汇编,虽然可以提高源程序的效率,但是由于我们基础不牢,对接口技术的掌握有限,最后决定用C语言来写程序,在写程序的过程中,我们参考了别人的一些成果,但是“纸上得来终觉浅”,由于对C语言掌握的不是很牢固,在调试的时候我们也是吃了大苦头,比如在用红外脉冲控制电机的设计中,当我们按下按钮改变电机的转速时,液晶屏上能够显示电机的运动状态发生了变化,然而实际上电机的运动状态并未改变,这个问题起初让我百思不得其解,程序的逻辑性没有错误啊,为什么就不能实现预期的功能呢?

带着这个疑问,我反复的查看程序,并且拿出C语言的书,最后终于发现,我在主程序中定义改变电机转速的变量的时候,忘了这个变量在主程序外已被定义成了全局变量,以致在调用程序时全局变量被局部变量屏蔽,主程序中的变量并未改变,电机的转速当然也不会变了,当删除主程序中的变量时,问题就得到了解决。

“纸上得来终觉浅,绝知此事要躬行”,尤其是对于我们搞电子设计的人来说,说得再好,仿真的再完美,只有做出实物,看到效果,才能说明你是对的。

因此在学习中,掌握理论知识固然是很重要的前提,同时我们也要多动手实践,这次看到电科班的很多同学都自费买了一个最小系统开发板,很是让我敬佩,学习本该如此,理论先行,再以动手实践检验和巩固自己所学,在此基础之上实现创新。

同时这次课设更加让我体会到团结合作的重要性,个人能力有限,不可能面面俱到,大家各自发挥自己的长处,相互合作,取长补短,才能把事情做好。

“悟以往之不谏,知来者之可追”,在以后的学习中我会珍惜利用这次课设得到的宝贵经验,争取早日成为一名优秀的电子工作者。

附录

附一最小系统原理图

附一最小系统原理图

附二最小系统版图

 

附三PCB原理图

附三PCB原理图

 

附四PCB版图全局图

附四PCB版图全局图

附五PCB版图底层

附五PCB版图底层

附六PCB三D视图

附六PCB三D视图

 

附七源程序

#include

#include//内部包含延时函数_nop_();

typedefunsignedcharu8;

typedefunsignedintu16;

sbitkey=P1^0;//正反转

sbitkey1=P1^1;//启动停止

sbitkey2=P1^2;//加速

sbitkey3=P1^3;//减速

sbitLCD_RS=P2^4;

sbitLCD_WR=P2^3;

sbitLCD_EN=P2^2;

sbitBEEP=P3^5;

sbitIr_Pin=P3^2;

u8Ir_Buf[4];//用于保存解码结果

u8codetable[]="ZhaoAndDX0009";

u8codetable0[]="----STOP00R/M";//初始停止

u8codetable3[]="FORSPEED12R/M";//启动3档正转

u8codetable2[]="FORSPEED05R/M";//2档正转

u8codetable1[]="FORSPEED03R/M";//1档正转

u8codetable4[]="FORSPEED20R/M";//4档正转

u8codetable5[]="FORSPEED30R/M";//5档正转

u8codetable10[]="----STOP00R/M";//停止

u8codetable13[]="BACKSPEED12R/M";//3档反转

u8codetable12[]="BACKSPEED05R/M";//2档反转

u8codetable11[]="BACKSPEED03R/M";//1档反转

u8codetable14[]="BACKSPEED20R/M";//4档反转

u8codetable15[]="BACKSPEED30R/M";//5档反转

u8codeFFW[8]={0x7F,0x3F,0xBF,0x9F,0xDF,0xCF,0xEF,0x6F};

u8codeREV[8]={0x6F,0xEF,0xCF,0xDF,0x9F,0xBF,0x3F,0x7F};

u8codeSPD[6]={0x18,0x16,0x12,0x08,0x06,0x04};//五个档

bitflag=1;

bitflag1=0;

u8j=0x01;

u8s=0x00;

u8d=0x00;

voidint1_init(void)

{

IT0=1;//下降沿有效

EX0=1;

EA=1;

}

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

*UART初始化

*波特率:

9600

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

voiduart_init(void)

{

TMOD=0x21;

SCON=0x50;

TH1=0xFD;

TL1=0xFD;

TR1=1;

}

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

*UART发送一字节

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

voidUART_Send_Byte(u8dat)

{

SBUF=dat;

while(TI==0);

TI=0;

}

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

*获取低电平时间

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

u16Ir_Get_Low()

{

TL0=0;

TH0=0;

TR0=1;

while(!

Ir_Pin&&(TH0&0x80)==0);

TR0=0;

return(TH0*256+TL0);

}

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

*获取高电平时间

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

u16Ir_Get_High()

{

TL0=0;

TH0=0;

TR0=1;

while(Ir_Pin&&(TH0&0x80)==0);

TR0=0;

return(TH0*256+TL0);

}

 

voiddelay(u16x)

{

u16a,b;

for(a=x;a>0;a--)

for(b=10;b>0;b--);

}

voidbeep(void)

{

u8i;

for(i=0;i<180;i++)

{

delay(6);

BEEP=!

BEEP;//BEEP取反

}

BEEP=1;//关闭蜂鸣器

}

voidsdelay(u8n)//延时程序

{

u8i,k;

for(i=2*n;i>0;i--)

for(k=125;k>0;k--);

}

u8READ_COM(void)//读状态(命令)函数

{

u8a;

LCD_RS=0;//命令(状态)字操作

LCD_WR=1;//读操作

LCD_EN=1;//操作允许

delay

(1);//延时

a=P0;//读取状态赋值到a

LCD_EN=0;//操作禁止

returna;//将读取的命令(状态)字返回

}

voidWRITE_COM(u8com)//写状态(命令)函数,入口参数为命令(状态)字

{

LCD_RS=0;//命令(状态)字操作

LCD_WR=0;//写操作

P0=com;//命令(状态)字准备好

LCD_EN=0;//操作使能位高脉冲

delay(10);

LCD_EN=1;

delay(10);

LCD_EN=0;

LCD_WR=1;//写禁止

}

u8READ_DAT()//读数据函数

{

u8a;

P0=0xFF;

LCD_RS=1;//数据操作

LCD_WR=1;//读操作

LCD_EN=1;//操作允许

delay

(1);//延时

a=P0;//数据读取到a

LCD_EN=0;//操作禁止

returna;//将读取数据返回

}

voidWRITE_DAT(u8date)//写数据函数,入口参数为写入数据

{

LCD_RS=1;

LCD_WR=0;

P0=date;

LCD_EN=0;

delay(10);

LCD_EN=1;

delay(10);

LCD_EN=0;

LCD_WR=1;

}

bitLCD_BUSY()//1602液晶读忙操作,忙则返回1,空闲则返回0

{

return(bit)(READ_COM()&0x80);

}

voidinit()//1602液晶初始化函数

{

delay(15);

WRITE_COM(0x38);

delay(5);

WRITE_COM(0x38);

delay(5);

WRITE_COM(0x38);//设置显示模式

while(LCD_BUSY());//读忙

WRITE_COM(0x08);//关闭显示

while(LCD_BUSY());//读忙

WRITE_COM(0x06);//指针加1模式

while(LCD_BUSY());//读忙

WRITE_COM(0x01);//显示清屏

while(LCD_BUSY());//读忙

WRITE_COM(0x0f);//开显示,显示光标,光标闪烁

}

voidDISPLAY(u8m)//显示主程序

{

u8a;

init();

while(LCD_BUSY());//读忙

WRITE_COM(0x80);//设置初始操作地址

for(a=0;a<16;a++)//写入table1内容

{

while(LCD_BUSY());

WRITE_DAT(table[a]);

}

while(LCD_BUSY());//读忙

WRITE_COM(0xc0);//设置初始操作地址

for(a=0;a<16;a++)//写入table2内容

{

while(LCD_BUSY());

switch(m)

{

case0:

WRITE_DAT(table0[a]);break;

case1:

WRITE_DAT(table1[a]);break;

case2:

WRITE_DAT(table2[a]);break;

case3:

WRITE_DAT(table3[a]);break;

case4:

WRITE_DAT(table4[a]);break;

case5:

WRITE_DAT(table5[a]);break;

case10:

WRITE_DAT(table10[a]);break;

case11:

WRITE_DAT(table11[a]);break;

case12:

WRITE_DAT(table12[a]);break;

case13:

WRITE_DAT(table13[a]);break;

case14:

WRITE_DAT(table14[a]);break;

case15:

WRITE_DAT(table15[a]);break;

}

}

}

intzfan(s,j,d)

{

flag=~flag;//按键后标志取反

if(flag)d=0;

elsed=10;

s=j+d;

DISPLAY(s);

return(j);

}

intqting(s,j,d)

{

flag1=~flag1;//按键后标志取反

if(flag1)s=j;

elses=0;

s=s+d;

DISPLAY(s);

returnj;

}

intjia(s,j,d)//通用加速主程序

{

if(j<5)j++;

elsej=5;

s=j+d;

DISPLAY(s);

returnj;

}

i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报 > 工作总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1