大学生电子设计竞赛作品论文悬挂物体的控制附源代码.docx
- 文档编号:4326544
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:38
- 大小:202.32KB
大学生电子设计竞赛作品论文悬挂物体的控制附源代码.docx
《大学生电子设计竞赛作品论文悬挂物体的控制附源代码.docx》由会员分享,可在线阅读,更多相关《大学生电子设计竞赛作品论文悬挂物体的控制附源代码.docx(38页珍藏版)》请在冰豆网上搜索。
大学生电子设计竞赛作品论文悬挂物体的控制附源代码
设计报告
悬挂运动控制系统
摘要
本悬挂运动控制系统,采用步进电机作为系统的运动源,采用AT89C52作为系统的核心,通过输入脉冲来控制步进电机的运转,从而控制悬挂物体的运动轨迹。
该系统能够用键盘输入坐标的参数,设置运动模式;用LCD器件RT12864M作为系统的显示器件,界面友好,能够显示系统的工作模式和及当前坐标值,通过拨码开关还可设置电机的步进。
软件采用修正查表法(自行设计)计算电动机需要的脉冲个数,节省大量CPU资源和程序存储空间,代码简洁,便于设计和调试。
本系统具有多种画图功能,能够画直径为50cm的(面板内)任意圆心的圆或弧,能够画出任意斜率的直线,任意大小和方向的矩形,且能够动态显示当前的坐标,运行速度快,误差小,基本上完成了所要的功能。
关键词:
AT89C52步进电动机查表法LCD
第一部分系统原理···············································1
本系统包括三大模块··············································1
第二部分方案的分析与论证·····································2
硬件电路设计、比较与论证········································2
软件算法选择与论证··············································3
第三部分硬件电路设计与调试····································5
硬件电路的设计··················································5
硬件电路的调试··················································8
第四部分系统软件设计和调试····································9
坐标点确定······················································9
步进电机脉冲个数确定···········································10
定时器中断服务子程序流程图·····································11
第五部分软硬件联调和结论·····································13
软硬件联调·····················································13
结论···························································13
附录:
使用工具和仪器··········································15
第一部分系统原理
一、本系统包括三大模块:
1、单片机、键盘和显示模块
该模块为整个系统的监控中心,单片机接收键盘和黑线检测模块传出的数据,经过处理,对显示器LCD写显示数据,对步进电动机组发出脉冲信号,控制电机做各种要求的运动。
2、黑线检测模块
该模块主要用于完成发挥部分2中画任意给定曲线。
光电传感器识别黑线的位置。
当发光二极管发出的光照射黑线时,光线被吸收,接收部分无法接收到光信号。
接收光电三极管上输出高电平,经过比较器输出高电平。
而没有黑线的地方,光信号被光电三极管采集到,输出低电平,经过比较整形输出低电平。
单片机通过采集该电平信号判断黑线的位置,根据这个位置走动,也即实现了发挥部分2。
3、电机组模块
该模块接收单片机发出的脉冲信号,做正或反转,带动物体按要求运动。
系统原理框图如图1-1-1:
图1-1-1
第二部分方案的分析与论证
一、硬件电路设计、比较与论证
1、单片机选择
考虑到本系统无须特殊功能模块,且有现成的MCS-51系列单片机开发工具,我们决定使用价格便宜,供货充足MCS-51系列单片机。
由于AT89C51和AT89C52在价格上没有多少区别,且AT89C52有更大Flash程序存储空间和RAM空间,外部引脚也相同。
为满足大数据,长代码的要求,我们最终决定选用AT89C52单片机做为本系统的核心器件。
2、电机选择
方案一:
直流电动机调速系统
直流电动机具有良好的线性调速特性,简单的控制性能,高的效率,优异的动态特。
普通的直流电动机虽然能够达到提升或降低物体以控制画笔的目的,但是普通直流电动机在不工作时,其转子受到重物的拉力而旋转,在加电流的情况下,只有某个适当电流使电动机转子的转动力矩和物体拉力力矩平衡。
显然使用普通直流电动机实现本系统,将会遇到难以想象的困难。
方案二:
采用步进电动机。
可以通过单片机输出数字脉冲来控制电动机,它将电脉冲信号转换角位移,即给一个脉冲信号,步进电动机就转动一个较小的角度,没有累计误差,具有良好的跟随型,可以精确控制电动机转子转动来控制画笔的运动,并且能够很好得解决了普通直流不能满足重物固定的难题。
显然我们选用该种电机。
3、示器件部分
方案一:
采用数码管显示模块。
数码管虽然说成本低,原理简单,但是接口电路相当复杂,控制烦琐,功耗大,不利于系统设计,控制及布局。
并且本系统要显示的数据量特别大,用该种设计方案显然不切合实际。
方案二:
采用液晶显示模块。
4*8汉字显示的12864系列液晶可以一屏显示包括汉字在内的多种信息,且功耗小,接口电路简单,控制方便,界面友好,能较好的满足系统的设计要求。
经比较,我们选择方案二。
二、软件算法选择与论证
1、不限定轨迹的运动
方案一:
起点和目标一旦确定,其相应的绳长变化就确定了,那么直接算出电机需要的脉冲数,并通过单片机提供脉冲,画笔自然到达目标点。
这种方式运行时间很短,编程非常简单,但坐标难以时实显示,影响后面的发挥部分。
方案二:
所有情况都分段运动,即使不要求运动轨迹也要分段做近似直线运动,该方法运动时间增加,编程麻烦,但是容易动态显示当前坐标。
为确保发挥部分,我们选择该方案。
2、限定轨迹的运动
(1)画圆
方案一:
公式逼近法。
在当前位置上
,通过在轴向上增加一小段固定位移S,计算下一个坐标,并移动画笔,然后通过圆的公式计算偏离程度,确定下一次在哪个轴线方向上移动位移S及其坐标,如此计算,直到画完一个圆。
该方法优点是可以节省数据存储空间,编程容易。
缺点是占用大量的CPU资源,且在4个轴点附近的偏差很大。
方案二:
一般查表法。
将圆上的均匀采集的数据点存储于表格中供程序调用。
该方法优点节省CPU资源,精度比方案一高。
但代码程序量很大,而且随着采集点的增加和精度的提高,代码太大,程序的修改也很麻烦。
方案三:
修正查表法(自行设计)。
圆周运动比较特殊,在圆上按弧长均分的点,x和y的增加存在一定关系。
y值变化量
加快(或变慢),
随之变慢(或加快)。
且相位相差1/4圆周,幅度相同。
这种方法便于修改,代码不大,为方案二的1/4,但精度跟方案二相同。
同时用查表法,节省了大量的CPU。
我们选择了方案三。
(2)直线
方案一:
计算斜率,用斜率直接乘以分段长度,当斜率过大数据溢出会导致严重错误,而当斜率过小,会有较大的舍入误差,计算精度不高。
计算出的脉冲误差很大,积累的误差导致运动达不到要求。
方案二:
不计算斜率,比较整个直线长度x和y分量的大小,取大值先按1cm等份,再用等份数等份小的分量,并且将其值扩大100,取整,其误差很小。
我们选择该方案画直线。
我们选择方案二。
第三部分硬件电路设计与调试
一、硬件电路的设计
1、步进电动机和驱动选型
本系统采用的是常州步进电机及驱动,下面对该型号的电机和驱动作以下简单介绍。
特点:
采用12-30V直流或10V-24V交流供电
H桥双极性恒相流驱动
输出驱动电流多档可选
多档细分可选(1,2,4,8)
输入信号光电隔离
短路、错相保护
提供节能的半电流锁定功能
接口信号选择
公共端(com)电压(由拨码开关)选择(见表3-1-1):
表3-1-1
5V
适应控制机+5VTTL电平信号
24V
通用PLC的24V接口信号
本题用5V。
运行模式
本驱动器可以提供整步、改善半步、四细分和八细分四种运行模式,利用驱动器面板上5位拨码开关的第3、第4两位可组合出四种状态(见表3-1-2):
(0:
ON,1:
OFF)
表3-1-2
SW3,SW4
运行模式
SW3,SW4
运行模式
00
整步
01
改善半步
10
四细分
11
八细分
本题用改善半步。
电流选择
本驱动器利用驱动器面板上的4位拨码开关的第1,第2位组合出四种状态(见下表3-1-3):
(0:
ON,1:
OFF)
表3-1-3
SW1,SW2
电流
SW1,SW2
电流
00
0.6A
01
1.2A
10
1.8A
11
2.5A
本题用为0.6A
电源电压:
输入10VAC到30VAC之间选择,本题选择20VAC。
输入信号
公共端COM本驱动器的输入信号采用共阳极接线方式,用户应将输入信号的电源正极连接到对应的内部光耦导通,控制信号输入驱动器中。
脉冲信号输入CP该脉冲信号下降沿被驱动器解释为一个有效脉冲,驱动电机运行一步。
脉冲低电平的持续时间不少于10us。
方向信号输入DIR该端信号的高电平和低电平控制电机的两个转向。
该端悬空被等效认为高电平。
控制电机转向时,应确保方向信号领先脉冲信号至少5us建立。
与单片机接口电路如下图3-1-1:
图3-1-1
2、键盘和显示电路的设计
由于本系统仅采用4个键,因此将键盘直接连接到单片机的I/O口上去,并且采用软件消抖。
液晶主要技术参数和显示特性:
电源:
VDD3.3V~+5V(内置升压电路,无需负压)
显示内容:
128列X64行
显示颜色:
黄绿
显示角度:
6:
00钟直视
LCD类型:
STN
与MCU接口:
8位或4位并行/3位串行
配置LED背光
多种软件功能:
光标显示、画面移位、自定义字符、睡眠模式等
液晶的主要命令如下:
二、硬件电路的调试
1、电机测试
使用信号发生器输入5V,10~2000Hz方波信号到电动机驱动CP端,设置细分模式,COM接+5V电源,DIR不接或接电源地,发现电机运转精确。
2、键盘和显示
键盘和液晶硬件电路比较简单,连接好电路,经过万用表测试,电路连接一切正常。
3、黑线检测电路
电路上电后检测在纸上画的任意黑线,用信号发生器检测电流信号,一切正常。
第四部分系统软件设计和调试
所有画线均采用分段画线。
一、坐标点确定
1、画任意直线
图4-1-1
起点:
,终点:
。
-
=
,如上图4-1-1。
显然有
,不妨取
(这样做有两个好处:
1、防止用短的坐标轴向距离等份产生的舍入误差在长的上面放大而导致更大的误差。
2、避免直线与轴线平行时,错选0作为除数,导致系统出错)。
将
以1cm等份n。
由此等份数n去等份
,可以得到一系列新坐标:
。
此方法可以画任意直线,只需输入所要到达的目标点坐标。
(1)画直径为50cm的圆(包括弧线)
如图4-1-2在四个区域中有:
图4-1-2
,则有
相位相差一个区长,变化幅值完全相同。
,
按弧长25等份,得到序列
。
取
其变化量为:
表4-1-1
序列
序列
得到修正值表为:
(保存于代码段中)
为了避免大量浮点数带来的麻烦并兼顾精度,采用扩大100取整的办法,可以精确到0.01mm,完全满足设计的需要。
(3)动态显示
每一次画笔运动时,将新坐标输入到LCD即可。
二、步进电机脉冲个数确定
步进电机带动绳子进而带动画笔运动。
唯一可以确定的是两坐标间绳子长度的变化量,左边滑轮坐标为
,右边为
。
画笔运动前后两分别为坐标
,绳长变化:
步进电机转子旋转一周,其绳子运动长度约为转子上轮子的周长c(根据实际运行调试结果定),左右电机(
,2细分)需要的脉冲数分别为
个。
中断服务程序送入
个脉冲即可以。
电动机画圆子程序框图如下图4-1-3。
图4-1-3
三、定时器中断服务子程序流程图
图4-1-4
第五部分软硬件联调和结论
一、软硬件联调
由于平时训练,软硬件联调过程中,液晶显示和键盘没有什么问题,基本上一次成功。
1、直线运动
调试过程中,发现相差很大,最大时居然差了3cm。
这是步进电机不该有的结果。
很快我们发现是因为,两绳子受力交点不在画笔上,而我们的程序就是在交点在画笔上编写的,所以不应该有正确结果。
我们用线直接接到画笔上,在开始运行,发现只要输入终点坐标,就可以很好画出任意斜率的直线。
2、圆周运动
在调试过程中,我们碰到难题:
(1)由于绳子较粗,很容易导致在圆周另外一端偏差较大。
(2)物体在较靠近面板边缘时,偏差增加。
(3)物体在最高点的误差很大。
我们用很细的铜丝代替的以前较粗的绳子,较细的绳子对周长的影响明显变小,通过尝试,我们得到比较好的周长值,除最高点外,基本上能够按照圆运动。
经过分析,物体靠近面板边缘,两绳子受力方向和大小失调,绳子本身有一定的弹性,受力小的绳子伸展小,而受力大的伸展大,而且受力小的绳子本身就没有拉紧,导致误差很大,通过增加物体的质量,这种误差明显减小。
通过分析,物体之所以在最高点会有很大误差(主要表现为向圆心偏约1cm左右),是因为在最高点时,绳子所承受的拉力最大,绳子伸长更大所致。
这是该系统固有的缺点,虽然增加协调物体的质量,但是误差还是没有多大改善。
二、结论
1、直线运动测试
表5-1-1
次数
起始坐标
(cm)
给定目标坐标(cm)
实际目标坐标(cm)
最大误差
(cm)
目标点误差(cm)
时间
(s)
第一次
(75.0,50.0)
(75.0,85.0)
(74.8,84.9.)
0.2
0.2
24.82
第二次
(75.0,50.0)
(25.0,50.0)
(25.1,50.1)
0.2
0.1
35.31
第三次
(75.0,50.0)
(25.0,30.0)
(25.3,30.2)
0.4
0.4
38.18
第四次
(40.0,40.0)
(80.0,80.0)
(79.4,94.4.0)
0.9
0.9
38.96
第五次
(0,0)
(75.0,50.0)
(74.8,49.9.0)
0.3
0.3
52.91
2、圆周运动测试
表5-1-2
次数
圆心(cm)
起始坐标
(cm)
实际目标坐标(cm)
最大误差
(cm)
目标点误差(cm)
时间
(s)
第一次
(50.0,50.0)
(75.0,50.0)
(74.9,50.0)
1.1
0.1
59.78
第二次
(40.0,50.0)
(65.0,50.0)
(65.0,50.0))
0.9
0
60.23
第三次
(30.0,30.0)
(30.0,55.0)
(30.2,55.2)
1.0
0.4
60.05
附录:
使用工具和仪器
1、万利insightse-52仿真器
2、CP386编程器
3、数字式示波器
4、5V直流稳压电源
5、直尺
6、万用表
7、电子称
8、秒表
9、锔子
10、螺丝刀
11、老虎钳
源代码:
#include
#include
#include
#definec406
///////////////411
sbitDIR1=P3^4;/*高电平上拉*/
sbitDIR2=P3^6;/*低电平上拉*/
sbitCP1=P3^5;
sbitCP2=P3^7;
/************定义端口****************/
sbitRS=P2^3;
sbitRW=P2^2;
sbitE=P2^1;
sbitPSB=P2^0;
sbitbuttonadd=P1^0;
sbitbuttondire=P1^1;
sbitbuttonenter=P1^3;
/************定义数据****************/
unsignedcharcodeshow11[8]={187,182,/*欢*/211,173,/*迎*/202,185,/*使*/211,195/*用*/};
unsignedcharcodeshow12[16]={0xba,0xd3,0xba,0xa3,0xb4,0xf3,0xd1,0xa7,0xb3,0xa3,0xd6,0xdd,0xd0,0xa3,0xc7,0xf8};/*河海大学常州校区*/
unsignedcharcodeshow13[8]={0xb2,0xce,0xc8,0xfc,0xd7,0xf7,0xc6,0xb7};/*参赛作品*/
unsignedcharcodeshow21[16]={0xd7,0xf8,/*坐*/0xb1,0xea,/*标*/0x3a,/*:
*/0x58,/*X*/0x20,0x20,0x20,0x20,0x20,0x59,/*Y*/0x20,0x20,0x20,0x20};
unsignedcharcodeshow22[8]={0xc9,0xe8,0xb6,0xa8,0x3a,0x20,0x20,0x20};/*设定:
*/
unsignedcharcodeshow221[8]={0xd7,0xd4,0xb6,0xa8,0xd2,0xe5,0x31,0x20};/*自定义1*/
unsignedcharcodeshow222[8]={0xd7,0xd4,0xb6,0xa8,0xd2,0xe5,0x32,0x20};/*自定义2*/
unsignedcharcodeshow223[8]={0xd4,0xb2,0xd6,0xdc,0x20,0x20,0x20,0x20};/*圆周*/
unsignedcharcodeshow224[8]={0xb6,0xa8,0xb5,0xe3,0x20,0x20,0x20,0x20};/*定点*/
unsignedcharcodeshow225[8]={0xc8,0xce,0xd2,0xe2,0x20,0x20,0x20,0x20};/*任意*/
unsignedcharcodeshow232[9]={0xd7,0xf8,0xb1,0xea,0xc9,0xe8,0xb6,0xa8,0x3a};/*坐标设定:
*/
unsignedcharcodeshow231[9]={0xd4,0xb2,0xd0,0xc4,0xc9,0xe8,0xb6,0xa8,0x3a};/*圆心设定:
*/
unsignedcharcodeshow24[2]={0x58,0x59,};/*XY*/
/***********函数原型说明************/
voidLCDinit();
voidwritedata(unsignedcharda);
voidLCDwritedata(unsignedcharchange[],unsignedcharn);
voidLCDwritecmd(unsignedcharcmd);
voidLCDwait();
voidLCDlocate(unsignedcharpox,unsignedcharpoy);
voiddelay400ms();
voiddelay1s();
voiddelay100us();
voiddelay100ms(void);
voiddelayms(unsignedchark);
voidwait();
voidJumpTo(unsignedcharn);
voidoneadd(void);
voidshowxy(void);
voidLCDdisp(unsignedintpox,unsignedintpoy);
voidshowxy1(unsignedcharpox,unsignedcharpoy);
unsignedcharcodeoffset[50]={1,4,6,9,11,13,16,19,20,23,26,28,30,32,34,37,39,41,43,45,48,49,51,53,54,57,58,59,62,63,64,65,67,69,69,71,71,73,71,76,76,75,77,76,78,78,78,78,78,79};
unsignedintl1,l2,l3,l4,nowx,nowy,nextx,nexty,l11,l22;
unsignedinttimes1,times2;
unsignedchars,i,flag;
bitlast,drawflag;
unsignedcharplaceflag,moveflag,aimx,aimy;
voidmove(unsignedintpox,unsignedintpoy);
voidstartmotor(unsignedintlx,unsignedintly);
voidinter1(void);
voidcircle(unsignedcharcentx,unsignedcharcenty);
voidcalculate(unsignedintnowx,unsignedintnowy);
voiddefmove1(void);
voiddefmove2(void);
voidbeeline(unsignedintpox,unsignedintpoy);
voidarc(unsignedcharn);
/*****************主函数*****************/
voidmain(void)
{
unsignedchardatamoveflag=1;
unsignedintj;
unsignedcharn;
delay100ms();
LCDinit();
delay400ms();
LCDlocate(1,3);/*液晶显示"欢迎使用"*/
LCDwritedata(show11,8);
LCDlocate(2,1);
LCDlocate(3,1);
LCDwritedata(show12,16);
LCDlocate(4,3);
LCDwritedata(show13,8);
delay1s();
times1=0;
times2=0;
moveflag=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 大学生 电子设计 竞赛 作品 论文 悬挂 物体 控制 源代码
![提示](https://static.bdocx.com/images/bang_tan.gif)