基于自由摆的平板控制系统的设计报告.docx
- 文档编号:10857162
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:35
- 大小:737.68KB
基于自由摆的平板控制系统的设计报告.docx
《基于自由摆的平板控制系统的设计报告.docx》由会员分享,可在线阅读,更多相关《基于自由摆的平板控制系统的设计报告.docx(35页珍藏版)》请在冰豆网上搜索。
基于自由摆的平板控制系统的设计报告
基于自由摆的平板控制系统
摘要
本系统采用msp430f5438单片机为主控芯片,L298N驱动级来驱动步进电机,利用按键模块实现模式的切换,同时通过精密电位器的测量,实现对步进电机的控制。
在软件中,将自由摆的角度与步进电机的步进数之间建立一个对应关系,采用模糊控制算法和PID控制算法,使步进电机得到更加精确的控制。
关键词:
msp430f5438单片机,步进电机,精密电位器,模糊控制,
PID控制
Abstract
Thesystemusingmsp430f5438MCUasthemasterchip,makingtheuseofL298Ntodrivethesteppermotorandadoptingthekeytorealizethemodelswitchingachievesthecontrolofthesteppermotorbyprecisionpotentiometermeasuring.Inthesoftware,amappingrelationshipisestablishedbetweentheangleoffreependulumandthenumberofstepsofthesteppermotor,besides,thesoftwaremakesfulluseoftheFuzzyControlAlgorithmandPIDControlAlgorithmsothatthesteppermotorcanbemorepreciouslycontrolled.
Keywords:
msp430f5438MCU,steppermotor,precisionpotentiometer,FuzzyControl,PIDControl
一、系统总体设计:
整个系统分为角度测量、控制、驱动三个模块。
首先利用单摆运动时会使精密电位器的电阻发生变化,将变化的电阻转换成电压,然后通过单片机处理使电压信号变成相应的角度变化。
根据这个角度的变化,可以得到步进电机需要的步进数,在加上软件设计的一些算法来控制步进电机转动达到精确定位的要求,使单摆在运动时,平板能够实现平衡以及寻找中心线的功能。
系统框图如图(a)所示:
图(a)系统框图
二、方案论证与选择
1、控制器模块方案
方案一:
采用一般的51单片机,运用比较广泛,有良好的知识作为基础,上手很快。
但是本系统的程序量较大,而且对程序的实时性要求较高,需要较高的处理速度,同时需要的I\O口和资源较多,51单片机难以胜任。
方案二:
系统采用TI公司所生产的MSP430F5438单片机为主控制芯片,有非常丰富的资源,多个8位并行口其中两个有中断功能,内部集成了12位的ADC,强大的定时器,精密的比较器,大容量的RAM和ROM,存储大容量的程序,处理速度可以通过软件来设定。
MSP430F5438单片机的最小系统板可以满足大部分的系统的要求,可以较少系统设计难度,提高系统测量的精度,获得较高的性价比。
基于上述分析,选择方案二。
2、电机模块方案
方案一:
采用直流电机控制平板的运动,直流电机力量大,能获得较大的启动转矩,转动速度快,但由于存在机械触点,直流电机容易产生噪声,干扰电位器的电压采样;单独使用时难以完成精确的角度控制,需要配以编码器才能控制定位,增加了系统的复杂度。
方案二:
采用步进电机控制平板的运动,步进电机没有转轴电压摩擦,没有机械摩擦的电磁噪声;通过给定的脉冲周期,能够使电机在一定范围内以任意速度转动以及急停,角度定位比较精确。
虽然步进电机不能较高速转动,但足以满足本系统对速度的要求。
基于上述理论分析,选择方案二。
3、角度测量模块方案
方案一:
采用精密电位器来测量角度,通过电位器的电阻变化引起的电压变化,然后通过一定的硬件电路及软件设计算法,可以实现角度的测量,优点是制作简单,精度高,线性度好,但缺点是容易产生尖峰电压干扰,使用寿命有一定的限制。
方案二:
采用垂直角度传感器N1000060来测量角度,通过测X和Y轴方向的加速度来确定摆杆偏移的角度,因为测量过程中传感器没有机械承力,性能相对在较长的时间稳定性较好,能够较长时间使用。
但是它需要在程序中进行大量的数据转换,占用较多的CPU,不利于实时控制。
综合考虑各方面的因素,选择方案一。
4、电源模块方案
方案一:
单电源供电。
整个系统都采用同一电源电路,因此电路连接比较简单。
虽然电动机启动瞬间需求电流很大,而且给定脉冲信号驱动的电机电流波动较大,会造成干扰,但是单片机与电机之间有光耦隔离,有效地抑制了干扰,而且系统除电机外其它模块的供电都采用了TI公司性能较好的稳压芯片——TLV1117系列。
进一步减小电机对系统的干扰。
方案二:
双电源供电。
将电机驱动电源(6.5V)和单片机的供电电源(3.3V)完全隔开,这样设计可以彻底消除电机驱动所造成的干扰,但是这样在制作上增加了成本,而且电路连接相对单电源较复杂。
基于上述考虑,所以选择方案一。
三、系统硬件单元电路的设计
1、电机驱动模块的设计
选用L298N驱动步进电机,由单片机给它脉冲控制其驱动电机。
此种方案可以容易控制电机的正反转和它的步距,有利于我们更加精确的控制,同时为了减小电机与单片机的相互影响,在单片机与该芯片之间加了一个光耦隔离,更加优化了该方案。
原理图如图(b)所示。
图(b)电机驱动模块原理图
2、角度测量电路模块
我们的角度测量电路用一个电阻与安装在转轴处的电位器S(WTH118-1A)串联,S的抽头连接至仪表放大器的正输入端。
因为仪表放大器的输入电流可以忽略,则S的抽头处的电压为线性变化。
利用电阻分压得到一个基准电压,连接到仪表放大器的负输入端,仪表放大器做差分放大。
调节负输入端的分压电阻与仪表放大器的RG电阻,可以使摆杆在正负60°的摆动时,输出电压在0到2.3V之间线性变化。
单片机把电压进行AD采样相应的数字量即可对应得出旋转的角度。
具体原理图如图(c)所示
图(c)角度测量电路原理图
四、理论分析与计算
1.建立模型与控制方法
摆杆的最大摆动范围是120°,步进电机的运行模式是8拍,即一步0.9°,把摆杆的角度转换为步进电机的步进数也就是120/0.9≈134,将摆杆的摆动范围用步进数表示,对摆杆的位置测量采用的是高精密电位器,当摆杆在0步的时候,电位器输出Vmin,当摆杆在134步的时候,电位器输出Vmax,将此电压通过软件转化为步进电机的步进数值convert_volt()。
即在0步时convert_volt()=0,在134步使convert_volt()=134。
步进电机每一步之间的定时,通过定时器来确认。
定时器中断时,会将平板的转动位置状态记录在angle_num里。
根据不同模式需要的运动计算出的平板下一次的位置状态记录在motor_num_temp里,则根据它们的差值d_num=motor_num_temp-angle_num来控制电机下次运动时的步进数。
2、算法的分析
由于该系统的运动过程比较复杂,难以建立准确的数学关系,所以主要采用的控制方法是模糊控制算法和PID控制算法。
对于基础部分,通过建立的模型可以计算出一个理论上期望的角度,但是为了精确稳定的控制,我们还需要实时性的知道平板的状态是否发生了改变,即它本身的角度是否发生了偏离,因此在平板附近放置了角度传感器实时测量平板的偏离角度,将这个角度反馈给单片机,在将这个角度通过步进电机补偿给平板。
但是实验表明这仍然很难达到稳定的状态,因此,我们还采用了模糊控制算法,在上面的基础上,通过多次实验,积累一定的经验,进一步对平板进行调整,从而达到稳定的目的。
对于发挥部分,首先,需要算出平板转动的角度和摆杆摆动的角度之间的关系,其等效模型图如图(d)所示:
图(d)运动过程等效模型图
由图可知,角度
和线段
是已知的,
是需要求出的角度。
由几何关系可得出以下几个等式:
然后,根据正弦定理有:
由此可以得出,
同理可以计算出当摆杆摆向左边时,可计算出相应的角度,即
通过数学关系算出角度
后,再通过控制器进行相应的转换,就可以计算出步进电机所需的步进数,同基础部分一样,仍然实时测量平板的偏离角度,将这个角度反馈给单片机进行相应补偿,然后再通过实验,用模糊控制算法,进一步进行微调,使激光笔准确并且稳定的指向标准线。
3.平板状态测量方法
平板采用数学测量与计算的方法测量。
因为激光笔射出的光线是平行与平板的,把地面作为水平状态的参照,测量光线在摆杆在中点处的激光笔光线出口相对地面的高度h1,再测量在1.5M外光线照射的光斑的高度h2。
调节平板,使h1与h2的数值相等,则该平板处于水平状态,记下此时的位置。
因为步进电机每一拍旋转的角度始终为0.9°,则记下所给的脉冲个数,即可计算得到平板相对应的状态。
五、软件设计
主函数首先对系统进行初始化,包括设置I/O口、ADC、定时器等,并通过按键调整平板平衡。
第二步,调用函数——选择模式,用按键选择系统运动模式(共4种),并用按键打开运动标志位使motor_begin=0,同时打开定时器控制电机运动。
第三步,程序不断执行一个循环程序,其中当没有检测到按键按停止键时,一直执行根据不同模式计算运动趋势函数;当检测到按键按停止键后,先停止运动,关闭定时器、LED等,再调用选择模式函数,然后回到计算运动趋势函数,如此循环。
主函数流程图如图(e):
图(e)主函数流程图
六、测试说明
1.测试步骤:
1).准备测试相关工具
序号
仪器名称
数量
1
稳压源
1
2
量角器
1
3
米尺
1
4
硬币
8
2).测试平板随摆杆的摆动而旋转,摆杆摆一个周期,平板转360度
说明:
测试时,摆杆摆动6个周期;
指标
平板角度偏差值是否大于45°
测量次数
起始角度
1
2
3
30°
否
否
否
45°
否
否
否
60°
否
否
否
3).测试当平板负载一个硬币(置于平板的中心位置)时,硬币是否能在5个摆动周期(或5个摆动周期以上)中保持初始状态
说明:
测试时,摆杆摆动6个周期;
指标
硬币偏离中心位置的距离[cm]
测量次数
起始角度
1
2
3
4
5
35°
0.1
0.1
0.1
0.1
0.1
40°
0.2
0.1
0.1
0.2
0.1
4).测试当平板负载8个硬币(叠放状态置于平板的中心位置)时,硬币是否在5个摆动周期(或5个摆动周期以上)中保持初始状态
说明:
测试时,摆杆摆动6个周期;
指标
(硬币从平板上滑落的个数,非叠放状态硬币的个数)
测量次数
起始角度
1
2
3
4
5
6
45°
(2,3)
(0,3)
(0,2)
(0,5)
(0,5)
(0,0)
50°
(0,1)
(1,3)
(2,2)
(1,3)
(0,5)
(0,0)
55°
(1,5)
(0,6)
(1,4)
(1,4)
(2,5)
(1,1)
5).测试激光笔的光斑能否照在靶纸的中心线上
测量次数
1
2
3
起始角度
30°
45°
60°
偏差绝对值(cm)
2
4
3
6).测试摆杆自由摆动时激光笔的光斑能否始终照在靶纸的中心线上
测量次数
1
2
3
起始角度
30°
45°
60°
偏差绝对值(cm)
4
8
10
2.结果分析:
1).硬币滑落原因分析
分两种情况,向平板前滑落和平板后滑落,其中,向平板前滑落有两个原因,一是初始状态步进电机的转角过大;二是步进电机在摆杆启动后,回转时间延时过长。
向平板后滑落也有两个原因,一是初始状态步进电机转角太小;二是步进电机在摆杆启动后,回转时间延时太短。
2).偏差产生原因
偏差的产生也有两方面的原因,一是硬件方面的原因,步进电机的最小步距角为0.9度,而步进电机本身容易抖动,这个抖动带来的平均偏差就是2cm;同时,电位器的线性度不足,导致步进电机的步进数会有误差。
另外就是,软件方面的原因,AD采样延时和程序中其他模块的延时导致不能实时的读取当前摆杆的角度,也造成了步进电机的步进数出现误差,这两方面的原因导致了偏差稍微有点大。
七、结束语
本系统较好的完成了基本部分和发挥部分的要求。
最大特色在于借用精密电位器将摆杆的角度与电压值线性对应起来,通过msp430f5438单片机内部的AD采样并且计算得到的当前摆杆的角度来实现对电机的控制。
但由于时间和条件的限制,未能很好的做到步进电机的步数细分,从而更进一步的提高精度。
通过这次的比赛,积累工程实践的经验,更加深刻的体会到理论联系实际的重要性。
整个系统的原理图,重要的源程序和参考文献在附录中给出。
附录1—系统电路原理图
附录图1主控制器原理图
附录图2电机驱动原理图
附录图3电源模块原理图
附录图4矩阵键盘原理图
附录图5角度测量原理图
附录2—重要的源程序
/*
名称:
逻辑计算
运用I/O:
功能:
输入参数:
输出参数:
说明:
*/
ucharfunction_mode,motor_begin,prepare_sign,back_sign,back_sign2,repeat_n,middle_sign,motor2_sign,reset_lable,mode4_sign;
intd_num,angle_volt_min,dirction_sign;
intreference_min,reference_max,present_num;
doubleangle_volt_max,present_volt,stored_volt,stored_2,middle_volt;
voiddelay_short()
{
uchara;
for(a=0;a<50;a++);
}
voidconvert_volt()
{
present_volt=134*fabs(A0result-reference_min)/fabs(reference_max-reference_min);
}
voidmode4_convert()
{
if(A0result<=middle_volt)
present_volt=67*(A0result-middle_volt)/(reference_max-middle_volt)+67;
elsepresent_volt=67-fabs(67*(A0result-reference_min)/(middle_volt-reference_min));
}
voidkeep_balance()
{
convert_volt();
if((motor_num_temp>=present_volt-21)&&(motor_num_temp<=present_volt-19));
elsemotor_num_temp=present_volt-20;
d_num=motor_num_temp-angle_num;
if(d_num>0)motor_mode=1;//逆时针
if(d_num<0)motor_mode=2;
if(d_num==0)motor_mode=0;
}
voidrepeat_mode1()
{
if(dirction_sign==1)
{
convert_volt();
stored_volt=present_volt;
convert_volt();
if(stored_volt>present_volt)angle_volt_min=present_volt;
if(present_volt>angle_volt_min+0.7)dirction_sign=0;
if(present_volt<=67)
motor_num_temp=467+200*repeat_n;
}
if(dirction_sign==0)//摆回
{
convert_volt();
stored_volt=present_volt;
convert_volt();
if(stored_volt if(present_volt<(angle_volt_max-0.7)) { dirction_sign=1; stored_2=angle_volt_max; repeat_n++; } if(present_volt>=67) motor_num_temp=667+200*repeat_n; } } voidget_data()//这是平板的目标步数 { doubleaa,bb,cc,dd,ee,ff; intgg; uchartemper; switch(function_mode) { case1: { ta1_num=38000;//speed if(prepare_sign==0) { while(P1IN&0X01==0X01); key_delay(); while(P1IN&0X01==0X01); P9OUT|=0X08; temper=P1IN&0X01; while(temper==0X00) { temper=P1IN&0X01; } key_delay(); temper=P1IN&0X01; while(temper==0X00) { temper=P1IN&0X01; } prepare_sign=1; dirction_sign=1;//逆时针 } else { convert_volt(); if(present_volt<65&&dirction_sign==1) { motor_num_temp=67+200*repeat_n; dirction_sign=0; repeat_n++; } if(present_volt>69&&dirction_sign==0) { motor_num_temp=67+200*repeat_n; dirction_sign=1; repeat_n++; } } } break; case2: { ta1_num=50000; if(prepare_sign==0) { keep_balance(); while(P1IN&0X01==0X01) { keep_balance(); } key_delay(); while(P1IN&0X01==0X01) { keep_balance(); } P9OUT|=0X08; temper=P1IN&0X01; while(temper==0X00) { //keep_balance(); temper=P1IN&0X01; } key_delay(); key_delay(); temper=P1IN&0X01; while(temper==0X00) { //keep_balance(); temper=P1IN&0X01; } prepare_sign=1; dirction_sign=1;//逆时针 } if(prepare_sign==1) { ta1_num=50000;//speed if(back_sign! =1)motor_num_temp=67; if(angle_num==67) { for(uchara=0;a<5;a++) for(ucharb=0;b<10;b++) delay_short(); ta1_num=60000;//speed motor_num_temp=67; back_sign=1; } //motor_num_temp=67; } } break; case3: { if(prepare_sign==0) { keep_balance(); while(P1IN&0X01==0X01) { keep_balance(); } key_delay(); while(P1IN&0X01==0X01) { keep_balance(); } P9OUT|=0X08; temper=P1IN&0X01; while(temper==0X00) { //keep_balance(); temper=P1IN&0X01; } key_delay(); key_delay(); temper=P1IN&0X01; while(temper==0X00) { //keep_balance(); temper=P1IN&0X01; } prepare_sign=1; dirction_sign=1;//逆时针 } if(prepare_sign==1) { ta1_num=15000;//speed if(back_sign! =1)motor_num_temp=20; if(angle_num==20) { for(uchara=0;a<5;a++) for(ucharb=0;b<3;b++) delay_short(); ta1_num=40000;//speed motor_num_temp=67; back_sign=1; } /* if(back_sign==1&&angle_num==45) { for(uchara=0;a<1;a++) for(ucharb=0;b<5;b++) delay_short(); ta1_num=60000;//speed motor_num_temp=67; back_sign=1; } */ //motor_num_temp=67; } } break; case4: { doubletemp_aa; temp_aa=A0result; if(A0result<=1770) { temp_aa=fabs(temp_aa-1770)*0.04615385;//实际测试平均值 motor_num_temp=67+temp_aa; } else { temp_aa=fabs(temp_aa-1770)*0.02991027; motor_num_temp=67-temp_aa; } /*//理论分析值 for(uchartemp_num=0;temp_num<54;temp_num++) { if((A0result<=array[temp_num])&&A0result>array[temp_num+1]) { motor_num_temp=67+temp_num; break; } } if
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 自由 平板 控制系统 设计 报告