微机原理三级项目报告.docx
《微机原理三级项目报告.docx》由会员分享,可在线阅读,更多相关《微机原理三级项目报告.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理三级项目报告
基于单片机的无刷直流风扇转速测量与调节
一、项目设计要求
1、实现无刷直流电机转速的测量和控制
2、给定转速指令:
由PC发送转速值,经单片机控制器,使得电机达到并稳定在指定转速上。
二、硬件设备
1、测量风扇型号:
品牌:
台达,型号:
AFB0712HHB
2、51系列单片机学习板
3、PC
三、方案设计
1、硬件电路
USB提供+5V电源,可以实现PC机与开发板的数据通讯和程序下载。
数码管显示速度和占空比
风扇电路连接:
P1.0口接PWM波输入,P3.2口接测速脉冲输入
风扇输入和输出信号图
1、输出信号----转速输出
每转输出2个脉冲
OC输出,如上图
2.OC输出的特点
外加集电极电源和负载;
输出幅值任意;
注意ICMAX
3.输入信号---PWM输入
2、程序流程图
说明:
程序应用模块化进行设计,主要有初始化模块、显示模块、测速模块和调速模块。
编程次序可按此先后进行。
(1)、初始化模块:
T0和T1工作方式、标志位状态、所用单元初值、中断设置以及初始显示等。
(2)、显示模块:
显示风扇转速的实测值及其对应的PWM占空比。
(3)测速模块:
将0.5s测出的脉冲数即风扇每秒的转速。
(4)调速模块:
通过串口通信把风扇转速设定值发给单片机,通过改变脉冲波的占空比和PI调节来控制转速的大小。
3.占空比与转速关系:
占空比
0
0
0.16
0.17
0.18
0.19
0.2
0.22
0.24
0.27
0.29
0.31
转速r/s
0
1
2
3
4
5
6
7
8
9
10
11
占空比
0.35
0.38
0.42
0.46
0.51
0.54
0.61
0.74
0.84
0.94
1
转速r/s
12
13
14
15
16
17
18
19
20
21
22
四、设计程序:
1、主程序:
#include
#include
#include
externunsignedcharset_value;//占空比设定
//主函数
voidmain()
{
PS=1;//串行口中断优先级别设为高
T0_init();//定时器0初始化
T1_init();//定时器1初始化
EXT0_init();//外部中断0初始化
USART_init();//串口初始化
set_value=22;
while
(1)
{
}
}
2、初始化子程序
#include
#include
//TC0初始化
//设为定时器、模式2(自动重装)
voidT0_init()
{
EA=1;
ET0=1;
TMOD|=0x02;
TH0=TL0=0x00;
TR0=1;
}
//TC1初始化
//设为定时器、模式2(自动重装)
voidT1_init()
{
EA=1;
ET1=0;//中断关
TMOD|=0x20;
TH1=TL1=0xfd;
TR1=1;
}
//EXT0初始化
//负跳变沿有效、INT0(P3.2)输入脉冲
voidEXT0_init()
{
IT0=1;
EX0=1;
EA=1;
}
//USART初始化
//波特率9600bps
voidUSART_init()
{
PCON=0x40;
SCON=0x50;//模式1,允许接收
ES=1;
}
3、数码管显示子程序
#include
#include
//硬件连接
sbitDAT=P0^2;
sbitSCK=P0^0;
sbitRCK=P0^1;
//数码管驱动
xdataNUM[]={0xf5,0x05,0xb3,0x97,0x47,0xd6,0xf6,0x85,0xf7,0xd7};//0-9数字
xdataBIT[]={0xdf,0xbf,0x7f,0xef,0xfd,0xfb,0xf7,0xfe};//位选
voiddis_bit(unsignedcharpos,unsignedcharData)
{
unsignedchari;
pos=BIT[pos-1];
Data=NUM[Data];
RCK=0;
for(i=0;i<8;i++)
{
SCK=0;
if(pos&0x80)
DAT=1;
else
DAT=0;
pos<<=1;
SCK=1;
delay();
}
for(i=0;i<8;i++)
{
SCK=0;
if(Data&0x80)
DAT=1;
else
DAT=0;
Data<<=1;
SCK=1;
delay();
}
RCK=1;
//delay();
}
//显示数值,两位
//输入:
pos:
显示首位word:
一个两位以下的数值
voiddis_word(unsignedcharpos,unsignedcharword)
{
dis_bit(pos++,word/10);
dis_bit(pos++,word%10);
}
//软件延时
voiddelay()
{unsignedchari;
for(i=5;i>0;i--);
}
4、测速、调速子程序
#include
#include"IT.H"
#include"Display.H"
//硬件连接
sbitfan=P1^0;//风扇脉冲输入
sbith=P0^6;//LED,测试
//全局变量
xdataunsignedcharf[]={0,0,16,17,18,19,20,22,24,27,29,31,35,38,42,46,51,54,61,74,84,94,100,100,100};//转速与占空比关系对照表
//INT0参数
volatileunsignedcharn;//转速
volatileunsignedcharp;//脉冲数
//USART参数
staticunsignedcharflag;//串口相关
unsignedcharUsart_buf[2]="00";//接收缓冲区
//PID参数
unsignedcharKp=5,Ki=1;//PID参数(PI)
staticunsignedinterror,error_re,Sum_e;//当前偏差,上一次的偏差,积分累加器
//T0参数
staticunsignedchartime;//测速计时器
unsignedcharset_value;//PWM设定值
//TC0中断
voidT0IT()interrupt1using1
{unsignedchartemp;
time++;
if(time>150)//0.5s,由于中断处理的程序过于庞大,以至于定时的理论值不能精确的算出。
{
time=0;
n=p;
p=0;
flag=0;//若串口的两位数据不是连续发送,则在下一次接收时全部刷新
temp=PID();
}
if
(1)
PWM_GENERATER(temp);//PID调节
dis_word(1,n);
dis_word(5,set_value);//显示占空比
//dis_word(3,error);
//dis_word(7,temp);
}
//TC1中断
voidT1IT()interrupt3using1
{
}
//EXT0中断
voidEX0_IT()interrupt0using1
{
p++;//脉冲计数
}
//USART中断
voidUSART_IT()interrupt4using1
{unsignedchartemp;
Usart_buf[flag]=SBUF;
flag++;
if(flag>1)
flag=0;
temp=(Usart_buf[0]-48)*10+Usart_buf[1]-48;
if(temp<23)
set_value=f[temp];
RI=0;
TI=0;
}
//PWM生成程序
//输入:
Duty_Cycle:
占空比高电平持续值
voidPWM_GENERATER(unsignedcharDuty_Cycle)
{staticunsignedcharcom_value;
com_value++;
if(com_valuefan=1;
elseif(com_valuefan=0;
else
com_value=0;
}
//PID控制器
//输入:
pidtarget:
目标值
//输出:
返回占空比(Duty_Cycle)
unsignedcharPID()
{xdataunsignedintfeedback,proportion,integral;
error_re=error;//上一次的偏差
if(set_value>f[n])//error为正值的情况
{
error=set_value-f[n];//偏差
Sum_e=Sum_e+error;//积分
feedback=Kp*error/2+Ki*Sum_e;//PID计算
}
else//error为负值的情况
{
error=f[n]-set_value;//偏差
//积分部分
if(Sum_e>error)//积分为正
Sum_e=Sum_e-error;
else//积分为负
Sum_e=0;
proportion=Kp*error/2;//比例计算
integral=Ki*Sum_e;//积分
if(integral>proportion)//PID计算
feedback=integral-proportion;
else
feedback=0;
}
return(feedback);//返回结果
}
五、方案总结
本方案基本能完成风扇转速测量与控制,达到了设计任务的要求。
通过测试,本控制系统可以根据气流和通风条件等环境对运行的影响,比较及时调整PWM波形。
但是,本方案也存在一些不足之处:
1.由于本程序的中断处理比较复杂,定时的理论值不能精确的算出,以至测量的转速不是很精确
2.由于时间关系,我们的PID控制模块只完成了PI调节,缺乏了微分调节,系统的动态性能有所下降。
六、感想
通过该项目的实践,我们加深了对单片机的定时器、计数器、中断等模块的理解。
但是万事开头难,一开始,我们只是学了相关的理论知识,对实体的单片机并不了解,遇到各种问题,比如缺乏硬件电路的了解,风扇该如何接线如何输出信号,pwm波如何输出和调节,在调试过程中难以调到稳定速度等问题。
后来结合书本,通过摸索,得出了上述程序。
尽管时间紧迫、压力大,但是我们还是灵活运用并掌握微机测控装置的经典设计过程,即电路-软件-仿真-实物的设计调试试制过程;通过实践,已经熟悉了主要应用软件,Keil、Proteus、Protel等软件的使用,并已经积累了应用经验;项目实践后,锻炼了硬件设计和调试水平,提高了工程应用的直观经验;对PWM驱动直流电机、电机带动风扇的模型有了感性认识,为后面的课程打下了基础;学习了微机编程的技术,积累了编程和软件调试经验;在集体项目活动中锻炼了组织、分工协调能力。
WelcomeTo
Download!
!
!
欢迎您的下载,资料仅供参考!