电气工程综合实验.docx

上传人:b****1 文档编号:14127899 上传时间:2023-06-20 格式:DOCX 页数:18 大小:160.34KB
下载 相关 举报
电气工程综合实验.docx_第1页
第1页 / 共18页
电气工程综合实验.docx_第2页
第2页 / 共18页
电气工程综合实验.docx_第3页
第3页 / 共18页
电气工程综合实验.docx_第4页
第4页 / 共18页
电气工程综合实验.docx_第5页
第5页 / 共18页
电气工程综合实验.docx_第6页
第6页 / 共18页
电气工程综合实验.docx_第7页
第7页 / 共18页
电气工程综合实验.docx_第8页
第8页 / 共18页
电气工程综合实验.docx_第9页
第9页 / 共18页
电气工程综合实验.docx_第10页
第10页 / 共18页
电气工程综合实验.docx_第11页
第11页 / 共18页
电气工程综合实验.docx_第12页
第12页 / 共18页
电气工程综合实验.docx_第13页
第13页 / 共18页
电气工程综合实验.docx_第14页
第14页 / 共18页
电气工程综合实验.docx_第15页
第15页 / 共18页
电气工程综合实验.docx_第16页
第16页 / 共18页
电气工程综合实验.docx_第17页
第17页 / 共18页
电气工程综合实验.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

电气工程综合实验.docx

《电气工程综合实验.docx》由会员分享,可在线阅读,更多相关《电气工程综合实验.docx(18页珍藏版)》请在冰点文库上搜索。

电气工程综合实验.docx

电气工程综合实验

成绩:

 

xxda学

自动化学院综合实验报告

 

题目:

直流电机闭环调速系统

学生姓名:

xx

学号:

xx

同组人员:

xx

指导教师:

xx

完成时间:

2012.12.

直流电机闭环调速系统实验报告

1、实验名称:

直流电机闭环调速

基本情况:

1.学生姓名:

xx

2.学号:

x

3.班级:

0830902班

4.实验项目组长:

xx

5.同组其他成员:

序号

姓名

班级

学号

分工系数

1

x

0830x

oo4

0.34

2

xx

0x

oo1

0.22

3

xxx

083x

oo8

0.22

4

xxxx

083x

oo89

0.22

6.具体分工:

任务负责人

尹辉

王玉棣

伍沁楠

颜鸿运

分析设计给出设计方案

硬件电路设计

软件程序设计

综合实验报告

7.本人在项目组的作用描述:

本次综合实验的目的是在于实现直流电机的闭环调速,我在本次实验的主要负责的是软件程序设计,也就是应用C语言进行编程,PID控制主要是要通过比例项、积分项、微分项三项的控制来实现调速功能。

编写了计时器T0产生PWM波、通过改变占空比实现;用T1记录脉冲来确定转速;在键盘输入上改变转速的额定值,观察实际转速,显示最终的实际数值。

最终确定了调解中的各项系数:

Kp=0.4,Ki=0.02,Kd=0.02。

二、实验内容(实验原理介绍):

2.1实验内容

1)基于51单片机PWM输出控制直流电机转速;

2)可以实时显示电机转速,同时显示设定值以及给定值

3)可以通过按键设定直流电机转速,即实现加减速(转/秒,r/s);

4)可以调节P、I、D参数,通过PID调速使电机转速逐渐稳定;

2.2实验原理

2.2.1系统框图

2.2.2实验原理

该系统是基于51单片机最小系统的控制系统,由51单片机产生PWM,由驱动芯片L298N驱动电机转动,再由红外对射传感器产生脉冲输入单片机,单片机经过PID算法调节占空比实现对电机速度的控制和调节。

PWM控制的基本原理:

在采样控制理论中有一个重要的结论:

冲量相等而形状不同的窄脉冲加在具有惯性的环节上时,其效果基本相同。

冲量指窄脉冲的面积。

这里所说的效果基本相同,是指环节的输出响应波形基本相同。

低频段非常接近,仅在高频段略有差异。

由于PWM调速系统的开关频率较高,仅靠电枢电感的滤波作用就可获得平稳的直流电流,低速特性好、稳速精度高、调速范围宽。

同样,由于开关频率高,快速响应特性好,动态抗干扰能力强,可以获得很宽的频带;开关器件只工作在开关状态,因此主电路损耗小、装置效率高;直流电源采用不可控整流时,电网功率因数比相控整流器高。

数字PID算法

1、PID控制系统组成

2、PID调节器的微分方程和传递函数

PID调节器是一种线性调节器,它将给定值r(t)与实际输出值c(t)的偏差的比例(P)、积分(I)、微分(D)通过线性组合构成控制量,对控制对象进行控制。

PID调节器的微分方程:

式中

PID调节器的传输函数:

3模拟PID控制规律的离散化

模拟形式

离散化形式

4、数字PID控制器的差分方程

式中

比例项

积分项

微分项

5、PID调节器各校正环节的作用

(1)比例环节:

即时成比例地反应控制系统的偏差信号e(t),偏差一旦产生,调节器立即产生控制作用以减小偏差。

(2)积分环节:

主要用于消除静差,提高系统的无差度。

积分作用的强弱取决于积分时间常数TI,TI越大,积分作用越弱,反之则越强。

(3)微分环节:

能反应偏差信号的变化趋势(变化速率),并能在偏差信号的值变得太大之前,在系统中引入一个有效的早期修正信号,从而加快系统的动作速度,减小调节时间。

三、实验结果分析(含程序、数据记录、控制算法及分析和实验总结等):

3.1程序流程图

3.2源程序

/*计时器T0用于产生PWM脉冲,同时T1用于计数器模式,记录脉冲的个数,确定转速*/

#include

#include//标准输入输出

#include//移位头函数

#include//

#defineucharunsignedchar

#defineuintunsignedint

#defineDataP0//数据端口

#defineTHCon0xfc

#defineTLCon0x66//初值1ms

sbitP1_0=P1^0;

sbitP1_1=P1^1;

sbitRS=P2^4;//Pin4改P2^5

sbitRW=P2^5;//Pin5P2^6

sbitE=P2^6;//Pin6P2^7

sbitkey1=P3^0;//键盘改

sbitkey2=P3^1;

chardataTimeNum[]="";

chardataTest1[]="";

charge,shi,bai,ge1,shi1,bai1;//

sbittest=P1^3;

sbitPWM_C=P1^2;//pwm控制端P3^3

inte=0,e1=0,e2=0;//pid偏差

floatuk=0,uk1=0.0,duk=0.0;//pid输出值

floatKp=0.4,Ki=0.02,Kd=0.02;//pid控制系数

intout;

uintSpeedSet=16;

uintcnt=0;

uintnum=0;//脉冲计数Impluse=0,

uintPWM_Time=50;//脉冲宽度

/******************************************************************/

/*函数声明*/

/******************************************************************/

voidPWMOut();

/******************************************************************/

/*微秒延时函数*/

/******************************************************************/

voidDelayUs(unsignedcharus)//delayus

{

unsignedcharuscnt;

uscnt=us>>1;/*12MHz频率*/

while(--uscnt);

}

/******************************************************************/

/*毫秒函数声明*/

/******************************************************************/

voidDelayMs(unsignedcharms)

{

while(--ms)

{

DelayUs(250);

DelayUs(250);

DelayUs(250);

DelayUs(250);

}

}

/******************************************************************/

/*写入命令函数*/

/******************************************************************/

voidWriteCommand(unsignedcharc)

{

DelayMs(5);//操作前短暂延时,保证信号稳定

E=0;

RS=0;

RW=0;

_nop_();

E=1;

Data=c;

E=0;

}

/******************************************************************/

/*写入数据函数*/

/******************************************************************/

voidWriteData(unsignedcharc)

{

DelayMs(5);//操作前短暂延时,保证信号稳定

E=0;

RS=1;

RW=0;

_nop_();

E=1;

Data=c;

E=0;

RS=0;

}

/******************************************************************/

/*写入字节函数*/

/******************************************************************/

voidShowChar(unsignedcharpos,unsignedcharc)

{

unsignedcharp;

if(pos>=0x10)

p=pos+0xb0;//是第二行则命令代码高4位为0xc

else

p=pos+0x80;//是第二行则命令代码高4位为0x8

WriteCommand(p);//写命令

WriteData(c);//写数据

}

/******************************************************************/

/*写入字符串函数*/

/******************************************************************/

voidShowString(unsignedcharline,char*ptr)

{

unsignedcharl,i;

l=line<<4;

for(i=0;i<16;i++)

ShowChar(l++,*(ptr+i));//循环显示16个字符

}

/******************************************************************/

/*初始化函数*/

/******************************************************************/

voidinit()

{

TMOD=0x51;

TH0=THCon;

TL0=TLCon;

TH1=0;

TL1=0;

//EA=1;

ET0=1;

TR0=1;//开始计时器0

ET1=1;

TR1=1;//开始计数器1

EA=1;

e=0;

e1=0;

e2=0;

}

voidInitLcd()

{

DelayMs(15);

WriteCommand(0x38);//displaymode

WriteCommand(0x38);//displaymode

WriteCommand(0x38);//displaymode

WriteCommand(0x06);//显示光标移动位置

WriteCommand(0x0c);//显示开及光标设置

WriteCommand(0x01);//显示清屏

DelayMs(15);

sprintf(Test1,"setspeed:

");//打印输出第一行信息

ShowString(0,Test1);

sprintf(TimeNum,"current:

");//打印输出第二行信息

ShowString(1,TimeNum);

}

voidkeyscan()

{

if(!

key1)

{//按下相应的按键,数码管显示相应的码值

DelayMs(5);

if(!

key1)

{

SpeedSet++;

//P1_0=~P1_0;

//num++;

}

}

}

voidAnalysisData(charnuma)

{

ge=numa%10;

shi=numa/10%10;

bai=numa/100%10;

}

voidAnalysisCu(charnuma)

{

ge1=numa%10;

shi1=numa/10%10;

bai1=numa/100%10;

}

voidPIDControl()

{

e=SpeedSet*4-num;

duk=(Kp*(e-e1)+Ki*e+Kd*(e-2*e1+e2));//kp*(error1-error2)+ki*error1+kd*(error1-2*error2+error3)

uk=uk1+duk;

out=(int)uk;//

if(out>100)

{

out=100;

}

elseif(out<0)

{

out=0;

}

uk1=uk;

e2=e1;

e1=e;

PWM_Time=out;//out

}

voidDelay(uchark)

{

uinti=0,j=0;

for(i=k;i>0;i--)

{

for(j=50;j>0;j--);

}

}

voidPWMOut()

{

if(cnt

{

PWM_C=1;

}

else

{

PWM_C=0;

if(cnt>=100)

{

cnt=0;

}

}

}

/******************************************************************/

/*主函数*/

/******************************************************************/

voidmain(void)

{

init();

InitLcd();//初始化LCD

DelayMs(15);//延时保证信号稳定

P1_0=1;

//sprintf(Test1,"setspeed:

");//打印输出第一行信息

//ShowString(0,Test1);

//

//sprintf(TimeNum,"current:

");//打印输出第二行信息

//ShowString(1,TimeNum);

while

(1)

{

keyscan();

AnalysisData(SpeedSet);

WriteCommand(0x80+0x0c);

WriteData(0x30+bai);

WriteData(0x30+shi);

WriteData(0x30+ge);

DelayMs(200);

AnalysisCu(num/4);

WriteCommand(0x80+0x49);

WriteData(0x30+bai1);

WriteData(0x30+shi1);

WriteData(0x30+ge1);

DelayMs(200);

PWMOut();

}

}

/******************************************************************/

voidexter0()interrupt0using1

{

//Impluse++;

//P1_0=~P1_0;

}

voidtimer0()interrupt1

{

//staticunsignedcharBit=0;

staticunsignedinttime=0;

TH0=THCon;

TL0=TLCon;

cnt++;//pid脉冲周期

time++;//转速测量周期

PWMOut();

if(time>=100)

{

time=0;

num=(TH1*256+TL1);//4个脉冲,转一圈Impluse/4

P1_1=~P1_1;

TH1=0;

TL1=0;

//Impluse=0;

PIDControl();

}

}

3.3硬件原理图

3.4实验心得

本次综合实验是在课外时间完成,复习了很多东西,自动控制原理,程序编写等,在PID的控制中,根据组长的分配任务,前期了解了一些程序编写中应该设计的控制量,基本上还是基于单片机上的程序,难度有点大,很多东西需要尹辉的帮助。

在实验中也遇到了一些问题,Kp、Ki、Kd的数值上的选取、计算等,以及闭环反馈的相关调节。

实际上编程难度对自己来说比较大,一是一段时间没有进行这方面的操作,二是自己编程比较薄弱。

最终通过大三时期的比例、微分、积分各个实验的程序和当时的实验资料,基本编出实现调速功能的程序,这次综合实验最大的好处就是为毕业设计做了一些好的复习。

 

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

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2