基于MSP430的悬挂控制系统报告Word文档下载推荐.docx
《基于MSP430的悬挂控制系统报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于MSP430的悬挂控制系统报告Word文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
物体的形状不限,质量大于100克。
物体上固定有浅色画笔,以便运动时能在板上画出运动轨迹。
板上标有间距为1cm的浅色坐标线(不同于画笔颜色),左下角为直角坐标原点。
二要求
(1)控制系统能够通过键盘或其他方式任意设定坐标点参数;
(2)控制物体在80cm×
100cm的范围内作自行设定的运动,运动轨迹长度不小于100cm,物体在运动时能够在板上画出运动轨迹,限300秒内完成;
(3)控制物体作圆心可任意设定、直径为50cm的圆周运动,限300秒内完成;
(4)物体从左下角坐标原点出发,在150秒内到达设定的一个坐标点(两点间直线距离不小于40cm)。
3课程设计报告内容
3.1.1电机的选择
方案一:
使用直流电机驱动画笔。
直流电机能实现连续运转,只要型号选择合适,其驱动能力足以使画笔在限定的时间内画出足够长的线。
但直流电机运行时的惯性比较大,不同的运行方式进行切换时,延时较长,画出的图形不能满足题目要求。
方案二:
选用步进电机。
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。
在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响;
而且步进电机只有周期性的误差而无累积误差,因而用步进电机来控制位置比用直流电机简单,故采用此方案,使用两相四线式步进电机。
3.1.2传感器的选择
可见发光二极管与光敏二极管组成的发射-接收电路。
这种方案的缺点在于其他环境光源会对光敏二极管的工作产生很大干扰,一旦外界光照条件改变,就很可能造成误判和漏判:
虽然采取超高亮发光管可以降低一定的干扰,但这又将增加额外的功耗。
采用反射式红外发射—接收器。
由于采用红外管代替普通可见光管,可以降低环境光源干扰。
一般光源红外线频段能量较弱,对红外传感器的干扰较小,且红外线波长大,近距离衰减小,因此用红外传感器探测近距离黑线更加可靠。
因此采用此方法。
3.1.3直线算法的选择
采用Bresenham画直线算法,用一段连续线段逼近直线。
根据起点和终点计算出直线的斜率,在根据程序中设置的最小△x得出△y,结合起点得出下一点的位置(x’,y’),一次类推,就可画出一整条直线。
但是Bresenham算法速度慢。
采用DDA画直线算法,求出坐标起点和终点距离差值,把距离进行N等分,再分别求出x方向和y方向的增量,此增量就是步进电机每次走的长度。
此方法速度快,精度高,故采用此方法。
3.1.4画圆算法的选择
采用Bresenham画直线算法,先用类似Bresenham画直线算法画出1/8圆,并把每个点的坐标存起来,在根据对称性,调整坐标的顺序,就能画出剩下的圆。
缺点是此方法画出的圆不是很圆,需要进行补偿。
采用查表法,先用matlab生成相应的圆坐标,再用查表法查出电机要走的每个点的坐标,这种方法简单可行,画出的圆也比较圆滑。
3.1.5画笔的控制
我们使用直线舵机来控制画笔的伸缩,这样能更好的控制画笔,能够自由发挥,画出更多的图形。
3.1.6方案的确定
图1系统方案图
经过上述的比较,我们选择MSP430F1611单片机作为系统控制器;
利用键盘设置点的坐标;
使用LCD12864显示运动方式、设置的坐标值及计时的时间;
采用L297_L298芯片混合式步进电机驱动器;
使用直线舵机来控制画笔的伸缩。
3.2系统软件介绍
3.2.1软件流程图
图2软件流程图
3.2.2坐标点参数的计算
将画笔的位置定为整个物体的中心位置,设定物体位置的初值坐标为(X,Y),当前电机A的长度L1=,当前电机B的长度L2=,根据电机收放线,计算出电机长度的改变量change,再由电机转动一步所对应走线的长度(其值为0.077cm),求出电机走微小步时需要时钟脉冲的个数(即为步数)pulse=(int)(change/0.03+0.5);
(四舍五入后取整)。
3.2.3直线的计算
从图7我们可以看到假设原点坐标X0,Y0,要达到的坐标点X1,Y1
图3直线算法图
那么到坐标点的距离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
3.3系统单元电路设计
3.3.1红外传感器连接电路
图4红外传感器连接电路
此电路简单可行,干扰小,检测效果好。
3.3.2步进电机驱动电路
图5步进电机驱动电路
用L297_L298芯片作为步进电机的驱动,其转速可调、抗干扰能力强、具有续流保护和过电流保护、可控制两相步进电机,电机电压直流5V~30V(12V最佳)。
3.3.3画笔设计
用八个传感器,形成一个八边形以细化物体运动方向,能更好的检测黑色曲线,不至于跑出黑线。
3.4系统软、硬调试过程
3.4.1画直线功能测试
序号
1
2
3
设置终点(cm)
(40,40)
(60,30)
(30,60)
LCD显示
测量值(cm)
(40,40.2)
(59.8,29.7)
(30,59.8)
时间(S)
13
17
18
3.4.2画圆功能测试
设置圆心(cm)
(40,50)
(40,30)
(40.2,50.3)
(39.8,28,7)
(40,39.8)
47
43
45
3.4.3循迹功能测试
能按照预定坐标到达循迹点,画笔能根据检测到的黑线运动,并且误差很小,在断点的地方也能正常运动,耗时短。
3.4.4自由运动功能测试
我们设计的图形是写信工两个字和画五角星,画笔能按照我们设计的轨迹收放、画图,画出的图形也比较完整。
4总结
此次题目初拿到手中时感觉有些棘手,因为相较之前的循迹小车而言,悬挂系统所用到的步进电机以及算法都要难上一个档次。
我们在做好驱动电路后便马上开始了调试工作,可是在直线行走时始终走不到目标地点。
在检查程序无误后我们对两个电机进行单独检查,发现左边电机需要1000拍左右才能转一圈,而右边是正常的800。
于是我们据此对程序进行了修改,将误差缩小到了5cm以内。
但还是不能达到要求。
再经过我们仔细检查,发现左边的电机转圈过多是由于细绳不在滑轮上而产生了较大摩擦力造成,发现这一点后,我们终于使滑块走出比较精确的直线,误差控制在1cm以内。
另外通过这次的制作,可以知道我们的硬件制作的工作量不大,作为一个写程序的人员,我认识到一个好的算法可以省去大量的硬件设备,同时,我也认识到了自己在编程方面还有着很多需要学习的地方,在今后的学习中,我会更加努力,争取在今年胡省赛中能取得一个好的成绩。
这次实验感谢李川香老师以及何为老师的指导,从实验中,无论在硬件设计还是软件编程,我们都收获了丰富的实践经验,为知识的应用与扩展打下了坚实基础。
参考文献
[1]童诗白,华成英.模拟电子基础.高等教育出版社.2012.
[2]谢自美.电子线路设计·
实验·
测试.武汉:
华中科技大学出版社.2012.
[4]沈建华,杨艳琴.MSP430系列超低功耗单片机原理与实践.北京:
航空航天大学出版社.2012.
[5]曹磊.MSP430单片机C程序设计与实践.北京:
航空航天大学出版社.2012.
附录系统完整程序
函数主程序:
#include"
math.h"
#include"
General.h"
unsignedchartable[8]={0X04,0x14,0x10,0x12,0x02,0x0a,0x08,0x0c};
voidinit(void);
voiddraw_line1(floatx0,floaty0,floatx1,floaty1);
voiddraw(floatx0,floaty0,floatx1,floaty1);
voiddraw_cycle(floatr,floatx0,floaty0);
voidmotor_step(floatlx,floatly);
voidleft_1(unsignedintcount);
voidleft_0(unsignedintcount);
voidright_1(unsignedintcount);
voidright_0(unsignedintcount);
externfloatzx,zy,ox,oy,qx,qy;
floatrx,lx;
floatlength_r=0.117,length_l=0.117,pai=3.14159;
intdir_l,dir_r;
intmain(void)
{
//Stopwatchdogtimertopreventtimeoutreset
WDTCTL=WDTPW+WDTHOLD;
init();
Init_Port1();
Init_Lcd_12864();
set_up();
Display_now_lcd12864();
draw_cycle(10,ox,oy);
//画圆,按键设定圆心与半径
//draw(qx,qy,zx,zy);
//画线,按键设定起点与终点
//draw(25.0,50.0,40.0,10.0);
//draw(40.0,10.0,10.0,40.0);
//draw(10.0,40.0,40.0,40.0);
//draw(40.0,40.0,10.0,10.0);
}
voidinit(void)
chari=0;
BCSCTL1&
=~XT2OFF;
//开启XT2