单片机的云台控制设计.docx

上传人:b****8 文档编号:10591170 上传时间:2023-02-21 格式:DOCX 页数:14 大小:105.13KB
下载 相关 举报
单片机的云台控制设计.docx_第1页
第1页 / 共14页
单片机的云台控制设计.docx_第2页
第2页 / 共14页
单片机的云台控制设计.docx_第3页
第3页 / 共14页
单片机的云台控制设计.docx_第4页
第4页 / 共14页
单片机的云台控制设计.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

单片机的云台控制设计.docx

《单片机的云台控制设计.docx》由会员分享,可在线阅读,更多相关《单片机的云台控制设计.docx(14页珍藏版)》请在冰豆网上搜索。

单片机的云台控制设计.docx

单片机的云台控制设计

河南机电高等专科学校

 

《C51程序设计》大作业

 

设计题目:

单片机的云台控制设计

1设计任务:

本次设计是以单片机为控制器,设计一个云台控制系统,使云台按期望的方式运行。

本次设计完成的任务:

(1)设计单片机外围电路及步进电机驱动电路,驱动云台步进电机运行。

(2)使用键盘输入控制云台步进电机。

(3)PC使用RS485总线远距离控制云台步进电机。

1.1单片机

单片机是指一个集成在一块芯片上的完整计算机系统。

尽管它的大部分功能集成在一块小芯片上,但是它具有一个完整计算机所需要的大部分部件:

CPU、

内部和外部总线系统。

单片机是将中央处理器,随机存储器,只读存储器,定时器芯片和I/O接口电路集成于一个芯片上的微控制器。

单片机以其价格低廉,功耗小,工作可靠,可编程等优点,得到应用者的青睐。

单片机是靠程序的,并且可以修改。

通过不同的程序实现不同的功能,尤其是特殊的独特的一些功能,这是别的器件需要费很多力气才能做到的,有些则是花大力气也很难做到的。

单片机通过编写的程序可以实现高智能,高效率,以及高可靠性。

单片机所具有的特点:

(1)高集成度,体积小,高可靠性

(2)控制功能强

(3)低电压,低功耗,便于生产便携式产品

(4)易于扩展

(5)优异的性价比

目前单片机渗透到人们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。

导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机。

更不用说自动控制领域的机器人、智能仪表、医疗器械了。

2电路原理图

3系统流程

整个云台控制系统分为初始化,键盘扫描,串口中断,延时程序和步进电机运转五部分。

主函数通过调用各子程序来实现键盘扫描,串口中断程序的调用来实现步进电机的控制。

本设计的系统主程图如图6-1所示,中断子程序流程图如图6-2所示。

 

 

图6-1系统主流程图

图6-2中断子程序流程图

3.1初始化模块

所谓初始化就是在应用系统中,需要对软件进行初始化设置,以能够满足该系统的正常工作。

在本系统中,如果没有初始化,则该系统无法正常工作。

本系统中初始化程序包括两部分,一部分是定时器初始化,另一部分是串口初始化。

而这些都是通过设置相应的特殊功能寄存器来实现的。

本设计中定时器初始化包括定时/计数器选择、定时/技术器工作方式、计数器装初值、打开定时器;串口初始化包括串口工作方式设置、打开串口、开总中断。

和定时/计数器有关的特殊功能寄存器有TOMD、TCON,和串口相关的特殊功能寄存器有SCON、PCON。

前面已经介绍了特殊功能寄存器,这里不再赘述。

串口工作方式1的波特率由定时/计数器T1、T2的溢出速率和SMOD共同确定,计算公式为波特率=(

/32)·(TI溢出率),TI溢出率=fosc/{12×[256—(TH1)]},本系统波特率为9600bit/s,晶振频率为11.0592MHz,串口选择工作方式为1,所以初值等于0xfa。

定时计数器的初始化编程步骤:

(1)根据定时时间要求或计数要求计算初值;

(2)工作方式控制字送TMOD;

(3)送计数初值到THx和TLx寄存器中;

(4)启动定时/计数器,即将TRx置位。

3.2键盘模块

综合考虑,本设计单片机I/O资源比较丰裕,所以采用了独立式键盘。

独立式键盘的每一个按钮直接控制单片机的P0相连接,当其中有一个按钮被按下时,PO口的相应位就被置为高电平,没有按下则为低电平。

所以单片机只需要识别PO的值就可以做出相应的动作。

3.3延时模块

通过用C语言写一段循环程序,来占用CPU一段时间从而达到延时的目的。

在该系统中,延时程序有至关重要的作用,一是作为普通的延时程序,而是产生步进电机的工作所需脉冲频率,延时的多少决定步进电机的转速,在本系统中,对步进电机的转速没有做过多要求,所以采用了for循环语句构成的比较简单的延时程序,如果对延时时间、步进电机转速有要求的系统中,则可以使用定时器定时,定时器的精度相当高。

下面是采用普通延时的程序源代码:

voiddelay(uintz)//延时

{

uintx,y;

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

for(y=110;y>0;y--);

}

3.4串口中断模块

在本系统中,单片机通过串口向单片机发送远距离控制信号,一旦PC机发送控制信号后,单片机接受到信息产生中断,通过中断服务程序去控制步进电机动作。

由于串口中断具有优先级别高的特点,所以不需要担心键盘和串口信息发生冲突。

3.5步进电机动作模块

在本系统中,步进电机的运行方式选用的是单、双8拍运行方式,即按A-AB-B-BC-C-CD-D-DA-A或者相反顺序通电的。

单片机的P2的低四位分别连接的是控制云台竖直方向转动电机的A、B、C、D四相,高四位则分别接的是控制云台水平方向转动的电机的A、B、C、D四相。

在编程中,将步进电机通电相的正序、反序分别放在两个数组中,在电机动作模块中使用不同的数组,就能达到控制电机的正转、反转,它们分别为moveup[]、movedown[]、movelefe[]、moveright[]。

另外为了还在本次系统只还设置了自动运行方式,这种方式是通过循环调用moveup[]、movedown[]、movelefe[]和moveright[]函数来实现自动运行的。

4源程序

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitP10=P1^0;

sbitP11=P1^1;

sbitP12=P1^2;

sbitP13=P1^3;

uchari,a,flag,u;

codetabup[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};//竖直电机正转1~2相励磁

codetabdown[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//竖直电机反转1~2相励磁

codetableft[]={0x10,0x30,0x20,0x60,0x40,0xc0,0x80,0x90};//水平电机正转1~2相励磁

codetabright[]={0x60,0x20,0x30,0x10,0x90,0x80,0xc0,0x40};//水平电机反转1~2相励磁

voidcontrol(uchar);

voidmoveauto();

voidmoveup();

voidmovedown();

voidmoveleft();

voidmoveright();

voiddelay(uchar);

voidinit()//初始化

{

TMOD=0x20;//设置定时器1为工作方式2

TH1=0xFA;

TL1=0xFA;

TR1=1;//开定时器

PCON=0x80;

SCON=0x50;//9600,n,8,1

EA=1;//开总中断

ES=1;//开串口中断

}

voidserial()interrupt4//串口中断

{

RI=0;

a=SBUF;

control(a);

delay

(1);

}

voidcontrol(ucharl)//中断控制电机动作

{

switch(l)

{

case'A':

moveup();break;

case'B':

movedown();break;

case'C':

moveleft();break;

case'D':

moveright();break;

case'Z':

flag=1;break;

default:

break;

}

}

voiddelay(uintz)//延时

{

uintx,y;

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

for(y=110;y>0;y--);

}

voidmoveup()//竖直方向向上

{

flag=0;

if(P10!

=1)

{

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

{

P2=tabup[i];

delay(50);

}

}

}

voidmovedown()//竖直方向向下

{

flag=0;

if(P11!

=1)

{

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

{

P2=tabdown[i];

delay(50);

}

}

}

voidmoveleft()//水平方向向左

{

flag=0;

if(P10!

=1)

{

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

{

P2=tableft[i];

delay(50);

}

}

}

voidmoveright()//水平方向向右

{

flag=0;

if(P10!

=1)

{

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

{

P2=tabright[i];

delay(50);

}

}

}

voidmoveauto()//自动运行

{

P1=0;

while(!

P10)

{

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

{

P2=tabup[i];

delay(50);

}

}

while(!

P11)

{

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

{

P2=tableft[i];

delay(50);

}

}

while(!

P12)

{

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

{

P2=tabdown[i];

delay(50);

}

}

while(!

P13)

{

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

{

P2=tabright[i];

delay(50);

}

}

}

voidcontrolkey(uchari)//按键控制电机动作

{

switch(i)

{

case1:

moveup();break;

case2:

movedown();break;

case4:

moveleft();break;

case8:

moveright();break;

case16:

flag=1;break;

default:

break;

}

}

voidmain()

{

P1=0;

flag=0;

init();

while

(1)

{

if(flag==1)

{

moveauto();//自动运行

}

P0=0xff;

u=P0;

controlkey(u);

}

}

5参考文献

[1]康晓明.电机与拖动[M].北京:

国防工业出版社,2005.8

[2]刘锦波,张承慧等.电机与拖动[M].北京:

清华大学出版社,2006.9

[3]戴佳.单片机C51语言应用程序设计[M].北京:

电子工业出版社,2006.7

[4]王英杰,林怡青,彭美春,聂一彪.基于VC++6.0的PC机和单片机串口通信[J].电脑应用技术,2006年第67期

[5]邱育桥.基于MSComm的PC机与单片机串行通信程序设计[J].科技信息,2009年第15期

忽略此处..

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

当前位置:首页 > 总结汇报 > 其它

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

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