直流电机闭环调速系统
成 绩:
重庆邮电大学
自动化学院综合实验报告
题 目: 直流电机闭环调速系统 学生姓名: 必不凡 班 级:学 号: 同组人员: 指导教师:
完成时间: 第5周——第15周
一、实验名称:直流电机闭环调速系统 基本情况:
1. 学生姓名:必不凡 2. 学 号:2009212740 3. 班 级:0840901 4. 实验项目组长:必不凡 5. 同组其他成员:
6. 具体分工:必不凡:设计电路板图,协助刘飞进行程序调试 小洁:焊电路板
英雄:设计程序 7. 本人在项目组的作用描述:
我在此时验中,主要是设计电路版图,后面协助他俩完成整个实验
二、实验内容(实验原理介绍) :
1、系统设计思路
设计以A T89C51单片机控制模块为核心,由单片机控制、直流电机转速为被测量组成的控制系统。原理是利用红外线光电传感器接收直流电机转速所产生的红外信号转换成电信号传输给单片机,并调节转速的闭环调速控制系统。能实现通过调节给定的电压对直流电机的速度及转向控制;通过按钮能实现直流电机的加速减速控制。 2、系统组成 1)、主控部分
系统由stc89c52作为主控芯片,负责电机的PWM 控制信号的输出,转速测定数据的处理,转速的显示,按键的读取;
2)、电源
系统由9V 直流提供电源;
3)、电机驱动
系统的电机驱动电路主要由L298N 和7805组成,可驱动两个直流电机;
4)、测速
系统采用槽型光耦计数测速模块
5、显示
系统由两个数码管作为显示输出,由P0、P2口驱动;
三、实验结果分析(含程序、数据记录、控制算法及分析和实验总结等):
#include #include #define uchar unsigned char #define uint unsigned int
uchar code d_table[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 0x7F,0x6F ,0x77,0x7C,0x39,0x5E,0x79,0x71};//0-f的数码管编码
uchar code w_table[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; uint N = 0,tp,cesu,sd; uchar T,wx;
void delay() //误差 -0.[1**********]7us {
uchar a,b;
for(b=102;b>0;b--) for(a=3;a>0;a--);
}
void display(uchar wei,uchar dat)//显示移位 {
P2=w_table[wei]; P0=d_table[dat]; delay(); sbit d0=P3^4; sbit in3=P3^0; sbit in4=P3^1;
sbit key_1=P1^0; sbit key_2=P1^1; sbit key_3=P1^2;
P0=0x00; P2=w_table[0]; }
void xianshi(uint a,uint b) //显示函数 {
uchar i; if(b == 0) { display(7,0);} else
for(i=7;b>0;i--) {
display(i,b%10); b = b/10;
} if(a == 0) { display(3,0);} else
for(i=3;a>0;i--) { }
display(i,a%10); a=a/10;
}
void InitTr() //定时器/计数器初始化 { TMOD = 0x15; TH0 = 0x00; TL0 = 0x00; TH1 = 0x0FF; TL1 = 0x0a4; EA = 1; ET0 = 1; TR0 = 0; ET1 = 1; TR1 = 0; } bit keys1() { }
bit keys2() { bit k=0;
if(key_2==0) bit k=0; if(key_1==0)
{
delay();
if(key_1==0)
k=1; }
while(key_1==0); return k;
}
{
delay(); if(key_2==0) k=1;
}
while(key_2==0); return k;
bit keys3() { bit k=0;
if(key_3==0) { }
delay();
if(key_3==0) k=1;
while(key_3==0); return k;
}
void main() {
InitTr(); in3 = 0; in4 = 0; tp = 30; sd=50; while(1) {
if(keys1())
{ }
cesu=0; in3=0;
TR0=!TR0; TR1=!TR1;
if(keys2()) {sd=sd+5; if(sd>80) sd=80;} if(keys3())
{sd=sd-5;
if(sd
xianshi(sd,cesu); }
//定时中断
}
void Tr1Interrupt() interrupt 3 {
TH1 = 0x0FF; TL1 = 0x0a4; N++; if(N > tp) }
in3=0; if(N >= 100) {
N = 0; in3 = 1; T++; if(T >= 100) {
T = 0;
cesu = TH0*0x100+TL0; TH0 = 0x00; TL0 = 0x00;
if(abs(sd-cesu)>2)
wx=abs(sd-cesu);
}
}
else wx=1; if(cesu>sd)
tp=tp-wx; else if(cesu=100) tp=100;
附录:(原理图、程序流程图等) 1、程序流程图
2、系统框图
3、原理图
4. 实物图:
以上内容来自【淘宝博士网】 www.taobaoboshi.net