微机原理 无刷直流风扇调速与测速

  • 格式:doc
  • 大小:892.37 KB
  • 文档页数:15

█ █ █ █ 工 学 院

微机原理

(3级)项目报告

项目名称: 微机原理课程设计

项目题目: 无刷直流风扇调速与测速

指导教师: ███

系 别: 机电系 专 业: 机械设计制造及其自动化

组员信息 学号: 姓 名: 王██

组员信息 学号: 姓 名: 郭██

完成时间: 2014 年 12 月 01 日至 2016 年 1 月 3 日

成绩: 评阅人:

目录

一、学习目标....................................................(1)

二、项目要求....................................................(1)

三、转速测量和调节系统的硬件构成................................(1)

四、程序流程图并说明方案思路....................................(3)

五、风扇转速与占空比之间的关系表格和曲线........................(4)

六、设计程序....................................................(5)

七、分析设计过程出现的问题......................................(12)

八、方案总结....................................................(13)

1 一、 学习目标

本次系统作业的目的在于:

① 通过脉冲宽度调节实现无刷直流风扇转速的改变;

② 借助风扇转动时产生的脉冲信号,测量风扇的转速并显示;

③ 比较每组风扇从某一转速(600r/min)到另一转速(2000r/min)稳定运转的所需要的时间。通过比较试验结果的估算结果并讨论结果差异的主要原因,让学生展示对无刷直流风扇数学模型建立和调节方法局限性有深入理解。

二、 项目要求

检查项目 要求

转速显示 风扇转速能够显示在LED上,转速单位是r/min,刷新周期为1秒钟左右

风扇转速可调 风扇转速可以改变,根据要求转速在700-1400r/min

风扇转速与显示 通过简单方法给风扇加负载,随着转速的下降应该看到转速变化的显示

转速指令输入环节 通过串口或键盘输入

给定转速 给定某一转速,1200-1500之间,看显示转速的稳定性

转速调节功能 在稳定转动条件下1500r/min,在30cm处加载一个外加一个风扇,对照加载前后的稳态转速

回答问题 随机提出有关转速测量、PWM输出和转速控制方面的问题,要有针对性,检查设计过程中的付出。

三、 系统硬件构成

2

3 风扇电路:

接线:黄线接Vcc,黑线接地,绿线接P3^2,蓝线接P2^5。

输出:OC输出,如下图

四、画程序流程图并说明方案思路

开始

初始化

中断产生PWM波

显示转速和占空比 查询是否需要反馈调整

查询是否收到串口数据

查询风扇转速是否更新 查询有无按键操作

调整占空比

更新目标转速

刷新数码管缓存数据

计算需要的占空比 Y

Y

Y

Y N

N

N

N

4 程序主要用查询法判断需要执行的操作,并且利用中断处理函数来产生各种对应的标志位来通知主循环,在主循环中进行要求的运算。

其中T0定时约500us,它的每次中断相当于输出一个载波脉冲,实际上是用载波脉冲数为200个,载波周期为500us的方式构成周期为100ms的PWM波。T1用做波特率发生器。T2定时60ms。每次T2中断能重置一次按键处理标志位,这个标志位能保证每60ms内只允许处理一次按键操作,让按键处理既能高速增减,也能准确;此外当有合计25次T2的中断发生时,它能保存当前的转速值并且通知主循环刷新数码管显示请况,因此我们计算转速的方式是“统计1.5s内风扇的转动圈数”。利用在T2中断的定时判断,也能把当前数码管的显示请况发回PC机。

串口通讯方面,也是利用一个标志位来申明是否接受了数据。使用“操作符+操作数据”的5字节字符串数据格式,例如用“A0980”代表需要风扇按n=980r/min的速度运行。通知标志被主循环检测到的时候,会将串口数据检查并且保存成整数形式,方便后续函数的调用。当串口数据不合理时,会发送信息到PC机。

五、风扇转速与占空比之间的关系表格和曲线

编程实现单片机给PC定时发送转速与占空比数据后,取对应的数据制表如下。

占空比(%) 100 95 90 85 80 75 70 65 60 55 50

转速n/(r/min) 2140 1960 1820 1740 1680 1600 1500 1420 1300 1180 1060

占空比(%) 45 40 35 30 25 20 15 10 5 0

转速n/(r/min) 900 740 580 440 100 0 0 0 0 0

将500个转速与占空比数据拟合成关系曲线如下

5 可以发现,在风扇正常转动时,转速与占空比有着正相关的关系,占空比越大,风扇的转速越高。此外,当占空比小于26%时,风扇停转。

六、设计程序

1、主程序:

#include

#define jingzhen 11059200UL /*使用11.0592M晶体*/

#define botelv 9600UL /*波特率定义为9600*/

volatile unsigned char sending;

sbit dula =P2^6; //段选信号的锁存器控制

sbit wela =P2^7; //位选信号的锁存器控制

sbit PwmOut=P2^5; //PWM输出位置 蓝线

sbit need_steady=P3^4; //接地后开始调整

sbit HideValue =P3^5; //接地后显示目标转速

sbit K3 =P3^6; //增加占空比按钮

sbit K4 =P3^7; //减少占空比按钮

unsigned char code wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管各位的码表

unsigned char code duan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0-9的码表

unsigned char SPEED,SPEED_temp,count_time,count_send,wait;

unsigned char PWM_count,PWM_turn,PWM_max; //控制PWM波的计数,转变值,周期个数,

unsigned char Number[8]={0},value[6]={0}; //数码管显示缓存和串口字符串数据缓存

int Target;

bit flag=0,flag_k=0,flag_send=0,flag_direct=0; //通知标志

6

void Timer0Init(void); //初始化函数

void Timer2Init(void);

void Ext0Init(void);

void UARTInit(void);

void check();

void VALUE_To_Num(int num,unsigned char d); //数据填入数码管函数

void direct(); //直接与反馈调节PWM函数

void adjust();

void Display();

void send(unsigned char d);

void sendc(unsigned char * pd);

void sendc_num(unsigned char * pd);

void main()

{

flag_direct=0;

flag_send=0;

wait=5;

PWM_count=0,PWM_turn=170,PWM_max=200;

Timer0Init();

Timer2Init();

Ext0Init() ;

UARTInit() ;

need_steady=1; //接地后开始调整

HideValue =1; //接地后显示目标转速

K3 =1; //增加占空比按钮

K4 =1; //减少占空比按钮

while(1) //主循环

{

if(flag_k) //控制每60ms允许通过按键调整一次PWM_turn

{

if(!K3&&PWM_turn<190) PWM_turn++;

if(!K4&&PWM_turn>10 ) PWM_turn--;

flag_k=0;

}

if(flag_direct)

{

check();

direct();

flag_direct=0;

wait=4; //传送了直接值后不能马上进行反馈调整,误差太大了

}

if(flag) //控制约1.5s允许调整数码管显示值