当前位置:文档之家› 无刷直流小风扇测速微机原理三级项目方案设计

无刷直流小风扇测速微机原理三级项目方案设计


unsigned int cnt=0;
unsigned int cnt1=0;
unsigned int dc=50;
void display();
void counter();
void KeyScan();
void KeyDriver();
void KeyAction(unsigned char keycode);
{ 0x37, 0x38, 0x39, 0x28 },
{ 0x30, 0x1B, 0x0D, 0x27 } };
unsigned char code LedChar[]={
//数码管显示对应数字
的各位电平
0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
3 / 15
//按键存储
unsigned char KeySta[4][4] = {{1,1,1,1},{1,1,1,1},{1,1,1,1},{1,1,1,1}};
unsigned char code KeyCodeMap[4][4] = { { 0x31, 0x32, 0x33, 0x26 },
{ 0x34, 0x35, 0x36, 0x25 },
6 / 15
微机原理三级项目
} void display()//数码管显示函数 {
static int i=0; P0=0xFF; switch(i) {
case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=LedBuff[0];break; case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=LedBuff[1];break; case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=LedBuff[2];break; case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=LedBuff[3];break; case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=LedBuff[4];break; case 5: ADDR2=1; ADDR1=0; ADDR0=1; i=0; P0=LedBuff[5];break; default:break; } } void KeyScan()
双向译码器原理图如图 2 所示,本方案中,双向 缓冲器用于缓冲 P0 端口的电平,由于单片机 I/0 端
口无法输出输入较大的电流,双向译码器可以用于
输出输入电流以供数码管以及 LED 灯使用。
3.1.3、三八译码器 74HC138
三八译码器原理图如图 3 所示,本方案中,三八
译码器用于将三位二进制的数译码成各位输出的关
其中定时器 T0 用于辅助 PWM 波的产生;定时器 T1 用于计数,计风扇反 馈会的脉冲数;定时器 T2 用于扫描按键以及数码管和 LED 灯的显示;P0 端 口用于输出控制数码管以及 LED 灯的显示的电平; P2 端口作为按键矩阵扫描的索引;P1 部分端口用于 控制双向缓冲器和三八译码器;P3 部分端口用于输 出 PWM 波以及接受反馈脉冲。 3.1.2、双向缓冲器 74HC245
在主函数 while 循环将 按键状态计算成输入 转速对应的占重比。如 果占重比改变。
图 5 方案流程图
四、方案分析 本方案中,共由几大部分
组成,分别为主函数、按键扫 描部分、转速显示部分、PWM 波输出部分、脉冲扫描部分, 按键扫描由 T2 完成,转速显 示也由 T2 完成,PWM 波输出由 T0 产生,脉冲扫描由 T1 完成。
1
1
1
6
1
0
1
1
1
1
1
1
0
1
1
7
0
1
1
1
1
1
1
1
1
0
1
8
1
1
1
1
1
1
1
1
1
1
0
2 / 15
3.2 电路设计 电路设计图如下图 4 所示。
ቤተ መጻሕፍቲ ባይዱ
微机原理三级项目
图 4 方案电路图
1 / 15
3.3 程序流程设计 方案流程图如图 5 所示。
开始
微机原理三级项目
程序预处理 程序初始化 利用 T0 和占重比 dc 输出 PWM 波 利用 T1 计外反馈脉冲数 利用 T2 扫描按键状态以及扫描数码管显示
三、方案设计 3.1、硬件选择 本方案中,所用到的硬件共有单片机 STC89C52RC、双向缓冲器 74HC245、三八译码 器 74HC138、按键矩阵、无刷直流电风扇、LED 灯等。 3.1.1、51 系列单片机 STC89C52RC
1 / 15
微机原理三级项目
如图 1 所示为方案设计所使用的单片机的原理图,其内部资源众多,本 方案中所采用到的有定时器 T0、定时器 T1、定时器 T2、P0 和 P2 的全部 I/O 端口、P1 和 P3 部分 I/O 端口等。
TL2=0x67; display(); KeyScan(); } void counter()//计算每一个数码管的数字 { LedBuff[0] = LedChar[speed%10]; LedBuff[1] = LedChar[speed/10%10]; LedBuff[2] = LedChar[speed/100%10]; LedBuff[3] = LedChar[speed/1000%10]; LedBuff[4] = LedChar[speed/10000%10]; LedBuff[5] = LedChar[speed/100000%10];
微机原理三级项目
汕头大学工学院
(三 级 )项 目 报 告
项目名称:
微机原理三级项目
项目题目:
无刷直流风扇调速与测速
指导教师:
*******
系 别: 机电系 专 业: 机械设计制造及其自动化
姓 名:
***************
完成时间: 2015 年 10 月 10 日至 12 月 25 日
成绩:
评阅人:
一、 设计目的
微机原理三级项目
1、运用并掌握微机测控装置的经典设计过程,即电路-软件-仿真-实物的设
计调试过程;
2、通过实践,熟悉主要应用软件,Keil、Proteus 等软件的使用,并积累应
用经验;
3、锻炼了硬件设计和调试水平,提高了工程应用的直观经验;
4、对 PWM 驱动直流电机、电机带动风扇的模型建立感性认识;
系,其二进制与为输出的对应关系如下表 1 所。
表 1 三八译码器译码关系
数值
__ __ __ __ __ __ __ __
A0 A1 A2 Y0 Y1 Y2 Y3 Y4 Y5 Y6 Y7
1
0
0
0
0
1
1
1
1
1
1
1
2
1
0
0
1
0
1
1
1
1
1
1
3
0
1
0
1
1
0
1
1
1
1
1
4
1
1
0
1
1
1
0
1
1
1
1
5
0
0
1
1
1
1
1
0
5、学习微机编程的技术,积累编程和软件调试经验;
6、在集体项目活动中锻炼组织、分工协调能力。
二、任务要求 1、风扇转速能够显示在数码管上,转速单位为 r/min,刷新周期为 1 秒左右; 2、风扇转速可以改变,可调范围在 700-1400r/min; 3、通过简单发放给风扇加负载,随着转速的下降,可以再数码管上看到转 速变化的显示; 4、通过串口或按键输入转速,使风扇能够达到输入的转速; 5、给定在 1200-1500r/min 的转速,显示出稳定的转速; 6、在稳定的转速条件下,1500r/min,在 30cm 处加载一个外加风扇,对照 加载前后的稳态转速变化; 7、随机提出有关转速测量、PWM 输出和转速控制方面的问题,要有针对性, 检查设计过程中的付出。
}
keyout++;
经调试,占重比与转速之 间对应的关系如下图 6 所示。
各段都进行计算,得到可 得到转速与占重比的关系。
2 / 15
五、方案程序 本方案的程序如下:
#include"reg52.h"
微机原理三级项目
sfr T2MOD=0xC9;//定时器 T2 的控制寄存器地址 sbit PWMOUT=P3^7; sbit ADDR0=P1^0;//控制三八译码器 sbit ADDR1=P1^1; sbit ADDR2=P1^2; sbit ADDR3=P1^3; sbit ADDR4=P1^4; sbit KEY_IN_1 = P2^4; sbit KEY_IN_2 = P2^5; sbit KEY_IN_3 = P2^6; sbit KEY_IN_4 = P2^7; sbit KEY_OUT_1 = P2^3; sbit KEY_OUT_2 = P2^2; sbit KEY_OUT_3 = P2^1; sbit KEY_OUT_4 = P2^0;
7 / 15
for (k=0; k<4; k++)
微机原理三级项目
{
if ((keybuf[keyout][k] & 0x0F) == 0x00)
{KeySta[keyout][k] = 0;}
else if ((keybuf[keyout][k] & 0x0F) == 0x0F)
相关主题