当前位置:
文档之家› 直流电机闭环调速控制系统设计报告.doc
直流电机闭环调速控制系统设计报告.doc
Delay(1);
Pos >>= 1; // 显示下一位
}
}
//***********键闭合程序******************************************
unsigned char TestKey()
{
OUTBIT = 0; // 输出线置为0
return (~IN & 0x0f); // 读入键状态(高四位不用)
四、软件设计………………………………………………………8
五、调试及结果…………………………………………………..19
六、心得体会……………………………………………………..19
七、参考文献……………………………………………………..20
八、附录…………………………………………………………..20
直流电机闭环调速控制系统设计报告
xdata unsigned char CS0832 _at_ 0x9000; // DA地址约定
//********************变量定义***********************************
unsigned int VOUT=0 ; // DA输出缓存变量
unsigned int FDC=0,FREF=0,DFDC=0,uctrl=0; // 转速检测值FDC,给定值FREF
void InitT()
{
TMOD=2;//自动重装模式
TH0 = T200us;//定时200us
TL0 = T200us;
ET0=1;//开定时器中断
IT0=1;//外部中断下降沿触发
EX0=1;//开外部中断
TR0=1;//开定时器0
EA=1;//开总中断
}
//********** 定时器0中断子程序,计时************
OUTBIT = ~ Pos;
Pos >>= 1;
k = ~IN & 0x0f;
} while ((--i != 0) && (k =源自 0));if(k != 0)
{ i *= 4;
if (k & 2)
i += 1;
else if (k & 4)
i += 2;
else if (k & 8)
i += 3;
2、根据实验装置具体情况确定接线方法,从而确定各端口的口地址(D/A、键盘、显示等);
3、采用PID算法作为恒转速控制算法,对PID算法加以分析说明;
4、按照系统工作过程要求编制程序,画出流程图与编写具体程序;
5、调试运行,记录运行结果;
6、书写课程设计报告,符合学院有关课程报告的要求。
1.3程序调试建议:
unsigned char Pos;
unsigned char LED;
Pos = 0x20; // 从左边开始显示
for (i = 0; i < LEDLen; i++)
{
OUTBIT = 0; // 关所有八段管
LED = LEDBuf[i];
OUTSEG = LED;
OUTBIT = Pos; // 显示一位八段管
4、开始时只显示设定值,采集值显示为0,按运行键后显示实时采集值与设定值,左边三位是设定值,右边三位是实时值;
5、设置停止运行键,控制直流电机停止运行;
6、其它扩展发挥功能。
1.2具体要求:
1、根据功能要求从实验装置上选择合适电路构成系统,用protel软件画出原理图与控制系统结构图,分析系统工作过程;
目录…………………………………………………………………1
一、课设任务…………………………………………………….2
1.1设计内容…………………………………………………..2
1.2具体要求…………………………………………………..2
1.3程序调试建议…………………………………………….2
二、系统方案…………………………………………………….3
1、先通过简单程序验证硬件工作正常(D/A输出,带负载能力,显示器正常等等);不正常时及时与实验室老师联系更换器件。
2、调试测速显示子程序;
3、调试参数设置程序;
4、调试控制算法程序;
5、调试综合程序
二、系统方案
直流电动机具有良好的起、制动性能,宜于大范围内平滑调速,在许多需要调速或快速正反向的电力拖动领域得到了广泛的应用。采用PID调节的转速单环直流调速系统可以在保证稳定的前提下实现转速无静差。
系统进行信号采集进行D/A转换,使单片机送出脉冲来控制触发器,控制电路输出,驱动电动机工作,再由检测电路带回实际转速给单片机,让单片机根据实际转速和给定的转速进行比较,放大及PID运算等操作,从而控制整流电路α角的大小,进而改变电机电枢电压的大小,达到调节电动机转速的目的。
三、硬件设计
3.1 数码管显示和行列式键盘电路
0x0e, 0x03, 0x06, 0x09,
0x0f, 0x02, 0x05, 0x08,
0x00, 0x01, 0x04, 0x07
};
//*********延时程序*********************************************
void Delay(unsigned char CNT)
OUTBIT = 1;
do Delay(10);
while (TestKey()); // 等键释放
return(KeyTable[i]); // 取出键码
}
else return(0xff);
}
//****************速度设定程序************************
void speedset()
void T0Int() interrupt 1
{C200us++;}
//外部中断测速子程序
int TDC=0; //电机转动周期寄存器
void ExtInt0() interrupt 0
{TDC=C200us;// 参数传递
C200us = 0;//定时器计数变量清零
FDC=5000/TDC;
DFDC=FDC*60;//实际周期换算
LEDBuf[i]=LEDBuf[i+3]; //实现闪烁原来的值;
while(m!=20){DisplayLED();m++; } //延时;
m=0;
DisplayLED();*/
if( TestKey() )
{ s= GetKey();
k= s & 0x0f;
if((k>=0)&&(k<=9)) //速度设定,0--9有效;
}
//**************得键值程序*************************************
unsigned char GetKey()
{
unsigned char Pos;
unsigned char i;
unsigned char k;
i = 6;
Pos = 0x20;
do {
{
unsigned char i;
while (CNT-- !=0)
for (i=100; i !=0; i--);
}
//***********动态显示程序******************************************
void DisplayLED()
{
unsigned char i;
}
//*****************转速闭环调节程序*************
void PIDTiaoSu()
{
if(FREF>FDC)
{ ERROR=FREF-FDC;
IVAL=IVAL+ERROR/8;
if(IVAL>=0Xf5)
IVAL=0Xf5;
uctrl=PVAL*ERROR+PIVAL*IVAL;
DisplayLED();
}
}
//*************定时器子程序,自动重装模式定时200us******
#define T200us (256-100) // 200us时间常数(6M)
unsigned int C200us; // 200us记数单元
//*********定时器和外部中断初始化***************
LEDBuf[5] = LEDMAP[0];
while(k!=10) //A键为确认键;
{
/* m=0;
LEDBuf[i]=0x00; //关闭相应位;
while(m!=10){DisplayLED();m++; } //延时;
m=0;
LEDBuf[j] = LEDMAP[KEY]; //重新放回设定值;
{ KEY=k;
LEDBuf[i] = LEDMAP[KEY];//高三位保存设定值;
LEDBuf[i+3] =LEDBuf[i];//保存原值;
if(i==0) { b= (KEY%10)*10; }
if(i==1) { c= (KEY%10);FREF= b+c; }
j=i;
i++;
}
}
if(i==2)i=0; //第二位设定好,返回第一位;
//******************地址定义*********************************
xdata unsigned char IN _at_ 0x8001; // 键盘读入口