一方案的选择与比较.docx
- 文档编号:24647848
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:12
- 大小:126.04KB
一方案的选择与比较.docx
《一方案的选择与比较.docx》由会员分享,可在线阅读,更多相关《一方案的选择与比较.docx(12页珍藏版)》请在冰豆网上搜索。
一方案的选择与比较
一.方案的选择与比较
1.主体控制方案比较
方案1.闭环数字控制方式
闭环数字控制方式,主要利用光电传感器检测法,结构图如图1所示。
首先单片机根据输入的数据来计算物体要移动的距离并控制物体往坐标的大概方向运动,红外发射接收器来探测悬挂物体移动了多少个1*1cm的小方格,并经过A/D送给单片机,单片机通过特定的算法计算出物体的坐标,并控制电机的转动来控制物体往坐标进发,在此过程中单片机不断计算,不断调整电机的转速和方向使悬挂物体做一定路线的移动。
但其缺点是,电路复杂,不但要求要有A/D电路,光电探测电路,还要其电路要做得十分精确。
任何一个电路设计得不好,也会使物体运动产生很大的偏差。
图1闭环数字控制
方案2.开环数字控制方式
开环数字程序控制方式,即没有反馈系统,开环数字控制的结构图如图2所示。
由图可看出,此种控制方式与上面的控制方式少了反馈电路。
单片机由输入的数据来计算物体要移动的距离,直接发出控制脉冲来控制电机的转动,进而控制物体的运动方向。
由于少了反馈电路,系统的精度只与单片机所采用的算法准确性有关,此种方式电路结构简单,成本低且易于调整和维护,是一种较理想的方式。
图2开环数字控制方式
综合上面所述,考虑时间和调试的复杂性,本设计采用方案2。
2.电机选择
方案1.直流电机。
直流电机又分为直流无刷电机和直流有刷电机,是最早实现调速的电动机,其优点是有良好的线性调速特性,简单的控制性能,高的效率,但其数字控制方面较难把握。
方案2.步进电机。
步进电机是多种机电设备中被广泛应用的一种电机,它主要由定子和转子构成。
定子的主要结构是绕组。
三相、四相、五相步进电机分别有三个、四个、五个绕组,其它以此类推。
绕组按一定的通电顺序工作着,这个通电顺序我们称为步进电机的“相序”。
转子的主要结构是磁性转轴,当定子中的绕组在相序信号作用下,有规律的通电、断电工作时,转子周围就会有一个按此规律变化的电磁场,因此一个按规律变化的电磁力就会作用在因此转子上,使转子发生转动。
它将电脉冲信号转换成角位移,即给一个脉冲信号,步进电动机就转动一个角度,因此非常适合于单片机控制。
另外步进电机还有动态响应快易于起停,易于正反速及变速等优点。
综合上面所述,为易于单片机控制,本设计采用方案2。
3.驱动方式的选择
我们知道步进电动机使用脉冲电源工作。
开关管是按照控制脉冲的规律“开”和“关”,使直流电源以脉冲方式向绕组L供电,这一过程我们称它为步进电动机的驱动。
(1)单电压驱动单电压驱动是指电动机绕组在工作时,只用一个电压电源对绕组供电(如图3所示)。
它的特点是电路简单,一般只用于小功率步进电动机的驱动。
图3单电压驱动原理图图4双电压驱动原理图
(2)双电压驱动双电压驱动是用提高电压的方法使绕组中的电流上升波形变陡(如图4所示)。
它的基本思路是在低频段使用较低的电压驱动,在高频段使用较高的电压驱动。
这种驱动方法在低频段具有单电压驱动的特点,在高频段具有良好的高频性能。
本设计考虑到变压器,因采用了单电压驱动.
4.系统组成
经过方案比较与论证,最终确定的系统组成框图如图5所示.其中单片机用89S52,驱动用1TIP122,驱动用液晶显示.
图5系统控制硬件总框图
二.软件设计
对与一个开环控制系统来说,最重要的就是它的算法的选择,然后就是针对算法的编程.
1.控制算法的比较
方案1.逐点比较直线插补算法
逐点比较法是数控机床中广泛采用的一种软件插补算法,该方法普遍用于二坐标数控加工系统.所谓逐点比较法就是在绘图过程中,绘图笔每移动一步都要与理想线路进行比较,然后决定下一步的移动方向用步步修正的方法画出所期望的线段.逐点比较法的基本原理是斜率比较法.即线段的起点与笔当前的位置构成的直线斜率与要绘线段斜率进行比较.当前者斜率小于后者斜率时,笔应该向Y方向走一步.当前者斜率大于后者斜率时,笔应该向X方向走一步.
如图6所示,OA为欲画的路线,M1为画笔开始所在的位置,当OA的斜率小欲画线段的斜率时,OA向+Y方向移动一步,到达M2点.然后再用线段OM2的斜率与OA的斜率进行比较,当OM2的斜率大欲画线段OA斜率时,OA向+X方向移动一步。
图6逐点比较直线插补算法
方案2.逐点比较圆弧插补算法.
圆弧轨迹插补不同于直线,一段圆弧可能跨越几个象限。
每当一段圆弧跨过象限后,原来的偏差计算、坐标计算式必须进行修改。
在插补过程中每走一步必须检查是否会跨越象限,一旦查到跨越象限,就要根据顺圆或逆圆改进进入该象限的一套计算方法。
传统的过象限处理是采用查表的方法,即用旧的标志字通过查表取得新标志字,替换旧标志字,当再次进行插补时,根据新的标志字进行插补和进给。
查表法处理起来相当麻烦。
符号判别法是根据动点坐标本身位置的变化自动转换运算和判别,自动转入其他象限,改变偏差计算、坐标计算式。
方案2.数学建模法。
数学建模法是指用数学方法,运用几何知识(极坐标)把圆上的点和两个电机所在的位置联系起来,通过相关计算把圆上的点的坐标用数学表达式表示出来,并转换成电机所要转动的偏移量,最后把偏移量转化为电机所要转的速度。
此方法,计算复杂,但所得数据较为准确,只要编程正确,用电机所画出来的线就不会编差大。
上述几种方法我们都尝试编程,但在调试过程中,前两种方法的误差比较大.达不到比赛的要求,最后我们只能采用方案3。
采用方案3的算法相当复杂,而且要经过了无数次调试.
2.程序的总流程
在设计系统的总流程中.比较简单.但在子程序相当复杂.程序总图如图6所示
图6程序的总流程
2.1直线的计算和编程
从图7我们可以看到假设原点坐标X0,Y0,要达到的坐标点X1,Y1
图7直线算法图
那么到坐标点的距离L
L=
我们没有采用Y=KX+B的直线方程,而是把L的长度分为COUNT_L等分
即COUNT_L=
我们计算出每一个增量INC_X,INC_Y
INC_X=
INC_Y=
我们假设一个变量
的范围从1----COUNT_L
所以每走一步的坐标值
XX=
*INC_X+X0
YY=
*INC_Y+Y0
部分程序如下所示:
/**画直线*********************/
voiddraw_line(floatx0,floaty0,floatx1,floaty1)//(x0,y0):
起点坐标,(x0,y0):
停止点坐标
{floatll,inc_x,inc_y,xx,yy,L_l0,L_r0,L_l,L_r,inc_Ll,inc_Lr,xxx;//kk:
斜率cc:
初点始常数(yy=kk*xx+cc)
intcount_ll,count_l,count_r,i//(x0,y0):
画直线起点坐标
ll=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));//ll:
斜边长度
count_ll=ll/0.5+0.5;//count_ll:
步数
inc_x=(x1-x0)/count_ll;//inc_x:
x步长inc_y=(y1-y0)/count_ll;//inc_y:
y步长L_l0=sqrt((x0+15)*(x0+15)+(115-y0)*(115-y0));
L_r0=sqrt((95-x0)*(95-x0)+(115-y0)*(115-y0));
for(i=1;i<=count_ll;i++)
{xx=inc_x*i+x0;xxx=xx;
yy=inc_y*i+y0;
L_l=sqrt((xx+15)*(xx+15)+(115-yy)*(115-yy));
L_r=sqrt((95-xx)*(95-xx)+(115-yy)*(115-yy));
inc_Ll=L_l-L_l0;
inc_Lr=L_r-L_r0;
count_l=inc_Ll/step_l+(inc_Ll>=0?
0.5:
-0.5);//步进电机每步弧长(厘米)
count_r=inc_Lr/step_r+(inc_Lr>=0?
0.5:
-0.5);//右步进电机每步弧长(厘米)
drive_motor(count_l,count_r);
delay(50);//延时50mstest:
x0,y0,x1,y1=10,10,40,40
L_l0=L_l;
L_r0=L_r;
}
}
我们可以看到画直线的程序的复杂性.
2.2圆的的计算和编程
在圆弧的编程中,它的算法比直线的算法更复杂.从图我们可以看到假设圆心坐标X0,Y0,半径为R
圆上的一点坐标为XQ,YQ
XQ=X0+R
YQ=Y0
而我们把圆分成360度,即设一个变量
的范围从1到360,每走一小步的坐标值XX,YY
XX=
YY=
那么它的力臂LL,LR
LL=
LR=
而原点坐标的力臂LL0,LR0
LL0=
LR0=
因此力臂的增量为LL,LR
△LL=LL-LL0
△LR=LR-LR0
因我们的步进不同,所以它的增量分别为0.039,0.078.
最后才计算出要给的脉冲数COUNT_L,COUNT_R
COUNT_L=
COUNT_R=
部分程序程序如下:
/**画圆*********************/
voiddraw_circularity(floatrr,floatx0,floaty0)//rr:
半径,(x0,y0):
圆心坐标
{floatL_l,L_r,L_l0,L_r0,inc_Ll,inc_Lr,xx,yy,xxx;
intcount_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));
L_r=sqrt((95-xx)*(95-xx)+(115-yy)*(115-yy));
inc_Ll=L_l-L_l0;
inc_Lr=L_r-L_r0;
count_l=inc_Ll/step_l+(inc_Ll>=0?
0.5:
-0.5);//左步进电机每步弧长(厘米)
count_r=inc_Lr/step_r+(inc_Lr>=0?
0.5:
-0.5);//右步进电机每步弧长(厘米)
drive_motor(count_l,count_r);
delay(50);//延时50ms
L_l0=L_l;
L_r0=L_r;
}
}
2.3坐标的显示和编程
坐标的显示和编程就是把每走一步走的距离显示在液晶上,通过调用液晶子程序,把变量写入。
三、系统测试
为了确定系统与题目要求的符合程度,我们对系统中的关键部分进行了测试。
位置测试如下:
直线测试表
原点坐标(X,Y)
输入坐标(X,Y)
实际测量距离值
误差值
运行时间
(10cm,10cm)
(40cm,50cm)
(39cm,49.2cm)
0.8cm-2cm
20S
(19cm,24cm)
(34cm,35cm)
(33cm,34.5cm)
1cm-2-cm
2S
圆弧测试表
圆点坐标(X,Y)
实际测量半径值
误差值
运行时间
(40cm,50cm)
23~27cm
+-2cm
150S
发挥部分测试:
直线测试表
原点坐标(X,Y)
输入坐标(X,Y)
实际测量距离值
误差值
运行时间
(10cm,10cm)
(40cm,50cm)
(39cm,49.2cm)
0.8cm-2cm
20S
(19cm,24cm)
(34cm,35cm)
(33cm,34.5cm)
1cm-2-cm
2S
圆测试表
圆点坐标(X,Y)
走一圈显示
误差值
运行时间
(40cm,50cm)
(40cm,49cm)
+-2cm
150S
结论
我们可以看到虽然算法和程序都非常复杂,但它省了很多硬件电路.因为现在提倡”硬件变为软件化”对我们的编程能力有很大的促进。
在本系统设计中,我们完成了全部基本要求,并完成了发挥部分的第一条,对最后还感谢全国电子大赛的举办者和工作人员,谢谢他们为我们提供这样的机会。
参考文献:
[1]王晓明。
电动机的单片机控制。
北京:
北京航空航天大学出版社,2002
[2]黄智伟等。
全国大学生电子设计竞赛训练教程。
北京:
电子工业出版社,2005
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 方案 选择 比较