磁悬浮实验报告3Word格式.docx

上传人:b****6 文档编号:21988832 上传时间:2023-02-02 格式:DOCX 页数:27 大小:180.51KB
下载 相关 举报
磁悬浮实验报告3Word格式.docx_第1页
第1页 / 共27页
磁悬浮实验报告3Word格式.docx_第2页
第2页 / 共27页
磁悬浮实验报告3Word格式.docx_第3页
第3页 / 共27页
磁悬浮实验报告3Word格式.docx_第4页
第4页 / 共27页
磁悬浮实验报告3Word格式.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

磁悬浮实验报告3Word格式.docx

《磁悬浮实验报告3Word格式.docx》由会员分享,可在线阅读,更多相关《磁悬浮实验报告3Word格式.docx(27页珍藏版)》请在冰豆网上搜索。

磁悬浮实验报告3Word格式.docx

由磁路的基尔霍夫定律、毕奥-萨格尔定律和能量守恒定律,可得电磁吸力为:

式中:

μ0——空气磁导率,4πX10-7H/m;

A——铁芯的极面积,单位m2;

N——电磁铁线圈匝数;

z——小球质心到电磁铁磁极表面的瞬时气隙,单位m;

i——电磁铁绕组中的瞬时电流,单位A。

功率放大器中放大元器件的最大允许电压为15V。

为了降低功率放大器件上的压力差,减少功率放大器件的发热,设定悬浮绕组线圈电压该值为12V。

约束条件:

U=12V

电流、电压与电阻的关系

电阻:

L——漆包线的总长度/m

S——漆包线的横截面积/m2

d——线径的大小/m

是漆包线线的电阻率,查表可知:

=1.5*1.75*e-8,单位:

Ω*m

根据线圈的结构,可以得出漆包线的总长度为:

线圈的匝数为:

综上所述,电磁力为:

在线圈骨架几何尺寸和所加的电压固定的情况下,线圈漆包线线径d越大,漆包线的长度L越小,电磁力F越大。

另外,漆包线线径和电流之间还存在下述关系:

因此,线径d越大通过线圈的电流也大,线圈发热越严重。

优化漆包线线径和线长必须综合考虑电磁力大小、线圈额定电流。

由最优的漆包线线径和线长,就可以得到合理的电磁绕组结构参数。

磁悬浮小球系统模型

将钢质小球放入电磁铁产生的磁场中,用传感器检测钢球在螺线管磁场中的位置,进而用PID方法控制线圈电流以达到磁力和重力的平衡。

磁悬浮小球系统可由下面方程描述:

当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型时,控制理论的其它技术难以采用时,系统控制器的结构和参数必须依靠经验和现场调试来确定,这时应用PID控制技术最为方便。

即当我们不完全了解一个系统和被控对象﹐或不能通过有效的测量手段来获得系统参数时,最适合用PID控制技术。

比例控制能迅速反应误差,从而减小稳态误差。

但是,比例控制不能消除稳态误差。

比例放大系数的加大,会引起系统的不稳定。

积分控制的作用是,只要系统有误差存在,积分控制器就不断地积累,输出控制量,以消除误差。

因而,只要有足够的时间,积分控制将能完全消除误差,使系统误差为零,从而消除稳态误差。

积分作用太强会使系统超调加大,甚至使系统出现振荡。

微分控制可以减小超调量,克服振荡,使系统的稳定性提高,同时加快系统的动态响应速度,减小调整时间,从而改善系统的动态性能。

PID控制器参数整定的方法很多,概括起来有两大类:

一是理论计算整定法。

它主要是依据系统的数学模型,经过理论计算确定控制器参数。

这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。

二是工程整定方法,它主要依赖工程经验,直接在控制系统的试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。

PID控制器参数的工程整定方法,主要有临界比例法、反应曲线法和衰减法。

临界比例度法进行PID控制器参数的整定步骤:

(1)首先预选择一个足够短的采样周期TS,一般说TS应小于受控对象纯延迟时间的十分之一。

(2)用选定的TS,仅加入比例控制环节使系统工作,逐渐减小比例度,即加大比例放大系数KP,直至系统对输入的阶跃信号的响应出现临界振荡(稳定边缘),将这时的比例放大系数记为Kr,临界振荡周期记为Tr。

(3)以连续-时间PID控制器为基准,建立数字PID的控制度评价函数,通过公式计算或查表确定PID控制器的参数TS,KP,TI和TD。

⏹反应曲线法(实验凑试法)

通过闭环运行或模拟,观察系统的响应曲线,然后根据各参数对系统的影响,反复凑试参数,直至出现满意的响应,从而确定PID控制参数。

实验凑试法的整定步骤为“先比例,再积分,最后微分”。

(1)整定比例控制

将比例控制作用由小变到大,观察各次响应,直至得到反应快、超调小的响应曲线。

(2)整定积分环节

若在比例控制下稳态误差不能满足要求,需加入积分控制。

先将步骤

(1)中选择的比例系数减小为原来的50~80%,再将积分时间置一个较大值,观测响应曲线。

然后减小积分时间,加大积分作用,并相应调整比例系数,反复试凑至得到较满意的响应,确定比例和积分的参数。

(3)整定微分环节

若经过步骤

(2),PI控制只能消除稳态误差,而动态过程不能令人满意,则应加入微分控制,构成PID控制。

先置微分时间TD=0,逐渐加大TD,同时相应地改变比例系数和积分时间,反复试凑至获得满意的控制效果和PID控制参数。

比例十积分十微分(PID)控制器

式中 

KP——比例放大系数;

TI——积分时间;

TD——微分时间。

PID控制的程序实现:

Up=Kp*error(k)

Ui=Ui+Ki*error(k)

Ud=Kd*(error(k)-error(k-1))

U=Up+Ui+Ud

在程序中我们采用的是增量是算法

磁悬浮控制器介绍

1、磁悬浮控制系统原理框图

磁悬浮控制器组成

资源配置:

*P0.0蜂鸣器,P0.1测试灯,P0.2、P0.3两个按键。

*P1.0-P1.4五路A/D;

*P1.5-P1.7控制LED;

*P2.0-P2.7液晶数据传输;

*P3.2-P3.4液晶控制线;

*P3.0、P3.1接RS-232;

*P3.5、P3.7两路DA;

1、P0口:

STC125412AD的P0口只有四个引脚,资源分配如下:

P0.0蜂鸣器,P0.1测试灯,P0.2、P0.3两个按键。

2、STC125412AD的I/O口资源介绍:

*四个I/O口,共27个引脚,其中P0口上只有4个引脚P0.0-

P0.3,P3口上只有7个引脚却少P3.6脚,P1、P2口和8051一样有8

个引脚;

*所有I/O口都有四种类型:

准双向口(传统8051模式)、推挽输出、仅为输入和开漏模式,均可由软件配置成4种工作类型之一;

*每个口由2个控制寄存器(PxM0和PxM1)中的相应位控制每个引脚工作类型;

举例:

P2M0=0xC0;

P2M0=0xA0;

P2.7为开漏,P2.6为高阻输入,P2.5为推挽输出,

P2.4-P2.0为弱上拉。

1、控制器设计了5路AD,都经调理送入单片机,占用P1.0-P1.4五个

I/O引脚,其中P1.4用于采集传感器送入信号,P1.1-P1.3用于控制PID

算法参数,P0.0用于设置小球浮起高度。

2、设置P1口:

设置:

P1M0=0x1F;

P1M1=0x00;

或者P1M0=0x1F;

PIM1=0x1F;

传感器信号AD转换原理框图

2、控制信号AD转换原理框图

1、控制器设计了两路DA,占用P3.5和P3.7两个引脚,P3.5路DA送往功率放大器,P3.7路DA备用。

2、DA电路原理:

STC12C5412AD本没有集成DA转换功能,但是它有4路的PWM(脉

冲宽度调制)信号,PWM信号可以通过调理电路转化为DA信号。

3、DA电路原理框图:

4、I/O口设定:

不能设置为高阻输入!

6、LED模块

1、P1.5-P1.7控制8个数码管(LED)

为了节省I/O资源,选用了一片MAX7219。

2、MAX7219简介

*一种高集成化的串行输入/输出的共阴极LED显示

驱动器;

*每片可驱动8位7段加小数点的共阴极数码管,与单

片机相连仅需3根线;

*包括BCD译码器、多位扫描电路、段驱动器、位驱

动器和用于存放每个数据位的8X8静态RAM以及数个工作

寄存器;

*可以编程控制工作寄存器,可以使MAX7219进入不

同的工作状态。

*控制信号:

DIN为串行数据输入端,CIK为串行时钟输入端,LOAD为片选端;

*DIGO~DIG7为吸收显示器共阴极电流的位驱动线,其最大值可达500mA;

*SEGA~SEGG,DP为驱动显示器7段及

小数点的输出电流,一般为40mA左右;

*DOUT为串行数据输出端,通常直接接入下一片MAX7219的DIN端。

在试验中使用的源程序:

//test.c

#include<

STC12C5410AD.H>

intrins.h>

#include<

stdio.h>

p0m0=0;

p0m1=0x00;

sbitp02=P0^2;

sbitp03=P0^3;

sbitp00=P0^0;

sbitp01=P0^1;

externpid(intkp,ki,kd,spec,yk);

externdisp1(unsignedchardat[4]);

//有时候真的很无奈,就少了一点东西。

就是出不来啦,注意extern花了一天的时间,外加另建了一个项目。

无语了

externdisp2(unsignedchardat[4]);

//没一个冒号;

害了我老半天,特别注意了

externunsignedintADC_TURNON(unsignedcharspeed,chanl);

externvoidDelayms(void);

externvoiddac(unsignedcharpwm);

externvoiddisp_kp();

externvoiddisp_ki();

externvoiddisp_kd();

unsignedcharflag=1;

voiddelay(unsignedintx);

voidmain()

{

intkp=0,ki=0,kd=0,spec=0,yk=0;

unsignedcharda;

unsignedcharshow0[4]={0x00,0x01,0x02,0x03};

unsignedinta=0,b=0;

while

(1){

p03=0;

a=ADC_TURNON(3,0);

show0[0]=(unsignedchar)(a/1000);

show0[1]=(unsignedchar)((a%1000)/100);

show0[2]=(unsignedchar)(((a%1000)%100)/10);

show0[3]=(unsignedchar)(((a%1000)%100)%10);

disp1(show0);

Delayms();

b=ADC_TURNON(3,4);

show0[0]=(unsignedchar)(b/1000);

show0[1]=(unsignedchar)((b%1000)/100);

show0[2]=(unsignedchar)(((b%1000)%100)/10);

show0[3]=(unsignedchar)(((b%1000)%100)%10);

disp2(show0);

kp=ADC_TURNON(3,3);

ki=ADC_TURNON(3,2);

kd=ADC_TURNON(3,1);

spec=ADC_TURNON(3,0);

yk=ADC_TURNON(3,4);

da=pid(kp/100,ki/10,kd/10,spec/10,yk/10);

dac(da);

if(p02==0&

&

flag==1)

{flag++;

disp_kp();

delay(20);

}

if(p02==0&

flag==2)

disp_ki();

flag==3)

{flag=1;

disp_kd();

}

}//while的终止

}//main的终止

voiddelay(unsignedintx)

{unsignedintm,k;

for(m=0;

m<

x;

m++)

{for(k=0;

k<

0xffff;

k++);

n=(unsignedchar)((b%1000)/100);

}

//disp.c用来led显示结果

sbitP15=P1^5;

sbitP16=P1^6;

sbitP17=P1^7;

#definedinP17

#defineloadP16

#defineclkP15

#defineNoOp0x00

#defineDigit00x01

#defineDigit10x02

#defineDigit20x03

#defineDigit30x04

#defineDigit40x05

#defineDigit50x06

#defineDigit60x07

#defineDigit70x08

#defineDecodeMode0x09

#defineIntensity0x0a

#defineScanLimit0x0b

#defineShutDown0x0c

#defineDisplayTest0x0f

unsignedcharcodedispcode_char[]={0x7e,0x30,0x6d,0x79,0x33,0x5b,0x5f,0x70,0x7f,0x7b,0x0,0x1};

voidMAX7219_Write(unsignedcharcom,unsignedchardat);

voidDelayms(void)

{

unsignedinta,b;

for(a=0;

a<

20;

a++)

for(b=0;

b<

100;

b++);

voidMAX7219_Write(unsignedcharcom,unsignedchardat)

{

unsignedchartemp,i,j;

load=0;

clk=0;

for(i=0;

i<

8;

i++)

{

temp=com;

if((temp&

(0x80>

>

i))!

=0)

din=1;

else

din=0;

clk=1;

for(j=0;

j<

5;

j++);

clk=0;

temp=dat;

load=1;

voidMAX7219_Init()

{MAX7219_Write(ShutDown,0x00);

Delayms();

MAX7219_Write(ShutDown,0x01);

MAX7219_Write(DecodeMode,0xff);

MAX7219_Write(Intensity,0x0a);

//IntensityRegisterFormat

MAX7219_Write(ScanLimit,0x07);

voidMAX7219_Init1()

MAX7219_Write(DecodeMode,0x00);

}

voiddisp1(unsignedchardat[4])

{load=1;

clk=1;

din=1;

MAX7219_Init();

//设P1.0/P1.1/P1.2/P1.3/P1.4为高阻输入,其他为IO

P1M0=0x1F;

P1M1=0x00;

MAX7219_Write(Digit0,dat[0]);

MAX7219_Write(Digit1,dat[1]);

MAX7219_Write(Digit2,dat[2]);

MAX7219_Write(Digit3,dat[3]);

}

voiddisp2(unsignedchardat[4])

MAX7219_Init();

MAX7219_Write(Digit4,dat[0]);

MAX7219_Write(Digit5,dat[1]);

MAX7219_Write(Digit6,dat[2]);

MAX7219_Write(Digit7,dat[3]);

voiddisp_kp()//用于显示kp,ki,kd的值

unsignedintb;

unsignedcharm,n,x,y;

MAX7219_Init1();

MAX7219_Write(Digit0,0);

MAX7219_Write(Digit1,0x0F);

MAX7219_Write(Digit2,0x67);

MAX7219_Write(Digit3,0);

b=ADC_TURNON(3,3);

m=(unsignedchar)(b/1000);

n=(unsignedchar)((b%1000)/100);

x=(unsignedchar)(((b%1000)%100)/10);

y=(unsignedchar)(((b%1000)%100)%10);

MAX7219_Write(Digit4,dispcode_char[m]);

MAX7219_Write(Digit5,dispcode_char[n]);

MAX7219_Write(Digit6,dispcode_char[x]);

MAX7219_Write(Digit7,dispcode_char[y]);

voiddisp_ki()//用于显示kp,ki,kd的值

{

MAX7219_Write(Digit2,0x30);

b=ADC_TURNON(3,2);

voiddisp_kd()//用于显示kp,ki,kd的值

unsignedcharm,n,x,y;

unsignedintb;

MAX7219_Init1();

MAX7219_Write(Digit2,0x3D);

b=ADC_TURNON(3,1);

//adc.c用来实现ad转换的子程序

unsignedint

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1