资源描述
专业: 电气工程及其自动化
姓名:
学号:
日期:
地点:
实验报告
课程名称: 电器装备及其计算机控制技术 指引教师: 成绩:__________________
实验名称:电气装备计算机控制系统设计 实验类型:________________同组学生姓名:__________
一、实验目和规定(必填) 二、实验内容和原理(必填)
三、重要仪器设备(必填) 四、操作办法和实验环节
五、实验数据记录和解决 六、实验成果与分析(必填)
七、讨论、心得
一、实验目
1、理解数据采集系统硬件原理,理解数据采集卡技术指标和驱动函数;
2、掌握PCI1202数据采集卡获取数据办法,数据采集软件编写办法;
3、掌握计算机控制技术,学会电气装备计算机控制系统软件和硬件设计,熟悉控制系统调试办法。
二、实验内容
1、使用数据采集系统进行各路数据采集,对数据采集成果进行记录和分析;
2、运用采集卡数据输入输出功能设计一种简易控制三相异步电机正反转控制系统。
三、实验原理
在电气装备等各个应用领域都存在着数据采集、存储、解决与控制问题,经常需要对电流、电压、温度、压力、流量、位移等模仿量进行采集,通过模/数(A /D)转换,数据解决,最后把成果显示出来或者进行相应控制解决。
数据采集系统信号采集某些普通涉及信号输入和调理(信号衰减/放大与滤波)、采样/保持、模/数(A /D)转换、数据存储(RAM)等,再通过接口传播到计算机,由计算机进行信号分析解决和显示。
三相异步电机转子是被定子三相绕组通入三相交流电产生旋转磁场拖动,三相绕组合成旋转磁场向哪个方向转,转子就向哪个方向转。因此,只要将三相电源线任意两根线换接,电机定子旋转磁场就被变化了,那么电机转子转动方向也将跟随旋转磁场方向变化。
四、实验环节
1. 研究并设计电机数据采集及控制主电路;
图1 实验接线图
如图1所示,主电路由交流接触器KM1控制电机正转,KM2控制电机反转。控制电路中,中间继电器C1常开触点控制KM1线包供电,实现电机正转;C2常开触点KM2线包供电,实现电机反转。KM1、KM2线包回路中分别串接KM2、KM1常闭触点,实现互锁。
需要电机正转时,向C1线包供电,使C1常开触点闭合,则KM1线包得电,KM1主触点闭合,同步,KM1常闭触点打开,使KM2线包无法得电。
需要电机反转时,向C2线包供电,使C1常开触点闭合,则KM2线包得电,KM2主触点闭合。同步,KM2常闭触点打开,使KM1线包无法得电,实现正反转电气互锁。
停车时,停止向C1、C2线包供电,则控制回路断电,KM1、KM2线包均失电,主触点所有打开,电机失去三相电压供电,自由停车。
2. 依照设计电路完毕实验系统硬件接线;
3. 通过软件平台进行编程、调试实现对三相异步电机数据采集及正反转控制;
五、实验成果与分析
图2 电机正转实验波形
由图2可知,C相电压传感器有故障,无法工作,只测得两相电压波形。此时异步电机三相电压相序应当是A→B→C,可从波形中看出A相超前B相电压,超前角度大概为120°。
图3 电机反转实验波形
由图3可知, A相电压大概落后B相电压约120°,此时异步电机三相电压相序应当是A→C→B,观测电机转向,与上述电机正转后转向相反。
六、注意事项
1. 连线检查无误后方可上电,接线尽量用短线;
2. 由于异步电机高压直接启动容易过流报警,因此可将交流输入电压调至160V左右;
3. 主接触器线圈工作时需要220V交流电源(三相输出电压U、V、W为可调电压,其下方三个输出电压U’、V’、W’为不可调电压,其任意两相之间线电压均为380V,每一相对地相电压为220V,因而可选取其中一相作为主接触器电源,切不可用两相之间线电压!)
4.数字隔离端子板配有各种继电器,这些继电器通断由数码管显示,上位机输入数字量可以由数码管以相应二进制格式表达,因而应当弄清实验中使用端子板继电器相应哪些数字为通,哪些数字为断。
5. 实验中未浮现过流过压报警时,电机通断电通过上位机软件实现。
6.在设计电机正反转控制电路时必要注意与否会导致电源短路!
七、思考和练习
1.继电器与接触器区别是什么?
继电器:用来保证电力系统设备安全运营,属于二次设备。交直流方式均有,以依照一定电气量或非电气量进行整定,当被保护设备或者回路浮现故障,达到整定值就启动出口,接通跳闸回路,断路器跳开故障回路,减小事故范畴。用于控制电路、电流小,无灭弧装置,可在电量或非电量作用下动作。
接触器:普通作为控制回路主体执行元件使用,触点分为主辅,触点数量少,触电容量大,通断负荷能力大,大容量普通有灭弧罩增强开断能力。用于主电路、电流大,有灭弧装置,普通只能在电压作用下动作。
2.如何理解传感器输出信号标度转换?
计算机控制系统各种物理参数有不同量纲,这些参数经A/D转换后,编程数字量信息输出,这个数字量虽然代表参数值大小,但不一定等于本来带有量纲参数值,必要将它转换成本来参数真实值才干进行显示,打印或使用,这种转换就是标度转换。
信号标度转换重要任务是把传感器输出信号变换成与AD转换器输入量程相适应大小,以提高辨别率。若传感器输出信号最大值不不大于AD转换输入量程,显然AD转换器无法接受;但若传感器输出信号最大值远远不大于AD转换器输入量程,就不能充分运用AD传感器,精度就不是很高。
标度转换重要环节普通是信号放大,即将传感器输出小信号放大到适合于AD转换器或V/F转换大电压信号。
3.阐述继电器自锁与互锁原理。
自锁就是运用继电接触器是辅助常开触点来代替启动按钮,继电接触器闭合后,常开触点也闭合,就好像始终按下启动按钮同样,常开触点和启动按钮是并联在一起;
继电器互锁是运用继电接触器是辅助触点,可以通过把彼此常闭触点串接到对方控制线圈回路中实现。例如继电器2线圈通过继电器1常闭触电后来才接通电源,那么如果接触器1一旦动作,那么接触器2就不会动作。
4.数字输入输出通道中惯用驱动和隔离及功率放大器件有哪些?
驱动与电平转换:TTL电路、ECL电路、HCL电路、CMOS电路等;
隔离器件:隔离变压器、继电器和光电耦合器件等;
功率放大器件:电磁继电器、大功率晶体管、IGBT、大功率三极管、固态继电器等。
八、实验程序
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit2.h"
#include "P1202.h"
#include "P1202u.cpp"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Word TotalBoards;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
:TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Word RetValue;
RetValue = P1202_DriverInit(&TotalBoards);
if (RetValue != 0)
{
ShowMessage("ErrorCode:" + IntToStr(RetValue)
+ "\nDriver Initial Error!!");
Button1->Enabled = False;
}
eSelect->Text = "0";
eTotal->Text = IntToStr(TotalBoards);
UpDown1->Max = (Word)(TotalBoards - 1);
UpDown1->Min = 0;
if (TotalBoards < 2)
{
UpDown1->Enabled = False;
eSelect->Enabled = False;
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Word RetValue,DF,DW,AC,k,Dodata;
float DA;
wAdNumber = (Word)StrToInt(eC0AdNums->Text);
DF = (Word)StrToInt(eC0DaFreq->Text);
DW = (Word)StrToInt(eC0DaWave->Text);
AC = (Word)StrToInt(eC0AdClock->Text);
DA = StrToFloat(eC0DaAmp->Text);
for (k=0;k<=31;k++)
{
wChannel[k] = 0;
wConfigCode[k] = 0;
}
wChannel[0] = 1;
wChannel[1] = 1;
wChannel[2] = 1;
XMax->Caption = IntToStr(wAdNumber);
XMax2->Caption = XMax->Caption;
XMax3->Caption = XMax->Caption;
RetValue = P1202_ActiveBoard((Word)StrToInt(eSelect->Text));
if (RetValue != 0)
{
ShowMessage((AnsiString)"Active Borad Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
eC0DO->Text="2";
Dodata = (Word) StrToInt("0x" + eC0DO->Text);
RetValue = P1202_Do(Dodata);
if (RetValue != 0 )
{
ShowMessage((AnsiString)"Digital Output Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
RetValue = P1202_M_FUN_3(DF,DW,DA,AC,wAdNumber,wChannel,wConfigCode,fAdBuf,-10,10);
if (RetValue !=0)
{
ShowMessage((AnsiString)"M_Fun_1 Error!!" + "ErrorCode:" + IntToStr(RetValue) );
//return;
}
DrawWaveF( -5,5,fAdBuf,0, wAdNumber,C0Image0 );
DrawWaveF( -5,5,fAdBuf,wAdNumber, wAdNumber,C0Image1 );
DrawWaveF( -5,5,fAdBuf,wAdNumber * 2,wAdNumber,C0Image2 );
lbC0Log->Items->Clear();
for (k=0;k<=wAdNumber -1;k++)
lbC0Log->Items->Add((AnsiString) "Ch0:" + FloatToStr(fAdBuf[k]).SubString(1,5)
+ " Ch1:" + FloatToStr(fAdBuf[wAdNumber + k]).SubString(1,5)
+ " Ch2:" + FloatToStr(fAdBuf[wAdNumber * 2 + k]).SubString(1,5)
);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender,TCloseAction &Action)
{
P1202_DriverClose;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Word RetValue,DF,DW,AC,k,Dodata;
float DA;
wAdNumber = (Word)StrToInt(eC0AdNums->Text);
DF = (Word)StrToInt(eC0DaFreq->Text);
DW = (Word)StrToInt(eC0DaWave->Text);
AC = (Word)StrToInt(eC0AdClock->Text);
DA = StrToFloat(eC0DaAmp->Text);
for (k=0;k<=31;k++)
{
wChannel[k] = 0;
wConfigCode[k] = 0;
}
wChannel[0] = 1;
wChannel[1] = 1;
wChannel[2] = 1;
XMax->Caption = IntToStr(wAdNumber);
XMax2->Caption = XMax->Caption;
XMax3->Caption = XMax->Caption;
RetValue = P1202_ActiveBoard((Word)StrToInt(eSelect->Text));
if (RetValue != 0)
{
ShowMessage((AnsiString)"Active Borad Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
eC0DO->Text="8";
Dodata = (Word) StrToInt("0x" + eC0DO->Text);
RetValue = P1202_Do(Dodata);
if (RetValue != 0 )
{
ShowMessage((AnsiString)"Digital Output Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
RetValue = P1202_M_FUN_3(DF,DW,DA,AC,wAdNumber,wChannel,wConfigCode,fAdBuf,-10,10);
if (RetValue !=0)
{
ShowMessage((AnsiString)"M_Fun_1 Error!!" + "ErrorCode:" + IntToStr(RetValue) );
//return;
}
DrawWaveF( -5,5,fAdBuf,0, wAdNumber,C0Image0 );
DrawWaveF( -5,5,fAdBuf,wAdNumber, wAdNumber,C0Image1 );
DrawWaveF( -5,5,fAdBuf,wAdNumber * 2,wAdNumber,C0Image2 );
lbC0Log->Items->Clear();
for (k=0;k<=wAdNumber -1;k++)
lbC0Log->Items->Add((AnsiString) "Ch0:" + FloatToStr(fAdBuf[k]).SubString(1,5)
+ " Ch1:" + FloatToStr(fAdBuf[wAdNumber + k]).SubString(1,5)
+ " Ch2:" + FloatToStr(fAdBuf[wAdNumber * 2 + k]).SubString(1,5)
);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Word RetValue,DF,DW,AC,k,Dodata;
float DA;
wAdNumber = (Word)StrToInt(eC0AdNums->Text);
DF = (Word)StrToInt(eC0DaFreq->Text);
DW = (Word)StrToInt(eC0DaWave->Text);
AC = (Word)StrToInt(eC0AdClock->Text);
DA = StrToFloat(eC0DaAmp->Text);
for (k=0;k<=31;k++)
{
wChannel[k] = 0;
wConfigCode[k] = 0;
}
wChannel[0] = 1;
wChannel[1] = 1;
wChannel[2] = 1;
XMax->Caption = IntToStr(wAdNumber);
XMax2->Caption = XMax->Caption;
XMax3->Caption = XMax->Caption;
RetValue = P1202_ActiveBoard((Word)StrToInt(eSelect->Text));
if (RetValue != 0)
{
ShowMessage((AnsiString)"Active Borad Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
eC0DO->Text="0";
Dodata = (Word) StrToInt("0x" + eC0DO->Text);
RetValue = P1202_Do(Dodata);
if (RetValue != 0 )
{
ShowMessage((AnsiString)"Digital Output Error !!" + "\nErrorCode:" + IntToStr(RetValue));
return;
}
RetValue = P1202_M_FUN_3(DF,DW,DA,AC,wAdNumber,wChannel,wConfigCode,fAdBuf,-10,10);
if (RetValue !=0)
{
ShowMessage((AnsiString)"M_Fun_1 Error!!" + "ErrorCode:" + IntToStr(RetValue) );
//return;
}
DrawWaveF( -5,5,fAdBuf,0, wAdNumber,C0Image0 );
DrawWaveF( -5,5,fAdBuf,wAdNumber, wAdNumber,C0Image1 );
DrawWaveF( -5,5,fAdBuf,wAdNumber * 2,wAdNumber,C0Image2 );
lbC0Log->Items->Clear();
for (k=0;k<=wAdNumber -1;k++)
lbC0Log->Items->Add((AnsiString) "Ch0:" + FloatToStr(fAdBuf[k]).SubString(1,5)
+ " Ch1:" + FloatToStr(fAdBuf[wAdNumber + k]).SubString(1,5)
+ " Ch2:" + FloatToStr(fAdBuf[wAdNumber * 2 + k]).SubString(1,5)
);
}
//---------------------------------------------------------------------------
展开阅读全文