悬挂运动控制系统
悬挂运动控制系统
悬挂运动控制系统
悬挂运动控制系统
参赛队员:吴亚军
参赛队员:吴亚军 吴怀恩吴怀恩吴怀恩吴怀恩 季宿儒季宿儒季宿儒季宿儒
参赛队员:吴亚军
参赛队员:吴亚军
摘要:本系统以单片机 89C52 为核心,采用了步进电机控制装置、红外寻迹传感
装置来实现一个对悬挂物体运动控制系统。友好的操作界面和灵活的监控
方式是本设计的两大特色,增强了系统的实用性。
关键词:步进电机 ;红外传感器 ;悬挂运动。
一、方案论证与选择
一、方案论证与选择
一、方案论证与选择
一、方案论证与选择
1.题目任务要求及相关指标的分析
题目的基本要求中,要求在 150 秒内到达设定的一个坐标点以及 300 秒内画
圆或按照设定的轨迹运动,这要求我们对左右两个电机进行灵活、准确、快速的
控制,并且有和谐的人机交换功能,才能够满足要求。因此选择合适的电机以及
运用有效的算法来对电机进行控制是必需的,我们通过建立合理的数学模型,使
两电机控制的绳长依照我们建立的函数关系变化,来实现悬挂物体在板上以各种
方式运动。
发挥部分,要求控制物体沿板上标出的任意曲线运动,通过红外传感器寻迹,
实现跟踪运动。而显示画笔的位置坐标,则可通过两段绳长变化与原点坐标之间
的函数关系来计算,求出当前点的横纵坐标,并在 LCD 上显示出来。
2.方案的比较与选择
(1)电机的选择
方案一:直流电机
采用单片机和 A/D 转换构成系统,控制普通电机的步数和旋转方向,可
以考虑达林管组成的 H 型 PWM 电路。用单片机控制达林管使之工作在占空比
可调的开关状态,精确调整电机转速,减小因惯性,速度,步距角过大而引起的
调整误差,达到改变绳长的要求,缺点是通过控制直流电机驱动模块将脉冲信号
转化为模拟信号,需要将单片机输出的序列脉冲转换,延长了控制的时间,导致
控制精度差;关键是直流电机不能即停,使直流电机不能精确定位,满足不了控
制误差范围为设定值的要求。
方案二:步进电机
用单片机产生脉冲信号,脉冲信号的占空比为 0.5 左右,脉冲信号经过功
率放大控制步进电机,控制信号为数字信号,不再需要数/模转换;步进电机的
速度易于控制,具有快速启/停能力,可在一刹那间实现启动或停止;它的转动
角度严格可控,一般情况步距角可以降低到 °5.1 以下,而采用专用驱动块,可以
更加的精确。步进电机延时短,定位准确,精度高,可控制性强。这样我们就可
以根据驱动脉冲总数来计算绳子所走过的路程,从而得出坐标和时间。
根据本课题技术指标要求,物体质量大于100克即可,步进电机的输出功
率足以满足负载要求;同时根据题目要求运动轨迹与预期轨迹偏差不超过 4cm,
这对电机有精确的要求,而直流电机难以达到这一指标。综上方案的比较分析,
故而本设计采用方案二。
(2)悬挂物体定位方式的选择
方案一:坐标查询方式
在 80cm×100cm 的白色底板上,等分为 8000 个方格,视其为 8000 个点,
每个点都有横纵坐标(a,b)两个数据,即共有 16000 个数据,而底板左右对称,
所以只需记录一半的数据,即 8000 个,这样我们只需事先计算出悬挂物体在每
一点对应的两侧绳长(x,y),将这 8000 个数据,即 4000 个确定的绳长数组记
录在单片机中,这样就可以对所设定的坐标,采用查询的方式,找到相应点所对
应的数组(x,y),与当前点对应的绳长做差,得到所需的绳长改变量,从而控
制电机使物体到达该点。
此方案的优点在于查询方便快捷,准确性高,动作运动迅速,但准备工作
的计算量太大,而且需要通过一块片外的 ROM 来存储如此庞大的数组集,不方便
实现。
方案二:公式计算方式
根据题目中给出的各段长度,可以很容易的得到底板上各点坐标与两电机
分别对应的绳长之间的函数关系,这样可以根据给定点的坐标求出各绳长或根据
绳长求出点的坐标,能够实现各项指标,实现悬挂物体的精确定位,满足题目的
要求。
该方案数学模型清晰,可以在较短时间内完成绳长或坐标的计算,使电
机快速动作,无须片外 ROM 存储,而且占用单片机内存少,空间利用率较高,
可操作性强。
综上方案的比较分析,根据本课题技术指标要求,用公式计算的方法比较
容易实现,故而本设计采用方案二。
(3)画圆方案的选择
方案一:切分拟合法
首先通过周长计算,将圆等分为 3000 等份,然后依次计算初始点到下一
点的坐标增量,通过增量来控制两个电机的运动,从而调整绳长,实现点对点的
精确移动,也就是说所画的圆是由 3000 段小线段与之拟合连接起来的。这需要
我们有足够快的运算速度,与很高的精度,依次精确计算出每一次步进的距离,
横纵坐标和两段绳子的改变量,占用内存很大,计算时间较长,反应到电机上就
是电机的运动时断时续,画圆的用时很长,线段相对光滑,但是累积误差比较大。
方案二:查询计算法
第一步要求我们能够画出一个题中要求的标准圆,然后将这条轨迹对应的
各点坐标与相邻坐标的增量处理后详细记录,并且存储到单片机内,当我们需要
画圆的时候,只需要调用这些标准增量,通过公式计算出绳长的改变量,就可以
很精准的得到:左右电机从当前点运动到相邻点的脉冲数目与方向。这样就可以
实现快速、准确、美观的画圆。
上述两种方案中,方案二可以避免复杂的计算,缩短电机的等待时间,没
有误差的累积,反应快速、灵活,画面连续、美观,实现起来也比较方便。因此,
我们画圆采用上述的方案二。
(4)寻迹传感器的选择
发挥部分寻迹传感器可供选择的种类较多,主要有以下两种:
方案一:光电传感器
光电传感器有多种类型,按其外表结构有对射型、回归反射型、扩散反射
型;按光源色分类又有红色、绿色、蓝色、红外以及半导体雷射等,其自身带有
内置的或分离的放大器。根据题目的要求,要使所选传感器可以很好区分白色与
黑色,有多种光电传感器可供选择,某些光源色为红色或绿色的光电传感器由于
其对黑色与白色的反射率相差很大,所以可以很容易的识别。但是其价格昂贵,
结构偏大,外围机械部分比较复杂。
方案二:红外传感器
红外传感器是我们非常常用的一种传感器,也具有很强的对黑色与白色的
辨识能力。由于红外光波长比可见光长,因此受可见光的影响较小。同时红外系
统还具有以下优点:尺寸小、质量轻,能有效的抗可见光波段的伪装,对辅助装
置要求最少,对人眼无伤害。当然红外光也有一定的缺点,如大气、潮湿的天气、
雾和云对它有衰减作用。它具有体积小、灵敏度高、线性好等特点,外围电路简
单,安装起来方便,电源要求不高。用它作为近距离传感器是最理想的,电路设
计简单、性能稳定可靠。
综上方案的比较分析,根据本课题技术指标要求,故而本设计采用方案二。
(4)寻迹传感器布局的选择
方案一:5 传感器梅花状分布
采用上、中、下、左、右各装一个红外传感器来探测黑线,常态让中间的
传感器保持在黑线上面,其余四个方向的传感器用来告知控制系统:该传感器所
在的位置,是否为黑线上方。若在,则控制画笔向该传感器所在的方位移动,否
则保持原来的移动方向不变,直到某个传感器探测到黑线,并发出信号为止。
这种方法虽然所用器件少,但是可靠性相对较差,精度较低。
方案二: 8 传感器九宫图分布
在九宫格中间的右上、右、上、右下、左上、左下、左、下这八个方向装
上红外传感器,并按照上面的顺序设置优先级。优先级的设定,取决于坐标原点
相对于运动区域的所在位置。这样的话,我们就可以很容易的探测出黑线的前进
趋向,依照优先级来控制电机的运动,可以准确快速实现寻迹功能,能够精准追
踪 1.5cm~1.8cm 宽的黑色轨迹。
比较以上两种方案,方案一的探测范围显然要小,一旦传感器组处于黑线
的同一边时,就很难重新自纠正,尤其是碰到有间断的曲线时,就很难控制它的
运动;而方案二则可以探测较大的范围,实现多方位探测,控制思想较之方案一
要先进的多,便于实现 PID 控制。
(5) 小结
经过仔细比较与论证,我们确定了整个控制系统各个模块的最终方案如
下:
控制;
电机的选择:步进电机,带专用驱动模块,通过单片机输出脉冲信号来
悬挂物体定位方式的选择:公式计算方式,求出点坐标对应的绳长,用
步进电机实现绳长的改变。
画圆的算法:存储、查询计算,预先存储标准圆的相应增量,以便随时
调用。
发挥部分寻迹传感器的选择:红外传感器
发挥部分寻迹传感器布局方法的选择:九宫图分布
二、系统总体设计方案及实现方框图
二、系统总体设计方案及实现方框图
二、系统总体设计方案及实现方框图
二、系统总体设计方案及实现方框图
系统以 89C52 单片机为核心,加以其他外围电路实现较高精度定位。由于
只需控制左右两个电机,所以其外围电路较简单,由于要实现高精度的控制,而
硬件上的误差影响太多,所以需采用合理程序实现优良性能。
系统原理图
三、理论分析与计算
三、理论分析与计算
三、理论分析与计算
三、理论分析与计算
该设计以单片机控制的两个
步进电机为基本构架,两电机控制
各自的绳长实现悬挂物体的二维移
动。根据题目将滑轮近似为一点(误
差在最后单片机做出补偿),我们根
据如图 3.1 中各线之间的关系,得
到关系式如下:
⎧
⎪
⎨
⎪⎩
x a
15)
(
2
+
y
a
(95
)
2
−
(1)
=
=
2
2
2
+
+
(115
(115
b
)
−
b
)
−
2
其中:x 为左电机控制的滑轮
右侧绳长;
y 为右电机控制的滑轮
左侧绳长;
a 为以图中标出的原点
为原点物体所对应的横坐标;
图 3.1
b 为物体所对应的纵坐标。
这样通过输入设定值,便可在单片机中依式(1)计算得出绳长 x 和 y,与
所在点的坐标所对应的绳长做差,便可得到电机所需运动的绳长及转动方向,便
可通过单片机对电机驱动,
实现对悬挂物体的精确定位。
图 3.1
在实现控制物体沿板上标出的任意曲线运动的过程中,我们实现了系统每移
动到一个坐标便在 LCD 上显示这点的坐标,这就要求根据绳长的变化得到坐标的
变化,同样在单片机内部可依据式(1)进行逆变换,得到如下的函数,式(2)
⎧
a
=⎪
⎨
⎪ =
b
⎩
依次可算出 a、b,得到所在点的坐标,从而显示出来。
x y
2
2
+
220
x a
2
+
8800
(2)
115
−
−
−
(
2
15)
四、主要功能电路的设计
四、主要功能电路的设计
四、主要功能电路的设计
四、主要功能电路的设计
1.基本说明
由于本系统设计所要求的精度较高,我们用单片机输出脉冲控制的步进电
机,每前进一个步距的距离为 0.046mm,速度易于控制,具有快速启/停能力,
可以达到精度高、速度快、定位准这些优良的性能,足以很好的满足各项性能要
求。
反射式红外传感器,其工作原理为:红外发射管发射红外光,接收管是否
接收到红外光,对应了接收管的导通与截止两种状态,导通时有一个变化的通光
电流,我们只需对微弱的通光电流进行上拉,变为电压信号,再对这个电压信号
进行比较,输出开关脉冲,由单片机的 I/O 口将检测到的开关信号送到单片机进
行识别、分析,然后发出相应的控制指令。整体电路的设计简单合理、性能稳定
可靠。
2.关键电路单元的考虑和计算
红外寻迹传感器的电路设
计如右图 4.1,传感器型号采用
反 射 式 红 外 发 射 — 接 收 管
ST188,比较器采用 LM339,用
两片以满足 8 个红外传感器的
需求。
查资料得,红外发射管的极
限电流为 50mA,我们取中间态
R
计算: 1
=
V
5
mA
50
=
100
Ω ,
红外接收管的通光电流最
大为 lI =0.25mA,可以计算其导
通截止两种状态的电平所需电
阻最小为:
图 4.1 红外寻迹电路
Vcc V V
5
R
min
=
−
0.25
V
1.25
mA
−
I
l
D
=
=
15
k
Ω ,其中 DV 为导通管压降,实际电路中取大于
15kΩ ,取 3R =100kΩ 。
五、系统软件的设计
五、系统软件的设计
五、系统软件的设计
五、系统软件的设计
本设计以合理的定位计算和优良的修正补偿为主要特色,程序中这两点的
合理性在系统性能指标实现中起着很大的作用。
主程序:
主程序主要由四块模式组成,即画直线,画圆,通过键盘控制物体上下
左 右 运 动 , 以 及 写 字 ( 通 过 程 序 — — 本 程 序 为 “ 电 ”)。
开机
开机画面
复位
选择工作类型
直线
圆
上下左右
写“电”
图 5.1 主程序流程图
直线 运动 核心算法
假设 E( x0,y0),F(x1,y1)为给定 平面范围上的 任意两 点 ,作辅助 线
(图中虚 线部分 ),在 直角 三角形 ⊿ABE 中
a0 2=(x0+15) 2+(115-y0) 2
( 5.1 )
在直 角三 角形⊿CDE 中 :
b0 2=(95-x0) 2+(115-y0) 2
( 5.2 )
同理 对于 F 点, 两拉 线长分别为 :
a1 2=(x1+15) 2+(115-y1) 2
( 5.3 )
b1 2=(95-x1) 2+(115-y1) 2
( 5.4 )
因此 当悬 挂物从 E 点运动 到 F 点时:
电机 1的收 放线 长度为 c(当 c<0,电机 正转(或拉线 伸长); c>0时 ,
电机反转 (或拉线 收 缩))
c=a0-a1( 5.5)
电 机 2的 收 放 线 长 度 为 d( 当 d<0, 电 机反 转 ( 或拉 线 收 缩), 当 d>0
时,电机 正转(或 拉 线伸长))
d=d0-d1( 5.6)
根据 c,d 的正 负分 别确定电 机 1,电机 2的正反 转向。设绳索 位移 1mmAD
变化 值 为 P,而 根 据 c, d 的绝 对值 来确 定电位器 1,电 位器 2所要 变化 的
值:
电位 器 1所分 配的数值:
m=|c|*p ( 5.7 )
电位 器 2所分 配的数值:
n=|d|*p ( 5.8 )
画圆子程序:
根据圆的参数方程的计算圆上点的坐标,通过调用画圆程序来实现,画圆程序流程图
如图 4.4 所示。
图 4.4 画圆子程序流程图
/**画圆*********************/
void draw_circularity(float rr,float x0,float y0)
//rr:半径,(x0,y0):圆心坐标
{float L_l,L_r,L_l0,L_r0,inc_Ll,inc_Lr,xx,yy,xxx ;
int count_l,count_r,i ;
L_l0=sqrt((x0+rr+15)*(x0+rr+15)+(115-y0)*(115-y0)) ;//(x0+rr,y0):画圆起点坐标
L_r0=sqrt((95-x0-rr)*(95-x0-rr)+(115-y0)*(115-y0)) ;
for(i=1;i<=360;i++)
{xx=rr*cos(pai*i/180)+x0 ;
xxx=xx;
yy=rr*sin(pai*i/180)+y0 ;
L_l=sqrt((xx+15)*(xx+15)+(115-yy)*(115-yy)) ;