微机原理三级项目报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档