微机原理三级项目报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的无刷直流风扇转速测量与调节
一、项目设计要求
1、实现无刷直流电机转速的测量和控制
2、给定转速指令:由PC发送转速值,经单片机控制器,使得电机达到并稳定在指定转速上。
二、硬件设备
1、测量风扇型号:品牌:台达,型号:AFB0712HHB
2、51系列单片机学习板
3、PC
三、方案设计
1、硬件电路
USB提供+5V电源,可以实现PC机与开发板的数据通讯和程序下载。
数码管显示速度和占空比
风扇电路连接:
P1.0口接PWM波输入,P3.2口接测速脉冲输入
风扇输入和输出信号图
1、输出信号----转速输出
每转输出2个脉冲OC输出,如上图
2. OC输出的特点
外加集电极电源和负载;输出幅值任意;
注意I CMAX
3. 输入信号---PWM输入2、程序流程图
说明:
程序应用模块化进行设计,主要有初始化模块、显示模块、测速模块和调速模块。编程次序可按此先后进行。
(1)、初始化模块:T0和T1工作方式、标志位状态、所用单元初值、中断设置以及初始显示等。
(2)、显示模块:显示风扇转速的实测值及其对应的PWM占空比。
(3)测速模块:将0.5s测出的脉冲数即风扇每秒的转速。
(4)调速模块:通过串口通信把风扇转速设定值发给单片机,通过改变脉冲波的占空比和PI调节来控制转速的大小。
3. 占空比与转速关系:
四、设计程序:
1、主程序:
#include
#include
#include
extern unsigned char set_value; //占空比设定
//主函数
void main()
{
PS=1; //串行口中断优先级别设为高 T0_init(); //定时器0初始化
T1_init(); //定时器1初始化
EXT0_init(); //外部中断0初始化
USART_init(); //串口初始化
set_value=22;
while(1)
{
}
}
2、初始化子程序
#include
#include
//TC0初始化
//设为定时器、模式2(自动重装)
{
EA=1;
ET0=1;
TMOD |= 0x02;
TH0=TL0 = 0x00;
TR0=1;
}
//TC1初始化
//设为定时器、模式2(自动重装)
void T1_init()
{
EA=1;
ET1=0; //中断关
TMOD |= 0x20;
TH1=TL1=0xfd;
TR1=1;
}
//EXT0初始化
//负跳变沿有效、INT0(P3.2)输入脉冲
{
IT0=1;
EX0=1;
EA=1;
}
//USART初始化
//波特率9600bps
void USART_init()
{
PCON=0x40;
SCON=0x50; //模式1,允许接收
ES=1;
}
3、数码管显示子程序
#include
#include
//硬件连接
sbit DAT = P0^2;
sbit SCK = P0^0;
sbit RCK = P0^1;
//数码管驱动
xdata NUM[]={0xf5,0x05,0xb3,0x97,0x47,0xd6,0xf6,0x85,0xf7,0xd7}; //0-9数字
xdata BIT[]={0xdf,0xbf,0x7f,0xef,0xfd,0xfb,0xf7,0xfe}; //位选void dis_bit(unsigned char pos,unsigned char Data)
{
unsigned char i;
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:一个两位以下的数值void dis_word(unsigned char pos,unsigned char word)