电赛论文最终.docx
- 文档编号:25651772
- 上传时间:2023-06-11
- 格式:DOCX
- 页数:22
- 大小:39.10KB
电赛论文最终.docx
《电赛论文最终.docx》由会员分享,可在线阅读,更多相关《电赛论文最终.docx(22页珍藏版)》请在冰豆网上搜索。
电赛论文最终
帆板控制系统设计(F题)
摘要:
本系统以单片机STC12C5A48S2为控制核心及数据处理核心,采用加速度传感器MMA7260作为角度检测的核心器件,设计并制作了一个帆板控制系统。
以L293构成电机的电路,通过对风扇转角的控制,调节风力的大小,改变帆板的转角
。
可以通过键盘设置帆板转角0~60o,并在LCD上实时显示
。
使用了PID算法,使系统能快速达到稳定。
由于采用了低功耗单片机,并且使用了一些高性价比、低功耗的器件去设计电路,因此本放大器具有成本低,功耗小,性价比高的优点。
关键词:
控制系统;角速度传感器;单片机;PID;
一、方案比较与选择
题目分析:
综合分析题目要求,转动帆板时,实现实时显示角度,且能够通过键盘控制风力,是本题的最大难点,也是设计的重点之一。
另一难点是使帆板转角达到60o。
要得到更好的性能指标,放大电路的零点漂移也是一个很难解决的问题。
此外,在整个电路的设计中,要考虑其成本。
1、数据处理和控制核心选择
方案一:
采用DSP最小系统板。
即由DSP来实现电机的控制、传感器信号采集和人机界面控制等功能。
方案二:
采用单片机STC12C5A48S2最小系统板。
即由单片机STC12C5A48S2实现整个系统的统一控制和数据处理。
本系统不涉及大量的数据存储和复杂处理,虽然方案一控制更灵活更方便,但DSP的资源得不到充分利用,且系统规模大,成本高。
而单片机STC12C5A48S2是一种8位低功耗微、高性能处理器,具有丰富的片上外设和较强的运算能力,且可串口编程,使用十分方便,性价比高。
综上所述,故采用方案二。
2、角度传感器的比较与选择
方案一:
角度传感器KMZ41与信号调理芯片UZZ9001组成的角度采集模块。
KMZ41与信号调理芯片UZZ9001一起,能够对180°范围内的角度信号进行测量,并利用SPI方式提供11位的角度信号输出。
调试繁琐,且电路稳定性差。
方案二:
采用MMA7260三轴加速度传感器。
这个三轴加速度计用的是Freescale(飞思卡尔)公司生产性价比高微型电容式加速度传感器MMA7260芯片。
用三轴加速度计利用重力分量换算原理,来测量角度与其他数字量倾角传感器相比自然要精准许多,因为模拟量的,可将电压值换算对应倾斜角度值,所以在许多需要测量角度的场合,非运动的条件下,不妨可以试试使用加速度计。
综上所述,采用方案二,电路集成度高、控制方便、易于用单片机处理。
3、显示系统的比较与选择
方案一:
用数码管进行显示。
数码管由于显示速度快,使用简单,显示效果简洁明了而得到了广泛应用。
但是由于本题中要同时显示两个方向的倾斜角度,用数码管无法显示如此丰富的内容。
方案二:
用LCD液晶进行显示,由于其显示清晰,内容丰富、清晰,信息量大,使用方便。
综上所述,本系统要显示的内容较丰富,采用方案二。
二、总体方案设计及系统方框图
本设计由角度传感器,经单片机控制器采集角度信息,再由单片机控制信号到驱动板,以调节风扇的转速,从而控制帆板的角度。
根据设计要求,此系统难点在于角度传感器的选取,及对于流体力学控制。
因此,为能够检测到角度,本系统采用加速度传感器,利用重力分量,从而得到帆板的角度。
对于自动调节帆板的角度,是由风扇的转速决定,而风扇是直流电机,对于直流电机的调速,本设计的驱动方式采用双H桥并联,控制信号上采用了PWM的调节方式,并可以调节电机运行在四象限。
由于系统设计各数据的难以测量,如风叶片与风流大小,风向的扩散性等因数。
为了能够在自动稳定在设定的角度内,本设计采用PID的算法,通过试验方法,可以从采样频率,及调节PID三个参数中,方便找到合适的值,以快速控制帆板到达设定的值。
图2-1系统总体框图
三、理论分析与计算
帆板系统控制算法采用了PID算法,包括3个部分:
测量、比较和执行,即把测量得到的量与期望值相比较,然后用合格误差纠正调节控制系统的响应。
PID控制算法是建立在经典控制理论上的一种控制策略。
PID控制算法能够在保证基本不影响系统稳定精度的前提下提高系统的稳定性,并很好的改善系统的动态性能。
PID控制器原理框图如图3所示。
图3-1PID控制器原理框图
系统主要由PID控制器和被控对象组成。
它根据给定值
与实际输出值
构成控制偏差,将偏差按比例、积分和微分通过线性组合构成控制量,对被控对象进行控制。
PID的图形表达式:
上式中
为积分时间常数,
为微分时间常数,
为比例系数,
为误差项,
为控制量。
若令采样时间为
,离散控制算法为:
上式中
是采样周期,必须足够小,以保证系统有一定的精度,
为调节器的积分时间,
为调节器微分时间,
为调节器的比例系数,
为第
次采样时的偏差值,
为控制量。
采用增量式PID进行控制,由
,可得到如下式子:
上式中
为第
次与中心位置的偏差程度,
、
分别为
、
次误差项,以此算法为基础,很容易用C语言编写出控制算法程序。
四、主要硬件电路设计
1、风扇控制电路
L293的驱动方式比较简单,详细可见L293的说明书,这样简略说明,L293有两个电压输入,一个给电机的电压,一个是给芯片工作与控制逻辑的参考电压。
L293相当于有四个驱动门,每个IN1,对应该一个OUT1,当IN1为高电平是,OUT1输出高电平,电压为VSS,也就是给这个芯片电机的供电电压。
对于设计中采用的直流电机,因此调节直流电机的转速,采用了L293驱动芯片。
由于一片L293内部有两路H桥,为了增大驱动能力,本设计中,把L293的两路H桥并联,即输入信号成输出引脚直接并联。
因为本设计中控制方面,采用PWM信号控制,而电机运行在四象限,即正转,反转,停车,自由滑行。
所以在PWM关断时刻,要为电机有一个续流通道,所以在H桥上均设计到续流二极管。
同时为了可以方便测试,本设计中,为电机的两端输出接上指示的LED。
L293驱动电路如图所示。
图4-1L293驱动电路
2、角度测量电路
下图是MMA7260三轴加速度计的结构图。
图4-2MMA7260三轴加速度计的结构图
G1和G2两位数字量输入4种组合代表4中量程。
G1?
?
?
?
G2?
?
?
?
量程选择?
?
?
?
灵敏度选择
0?
?
?
?
?
0?
?
?
?
?
?
?
1.5g?
?
?
?
?
?
?
800mV/g
0?
?
?
?
?
1?
?
?
?
?
?
?
?
2g?
?
?
?
?
?
?
?
600mV/g
1?
?
?
?
?
0?
?
?
?
?
?
?
?
4g?
?
?
?
?
?
?
?
300mV/g
0?
?
?
?
?
1?
?
?
?
?
?
?
?
6g?
?
?
?
?
?
?
?
200mV/g
通过实验,可以输出测得的模拟值,然后通过将模拟值转换成电压值再参考MMA7260芯片手册就可以得知物体的姿态或者角度了。
将X、Y、Z三接口分别接到单片机的模拟0、1、2接口,EN使能和3.3V短接。
3、控制电路
本设计采用的单片机为STC公司型号为:
STC12C5A48S2的单片机,其中35个IO口分配为:
P0与P4.4-P4.6为1602液晶显示的接口,P2接4*4的矩阵键盘,P3.4-P3.6控制电机方向与转速,P3.6接一只LED,P3.7接一蜂鸣器。
P1.0接角度传感器的电压模拟量,P0.2接一电位器,控制板的原理图如图所示
图4-3控制板原理图
五、程序设计
本系统设计可分为四种模式:
1,风扇不转,调节帆板,可以显示角度;2,控制风扇转动,调节风扇量,实时显示角度;3,输入一个设定的角度;4,根据设定角度,由系统自动调节风扇,把帆板吹动到设定角度,并保持平衡。
因此,为系统设计的4*4矩阵键盘,4种模式,分别由键盘上的“A”,“B”,“C”,“D”。
设计程序入口。
图5-1主程序流程图
六、测试数据与结果分析
1、测试仪器及型号
数字示波器TektronixTDS1002;直流稳压电源CALTEK-CA17303D;三位半万用表UT33D;量角器;秒表
2、测试方案
安装好硬件,接通电源,风扇开始以小转速转动,此时,帆板角度几乎不变化,然后,按下加速键,调整帆板的角度,帆板实际转角与液晶显示的角度进行比较,得出实验数值。
3、测试结果
①基本要求测试
当风扇页面与帆板的距离d=10cm时,通过键盘控制风力大小,使帆板转角
在0
范围内变化,实际值、测量值和偏差如下表:
表1d=10cm时测试
序号
实际值(度)
测量值(度)
偏差(度)
1
0
0
0
2
5
5
0
3
10
9
-1
4
15
15
0
5
20
17
-3
6
25
26
+1
7
30
30
0
8
35
34
-1
9
40
40
0
10
45
44
-1
11
50
50
0
12
55
54
-1
13
60
61
+1
②发挥部分测试
当间距d在7~15cm范围内任意选择,通过键盘设定帆板转角,范围在0~
变化,测试结果如下表:
⑴d=7cm时的测试结果
表1d=7cm时测试
序号
实际值(度)
测量值(度)
偏差(度)
1
0
0
0
2
5
5
0
3
10
10
0
4
15
14
-1
5
20
19
-1
6
25
25
0
7
30
31
+1
8
35
34
-1
9
40
40
0
10
45
44
-1
11
50
52
+2
12
55
55
0
13
60
59
-1
⑵d=11cm时的测试结果
表1d=11cm时测试
序号
实际值(度)
测量值(度)
偏差(度)
1
0
0
0
2
5
4
-1
3
10
10
0
4
15
14
-1
5
20
20
0
6
25
23
-2
7
30
30
0
8
35
36
+1
9
40
39
-1
10
45
45
0
11
50
50
0
12
55
54
-1
13
60
61
+1
⑶d=15cm时的测试结果
表1d=15cm时测试
序号
实际值(度)
测量值(度)
偏差(度)
1
0
0
0
2
5
5
0
3
10
9
-1
4
15
14
-1
5
20
21
+1
6
25
28
+3
7
30
30
0
8
35
34
-1
9
40
40
0
10
45
47
+2
11
50
51
+1
12
55
54
-1
13
60
59
-1
3、测试结果分析
从测试数据结果来看,所有测试结果精度都较高,误差极小。
在d=15cm时,误差只有。
本系统能够达到这样的高精度,首先是由于本系统PID自动调节功能功能,在很大程度上减小了误差。
七、总结
本帆板控制系统完成了题目中所有的基本要求和发挥部分的要求,本设计的亮点是在设计中运用到了PID调控方法,此方法在系统中能很好的消除系统性的误差,使得精确度更高。
同时本设计的另一个亮点是在控制风力方面,运用键盘控制的同时辅助以电位器控制,这样在调节范围方面更加精确。
整个系统的设计成本较低,性价比高。
八、参考文献
[1]曹宇;翁惠辉;陈永军;冯定;.基于dsPIC30F4013控制器旋转角度检测系统的研究[J].长江大学学报(自然科学版),2011.01
[2]余梦迪,董明亮,马彦文,孙立.IAM-1智能测角仪的研制[J].矿冶工程,1994.03
[3]邓宏贵;吴让亮;施佳佳;.数字角度传感器在建筑角度测量仪中的应用[J].传感技术学报,2010.08
[4]王启东,陈纯坤.激光动态角度测量系统研究[J].光子学报,1995.01
[5]夏晓晶.单片机实现的仿人智能PID控制器[D]大连海事大学,2004.
[6]李名慧.智能PID控制器的设计与应用[D]天津大学,2006.
[7]纪佳彤.PID自整定控制仪的研制与开发[D]大连理工大学,2008.
附录
1、系统电路图
2、主程序
include
#include"1602.h"
#include"AD_UART.h"
#include
#include
#include
#include"keyboard.h"
#include
doubleSetPoint;//设定目标DesiredValue
doubleProportion;//比例常数ProportionalConst
doubleIntegral;//积分常数IntegralConst
doubleDerivative;//微分常数DerivativeConst
doubleLastError;//Error[-1]
doublePrevError;//Error[-2]
doubleSumError;//SumsofErrors
intpre_speed=0;
intpre_angle=0;
floatM_pid=0;
sbitEN1=P3^3;//与驱动板的接线,对应L293驱动板上的6个信号
sbitIN1=P3^4;
sbitIN2=P3^5;
sbitLED=P3^6;
sbitbeed=P3^7;//定义了蜂鸣器与单片机的连接
sbitGS1=P1^3;
sbitGS2=P1^4;
sbitSLEEP=P1^5;
intspeed_R=0;//定义电机的速度,有正负之分,为正是,正转。
(范围-100~100)
intspeed=0;
unsignedintget_speed_v=0;
unsignedintset_angle=0;
unsignedintset_angle_buff[2]={0};
unsignedintnow_angle=0;
unsignedintcnt_s=0;//用于计数PWM的点空比0=100;
unsignedintcnt=0;//0.1ms
unsignedintcnt_set=0;//设定计数,用于采用电位器的电压。
unsignedintcnt_time;//用于软件延时
intangle_err=0;
intget_ang=0;
intset_ang=0;
unsignedcharflag_auto=0;
unsignedintx_value=0;
unsignedinty_value=0;
unsignedintz_value=0;
unsignedintvalue=0;
unsignedintangle[3]={0};
unsignedcharkey;
unsignedcharpattern=0;//用于控制程序执行不同的功能,通过键盘切换
unsignedcharflag_pid=0;
/**********delay**************/
voiddelay2(unsignedintt)
{
unsignedintj,k;
for(t;t>0;t--)
for(j=50;j>0;j--)
for(k=100;k>0;k--);
}
/*************1602显示***************/
voiddisplay_1602()
{
unsignedcharw[4],i;
unsignedlongtemp;
temp=x_value;
w[0]=temp/10%10;
w[1]=temp%10;
for(i=0;i<2;i++)
print2(3+i,w[i]);
temp=y_value;
w[0]=temp/10%10;
w[1]=temp%10;
for(i=0;i<2;i++)
print2(13+i,w[i]);
temp=z_value;
w[0]=temp/100%10;
w[1]=temp/10%10;
w[2]=temp%10;
for(i=0;i<3;i++)
print2(0x44+i,w[i]);
}
/*************initTo************/
voidinit_T0(void)
{
TMOD|=0x01;//定时器工作在模式1
TH0=0xff;//定时初值TH0=0xffTL0=0x49定时100uS
TL0=0x49;
TR0=1;
ET0=1;
}
voidinit_port(void)
{
P4SW=0xff;
GS1=0;
GS2=0;
SLEEP=1;
EN1=0;
}
/*************motorcontrol***************/
voidmotor(intm_R)
{
if(m_R>0)
{
IN1=0;
IN2=1;
speed_R=m_R;
}
elseif(m_R<0)
{
IN1=1;
IN2=0;
m_R=-m_R;
speed_R=m_R;
}
else
{
IN1=0;
IN2=0;
}
}
voidsample_ang(unsignedintch)
{
unsignedinti;
unsignedcharang_value[10]={0};
unsignedlongall_value=0;
for(i=0;i<10;i++)
{
ang_value[i]=GetADCResult(ch);
all_value+=ang_value[i];
}
angle[ch]=all_value/10;
all_value=0;
}
/************TOinterrupt********/
voidtimer0(void)interrupt1
{
TH0=0xff;
TL0=0x49;
cnt++;
cnt_s++;//PWM占空比计数 0-100
cnt_set++;
if(cnt_s>=speed_R)
{
EN1=0;
}
if(cnt_s>=100)
{
EN1=1;
cnt_s=0;
}
if(cnt>=2000)//50ms采样角度
{
sample_ang(0);
get_ang=abs(angle[0]-40)*1.8;
if(abs(get_ang-pre_angle)>10)
{
get_ang=(get_ang+pre_angle)/2;
}
else
{
get_ang=pre_angle;
}
pre_angle=get_ang;
x_value=get_ang;
display_1602();
cnt=0;
flag_auto=1;
}
cnt_time++;
}
/*************PID********************/
doublePIDCalc(doubleNextPoint)
{
doubledError,
Error;
Error=set_angle-NextPoint;//偏差
SumError+=Error;//积分
dError=LastError-PrevError;//当前微分
PrevError=LastError;
LastError=Error;
return(Proportion*Error//比例项
+Integral*SumError//积分项
+Derivative*dError//微分项
);
}
/********************main**************/
voidmain(void)
{
inttest=0;
unsignedintnum=0;
Proportion=2.25;//SetPIDCoefficients
Integral=0.11;
Derivative=0.0;
CLK_DIV=0x01;//系统分频工作,速度太快,1602控制不了。
init_T0();//初始化定时器。
InitADC();//InitADCsfr
init_port();
LCM2402_Init();
print(0x00,"A");
print(0x01,":
");
print(0x05,1);
print(0x08,"Set:
");
print(0x0f,1);
print(0x40,"Fan:
");//在第2行第1位处从左向右打印字符串
print(0x4e,"F1");
EA=1;
while
(1)
{
key=scan_key();
if(key!
=0xff)
{
if(key==0xF1)
{
pattern=0;
print(0x4e,"F1");
}
if(key==0xF2)
{
pattern=1;
print(0x4e,"F2");
}
if(key==0xF3)
{
pattern=2;
print(0x4e,"F3");
}
}
switch(pattern)
{
case0:
//风扇不转,改变角度,显示
motor(0);
y_value=0;
z_value=0;
break;
case1:
//控制风扇转速
y_value=0;
if(cnt_set>=50)
{
cnt_set=0;
sample_ang
(2);
z_value=(unsignedint)angle[2]/2.5;
get_speed_v=angle[2];
motor(get_speed_v/2.5);
}
break;
case2:
//输入角度
print(0x0c,">");
set_angle_buff[0]=0;
set_angle_buff[1]=0;
LastError=0;//Error[-1]
PrevError=0;//Error[-2]
SumError=0;//SumsofErrors
num=0;
while(scan_key()!
=0xf4)
{
if(scan_key()>=0&&scan_key()<=9)
{
set_angle_buff[num]=scan_key();
num++;
while(scan_key()!
=0xff);
}
if(num==1)
{
y_value=set_angle_buff[0];
}
elseif(num==2)
{
y_value=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 论文 最终