简易风洞模拟控制系统报告.docx
《简易风洞模拟控制系统报告.docx》由会员分享,可在线阅读,更多相关《简易风洞模拟控制系统报告.docx(25页珍藏版)》请在冰豆网上搜索。
![简易风洞模拟控制系统报告.docx](https://file1.bdocx.com/fileroot1/2023-4/17/60f33dbb-4ba0-471a-a14c-08b2511326ee/60f33dbb-4ba0-471a-a14c-08b2511326ee1.gif)
简易风洞模拟控制系统报告
简易风洞模拟控制系统
组员:
高明达田新兴阚亚进
摘要
本帆板控制系统由单片机ATMEGA328作为帆板转角的检测和控制核心,实现按键对风扇转速的控制、调节风力的大小、改变帆板转角θ、液晶显示等功能。
引导方式采用角度传感器感知与帆板受风力大小的转角θ的导引线。
通过PWM波控制电机风扇风力的大小使其改变帆板摆动的角度θ。
风扇控制核心采用L298电机驱动模块,用ATMEGA328单片机为控制核心,产生占空比受数字PID算法控制的PWM脉冲,实现对直流电机转速的控制,同时利用光电传感器将电机速度转化成脉冲频率反馈到单片机中,实现转速闭环控制,达到转速无静差调节的目的。
MMA7455三轴加速传感器把角度输出信号传送给ATMEGA328单片机进行处理。
关键词:
ATMEGA328,MMA7455,PWM波,PID算法
Summary
ThesystemusesMSP430F149SCMasthecorecontrolsystem;tosteppermotorcontrolflatturns,brokendownbydriveenhancedsteppermotorprecision;MMA7361anglesensorchipmodule,acquisitionoffreedompendulumdisplacementangleand12,864LCDdisplay;controlledbyphotoelectricsensorplatewhereyoustopped,Flattiltanglehappenstomeetflatforceoncoin(supportingforceandfrictionforce)happentoprovidethecomponentsofthecoinhorizontallyintransverseaccelerationforcerequired;electromagnetsareusedtoautomaticallyfreeupswing.Accordingtothefootofthestepmotor(1.8°/STEP),precisecontrolofsteppingmotorrotationcorrespondingsteps.Thesystemlayoutisreasonable,theoreticalpossible,actuallyrunmoresmoothly,highcontrolprecision,meetstherequirementsoftopicsessentialparts.
Keywords:
freedompendulum.anglemeasurement.divided.drivingbalancecontrol
目录
一、系统方案2
1.1方案选择与对比2
1.1.1角度测量方案2
1.1.2驱动电机方案2
1.2系统结构2
二、系统理论分析与计算3
2.1平板转一周的控制原理分析3
2.2硬币不滑落控制原理分析4
三、硬件模块设计与分析4
3.1控制电路4
3.2角度测量电路5
3.3步进电机及驱动电路5
3.4控制按键及模式转换电路6
3.5光电传感电路6
3.6显示电路7
四、软件程序设计7
4.1系统主流程图7
4.2各模块程序流程图8
五测量方案与测试结果9
5.1测量方案9
5.1.1基本要求功能测试9
5.2测试结果及分析9
实验总结10
参考文献11
附件一:
电路原理图12
附件二:
主要器件清单12
附件三:
源程序13
一、系统方案
1.1方案选择与对比
1.1.1电源的设计方案论证与选择
系统需要多个电源,ATMEGA328、L298、MMA7455都使用5V的稳压电源,电机驱动需要24V电压。
方案一、采用LM2596开关电压调节器,能够输出3A的输出电流,同时具有很好的线性和负载调节特性,固定输出3.3V、5V、12V经过调整可输出小于37V的电压。
方案二、采用升压型稳压电路。
用两片MC34063芯片分别将3V的电池电压进行直流斩波调压,得到5V和12V的稳压输出。
只需使用两节电池,既节省了电池,又减小了系统体积重量,但该电路供电电流小,供电时间短,无法是相对庞大的系统稳定运作。
方案三、采用三端稳压集成7805与7824分别得到5V与24V的稳压电压。
利用该方法方便简单,工作稳定可靠。
综上所述,选择方案三,采用三端稳压电路。
1.1.2角度传感器的设计方案论证与选择
方案一、采用WDS35D4精密导电塑料角位移传感器,利用该传感器的输入端加上一个直流电压,在输出端得到一个直流电压信号,把角度位移的机械位移量转化成电压信号,用输出电压进行角度位移的控制。
用此传感器只要测量导轨电阻两端的直流电压,不同的角度有不同的电阻值,通过电阻来算出角度,计算不方便。
电刷在导轨上移动获得输出,数值越小,精度越高。
该传感器的优点:
对环境条件要求低,线性精度高、分辨率高、动态的噪声小等优点,由于该传感器的各项精度都比较精细使其价格过高。
方案二、采用电位器进行调角:
帆板转动时电位器跟着转动,电压随之发生变化,通过电压的值转换成角度值。
但扭力过大,而且精度也不高。
方案三、采用MMA7455三轴加速度传感器,利用物体运动和方向改变输出信号的电压值,把检测到的信号传送给ATMEGA328的AD转化器进行转化与读取此输出信号。
通过不同的角度,X、Y、Z三个方向的加速度输出不同,将电容值的变化转化为电压值,电容值的计算公式是:
C=Ae/D,其中A是极板的面积,D是极板间的距离,e是电介质常数,再用反正弦函数把角度算出来,计算比较方便。
该传感器的优点:
线性精度高、体积小、工作可靠、标识清晰、扩展性好等优点。
综上所述,选择方案三,用MMA7455三轴加速传感器。
1.1.3显示方式的选择
方案一、采用LED数码管显示。
使用数码管动态显示,由于显示的内容较少,给人的视觉冲击不怎么的舒适,具有亮度高、工作电压低功耗小、易于集成、驱动简单等优点。
但在此次设计中需要设定的参数种类多,使用LED数码管不能完成设计任务,不宜采用。
方案二、采用字符型LCD显示。
可以显示英文及数字,利用程序去驱动液晶显示模块,设计简单,且界面美观舒适,耗电小。
综上所述,选择方案二,用字符型LCD进行显示。
1.1.4帆板的设计方案论证与选择
方案一、采用电路板作为帆板。
根据设计需要的要求,电路板需做成宽:
10cm,长:
15cm;在所拥有的风扇下采取电路板作为帆板,很难满足设计所需达到的角度。
考虑风力的大小和自身重力,不宜采用。
方案二、采用泡沫作为帆板。
泡沫的体积太轻,很容易满足设计所需要的角度,缺点:
泡沫的稳定性不高,干扰成分太多。
考虑不稳定性的因素太多此方案不宜采用。
方案三、采用铝板作为帆板。
经过多次实验:
铝板可以作为帆板使用,能过达到设计所需要的要求,而且铝板的稳定性比较好,抗干扰能力强,受干扰的成分比较小。
综上所述,选择方案三,用铝板作为帆板使用。
1.2系统结构
经过方案比较与论证,最终确定的系统组成框图如图1.1.1所示。
其中的集成电路ATMEGA328单片机驱动液晶显示模块、控制电机驱动改变风扇风力的大小从而改变帆板的角度,角度传感器把接收到的输出信号传送给ATMEGA328单片机进行处理再更新显示。
系统框图如图:
图1:
系统框图
二、系统理论分析与计算
PID算法:
由于单片机的处理速度和RAM资源的限制,一般不采用浮点数运算,而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余数补偿。
遇限消弱积分:
一旦控制变量进入饱和区,将只执行削弱积分项的运算而停止进行增大积分项的运算。
具体地说,在计算Ui时,将判断上一个时刻的控制量Ui-1是否已经超出限制范围,如果已经超出,那么将根据偏差的符号,判断系统是否在超调区域,由此决定是否将相应偏差计入积分项积分分离法:
在基本PID控制中,当有较大幅度的扰动或大幅度改变给定值时,由于此时有较大的偏差,以及系统有惯性和滞后,故在积分项的作用下,往往会产生较大的超调量和长时间的波动。
特别是对于温度、成份等变化缓慢的过程,这一现象将更严重。
为此可以采用积分分离措施,即偏差较大的时,取消积分作用;当偏差较小时才将积分作用投入。
离散化公式:
Δu(t)=q0e(t)+q1e(t-1)+q2e(t-2)
当|e(t)|≤β时
q0=Kp(1+T/Ti+Td/T)
q1=-Kp(1+2Td/T)
q2=KpTd/T
当|e(t)|>β时
q0=Kp(1+Td/T)
q1=-Kp(1+2Td/T)
q2=KpTd/T
u(t)=u(t-1)+Δu(t)
微分控制对系统性能的影响:
微分作用可以改善动态特性,Td偏大时,超调量较大,调节时间较短。
Td偏小时,超调量也较大,调节时间也较长。
只有Td合适,才能使超调量较小,减短调节时间。
由于快速傅立叶变换FFT算法设计大量的浮点运算,由于一个浮点占用四个字节,所以要占用大量的内存,同时浮点运算时间很慢,所以采用普通的8位MCU一般难以在一定的时间内完成运算,所以综合内存的大小以及运算速度,采用32位的单片机ATMEGA328,它拥有较大的RAM,并且时钟频率高达16M,所以对于浮点运算不论是在速度上还是在内存上都能够很快的处理。
三、硬件模块设计与分析
3.1风扇控制电路
风扇控制电路主要是由ATMEGA328、L298电机驱动模块组成。
L298电机驱动模块主要由放大电路、OPAMP运算放大电路、电机驱动组成。
用电阻和电容组成高通滤波电路,用单片机控制达林顿管使之工作在开关状态,通过调整输入脉冲的占空比,调整电机转速。
用L298驱动两台直流减速电机的电路引脚A,B分别用PWM控制。
如果电机运动则可将IN1,IN2和IN3,IN4两对引脚分别接高低电平,仅用单片机的两个端口给出PWM信号控制A,B即可。
特点:
工作电压高,可以达到46V;输出电流大,瞬间峰值可达3A,持续工作电流2A;额定功率25W。
当步进电机发一个控制脉冲,它就转一步,再发一个脉冲,它会再转一步,两个脉冲的间隔越短,步进电机就转的越快。
调整单片机发出的脉冲频率,就可以对步进电机进行调速,从而控制了风扇的风力的大小。
L298电机驱动的特点:
可以实现电机正反转及调速、启动转矩大。
图:
3.2角度测量电路
MMA7455三轴加速传感器是检测物体运动和方向的传感器,它根据帆板运动和方向改变输出信号的电压值。
当帆板受到风扇风力运动时,三轴加速传感器检测到帆板运动的输出信号,把该输出的电压值用三角函数数出来在把结果送往ATMEGA328单片机进行处理,通过按键控制与液晶显示屏进行显示。
MMA7455三轴加速传感器如图:
图3:
加速度传感器原理图
3.4控制按键及模式转换电路
系统利用模式转换开关实现工作状态的切换,并设置了相关按键,分别实现电源、启动等控制。
3.5光电传感电路
我们在摆杆和平板垂直的位置加上了一个ST188的光电传感器,减少由于角度传感的延时和误差导致平板和摆杆垂直的时间和角度,更好的让摆杆和平板达到垂直位置。
电路原理图如下:
图5:
光电传感器原理图
3.6显示电路
我们通过液晶12864ST7920连接到单片机显示角度的变化。
电路原理与如下:
图6:
液晶显示电路原理图
四、软件程序设计
4.1系统主流程图
图7:
系统主流程图
我们用按键来实现多个子程序的转换,使总程序逻辑更加清楚。
总程序附表三给出。
4.2各模块程序流程图
图8:
应用一程序流程图图9:
应用二的程序流程图
五测量方案与测试结果
5.1测量方案
5.1.1基本要求功能测试
1、平板旋转一周控制测试方法及测试数据
在摆杆上对应平板的位置贴上角度标尺,方便观察平板旋转角度。
系统测量的摆杆角度实时在液晶上显示,在摆杆的后方平行位置放一量角尺,先将摆杆拉至一定角度,对比液晶上显示的角度值,经多次实验,证明液晶上显示的角度值可以用来作为实际值,进行后面的测试。
摆杆垂直静止时,手动调整平板使其水平,然后将摆杆推至一定角度,启动系统并放开摆杆让其自由摆动。
软件检测到摆杆摆动一个周期时,控制步进电机停止转动,系统停止工作,摆杆回到垂直静止时观察平板倾斜角度,从而得到摆杆摆一个周期时平板旋转一周的误差。
同理控制摆杆摆动2~6个周期时,分别观察平板的旋转误差。
2、硬币不滑落控制测试方法及测试数据
将摆杆拉至一定角度,调整平板角度,在平板中心稳定放置一枚1元硬件,启动后放开摆杆让其自由摆动。
6个摆动周期后停止系统运行,用直尺测量硬币偏移距离并记录。
改变摆杆摆动时的初始角度。
同理在平板中心稳定放置8枚1元硬件,分角度进行8次实验。
5.2测试结果及分析
表1:
平板旋转控制测试数据
摆动初始
角度(°)
摆动周期数
(周)
平板旋转
误差(°)
摆动初始
角度(°)
摆动周期数
(周)
平板旋转
误差(°)
15
1
4
45
1
3
15
2
7
45
2
8
15
3
11
45
3
12
15
4
15
45
4
15
15
5
18
45
5
19
30
1
5
50
1
4
30
2
7
50
2
7
30
3
12
50
3
12
30
4
15
50
4
15
30
5
19
50
5
19
40
1
4
60
1
4
40
2
7
60
2
7
40
3
11
60
3
11
40
4
16
60
4
16
40
5
19
60
5
20
表2:
一枚硬币滑离中心的数据
次数
1
2
3
4
5
6
7
8
角度
30°
33°
35°
39°
40°
41°
43°
45°
滑动距离(cm)
0.3
0.3
0.4
0.5
0.6
0.6
0.7
0.8
误差分析:
由实验测试结果可以看出,当摆杆起始角度由30°到45°逐渐增大时,硬币滑离中心位置的距离越大(在实验允许的误差之内),这符合理论分析的结果且符合实际生活规律,达到了预期的实验效果。
表3:
8枚硬币滑离中心和掉落的数据
次数
1
2
3
4
5
6
7
8
角度
45°
48°
49°
52°
53°
56°
57°
60°
滑动距离(cm)
0.3
0.4
0.5
1.2
0.6
0.8
2.8
1.0
跌落数目
2
0
0
1
0
0
1
2
误差分析:
由实验测试结果可以看出,当摆杆起始角度由45°到60°逐渐增大时,最底层硬币滑离中心位置的距离越大,当硬币发生跌落时,相应的最底层硬币滑离中心位置的距离也很大,这一结果符合理论分析的结果。
实验总结
通过这次设计的经历,我们团队有了更深的配合和默契,在设计过程中,我们遇到一个一个的困难,通过一次的学习和讨论,我们克服了很多问题,在电路设计、软件调试及机械组装等方面得到了很好的锻炼,提高了独立思考、自学知识等多方面的能力,更意识到团队合作和理论实践结合的重要性,受益匪浅!
虽然其中很多处理方式并不是的很好,导致一些稍大的误差,但是整体上我们完成了对题目的要求。
在这次设计中,我们对MSP430单片机的应用和编程有了进一步的认识,对步进电机和传感器的应用得到了很大的加强。
同时,我们认识到我们在发挥部分的精确控制方面有很大的欠缺,希望在今后的日子加强对这方面的学习和应用。
参考文献
[1]魏惠军、朱烔明.大角度单摆的周期J.上海师范大学学报.2004年第33卷(103—105)
[2]张福才.MSP430单片机自学笔记.北京航空航天大学出版社.2011年2月
[3]赵燕著.传感器原理及应用.北京大学出版社.2010年2月。
[4]坂本正文(日)著,王自强译.步进电机应用技术.科学出版社.2010年5月
[5]全国大学生电子设计竞赛组委会.全国大学生电子设计竞赛获奖作品选编[M].北京:
北京理工大学出版社,2007.
附件一:
电路原理图
附件二:
主要器件清单
序号
原件名称,型号和规格
数量
备注
1
MS430149单片机
1
系统控制
2
42HS3404A4步进电机
1
转动平板
3
DM542细分驱动器
1
驱动步进电机
4
ST188光电传感器
1
判断摆与平板的垂直
5
MMA7391加速度传感器
1
角度测量
6
12864ST7920液晶显示屏
1
显示角度
7
电阻
若干
8
电容
若干
附件三:
源程序
#include
#include"12864.h"
#include"delay.h"
#include"adc.h"
#include"Init_Clk.h"
#include"l298.h"
#include
longintsuma=0,sumb=0,sumc=0,base,degree,base2,t=0;
unsignedinti=0,j=0,p,k;
doublem,m1,T;
unsignedcharft[]={0x01,0x02,0x04,0x08,0x01,0x02,0x04,0x08};
unsignedcharbk[]={0x08,0x04,0x02,0x01};
voidmain()
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR=0XFF;P1OUT=0XFF;
P2DIR=0XFF;P2OUT=0XFF;
P3DIR=0XFF;P3OUT=0XFE;
P4DIR=0XFF;P4OUT=0XFF;
P5DIR=0XFF;P5OUT=0XFF;
P6DIR=0XFF;P6OUT=0XFF;
Init_Clk();
adc_4ch();
Init_Lcd();
P4DIR=0XFC;
P1DIR=0Xf0;
while
(1)
{
if((P1IN&BIT0)==0){k=0;break;}
if((P1IN&BIT1)==0){k=1;break;}
}
if(k==0)
{
Disp_4num(0x80,0000);
while
(1)
{
if((P4IN&BIT1)==0)
break;
}
Disp_4num(0x80,1111);
for(p=10;p>0;p--)
{
/*P2OUT=P2OUT|0x02;
Delay_Nus(8);
P2OUT=P2OUT&0xfd;
Delay_Nus(8);
*/
P2OUT=0xf2;
//Delay_Nus(80);
Delay_Nms(25);
P2OUT=0xf0;
Delay_Nms(25);
}
P3OUT=P3OUT|BIT0;
while
(1)
{
//Disp_4num(0x80,2222);
P2OUT=0xf2;
Delay_Nms(25);
P2OUT=0xf0;
Delay_Nms(25);
if((P4IN&BIT0)==0)break;
}
//while
(1)
//Disp_4num(0x80,2222);
for(p=2;p>0;p--)
{
P2OUT=0xf2;
Delay_Nms(25);
P2OUT=0xf0;
Delay_Nms(25);
}
while
(1)
Disp_4num(0x80,3333);
}
else
{
while
(1)
{
ADC12CTL0|=ADC12SC;
_BIS_SR(CPUOFF+GIE);
}
}
/*while
(1)
{
Disp_4num(0x80,1111);
for(i=0;i<4;i++)
{
P2OUT=ft[i];
Delay_Nms(50);
if((P4IN&BIT0)==0)break;
}
if((P4IN&BIT0)==0)break;
}
if(i==3){i=1;P2OUT=ft[i];}
elseP2OUT=ft[i++];
if(i==3){i=1;P2OUT=ft[i];}
elseP2OUT=ft[i++];
while
(1)
{
Disp_4num(0x80,2222);
}
*/
//ADC12CTL0|=ADC12SC;
/*while
(1)
{
ADC12CTL0|=ADC12SC;//Samplingopen启动转换
//if(fabs(base-degree)>5)break;
while
(1)
{
//if(degree>20)break;
_BIS_SR(CPUOFF+GIE);
}
break;
//_BIS_SR(CPUOFF+GIE);//LPM0,ADC12_ISRwillforceexit进入低功耗等待中断模式
}
*/
//if(m<0)
//{
/*Write_Cmd(0x01);
Disp_4num(0x80,1111);
while
(1)
{
for(i=0;i<4;i++)
{
P2OUT=ft[i];
Delay_Nms(100);
if((P4IN&BIT0)==0)break;
}
if((P4IN&BIT0)==0)break;
}*/
//}
/*else
{
while
(1)
{
for(i=0;i<4;i++)
{
P2OUT=bk[i];
Delay_Nms(100);
if((P4IN&BIT0)==0)break;
}
if((P4IN&BIT0)==0)break;
}
while
(1);
}*/
}
//ADC12interruptserviceroutine
#pragmavector=ADC_VECTOR
__interruptvoidADC12_ISR(void)
{
longinta,b,c,d,y,z,q;
doubledegree_