微机原理课程设计无刷直流风扇调速与测速_第1页
微机原理课程设计无刷直流风扇调速与测速_第2页
微机原理课程设计无刷直流风扇调速与测速_第3页
微机原理课程设计无刷直流风扇调速与测速_第4页
微机原理课程设计无刷直流风扇调速与测速_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 工 学 院微机原理(3级)项目报告项目名称: 微机原理课程设计 项目题目: 无刷直流风扇调速与测速 指导教师: 系 别: 机电系 专 业: 机械设计制造及其自动化 组员信息 学号: 姓 名: 王 组员信息 学号: 姓 名: 郭 完成时间: 2014 年 12 月 01 日至 2016 年 1 月 3 日 成绩: 评阅人:目录1、 学习目标.(1)2、 项目要求.(1)3、 转速测量和调节系统的硬件构成.(1)4、 程序流程图并说明方案思路.(3)5、 风扇转速与占空比之间的关系表格和曲线.(4)6、 设计程序.(5)7、 分析设计过程出现的问题.(12)8、 方案总结.(13)一、 学习目标

2、本次系统作业的目的在于:通过脉冲宽度调节实现无刷直流风扇转速的改变;借助风扇转动时产生的脉冲信号,测量风扇的转速并显示;比较每组风扇从某一转速(600r/min)到另一转速(2000r/min)稳定运转的所需要的时间。通过比较试验结果的估算结果并讨论结果差异的主要原因,让学生展示对无刷直流风扇数学模型建立和调节方法局限性有深入理解。二、 项目要求检查项目要求转速显示风扇转速能够显示在led上,转速单位是r/min,刷新周期为1秒钟左右风扇转速可调风扇转速可以改变,根据要求转速在700-1400r/min风扇转速与显示通过简单方法给风扇加负载,随着转速的下降应该看到转速变化的显示转速指令输入环节

3、通过串口或键盘输入给定转速给定某一转速,1200-1500之间,看显示转速的稳定性转速调节功能在稳定转动条件下1500r/min,在30cm处加载一个外加一个风扇,对照加载前后的稳态转速回答问题随机提出有关转速测量、pwm输出和转速控制方面的问题,要有针对性,检查设计过程中的付出。三、 系统硬件构成风扇电路:接线:黄线接vcc,黑线接地,绿线接p32,蓝线接p25。输出:oc输出,如下图4、 画程序流程图并说明方案思路开始初始化中断产生pwm波显示转速和占空比查询是否需要反馈调整查询是否收到串口数据查询风扇转速是否更新查询有无按键操作调整占空比更新目标转速刷新数码管缓存数据计算需要的占空比yy

4、yynnnn 程序主要用查询法判断需要执行的操作,并且利用中断处理函数来产生各种对应的标志位来通知主循环,在主循环中进行要求的运算。其中t0定时约500us,它的每次中断相当于输出一个载波脉冲,实际上是用载波脉冲数为200个,载波周期为500us的方式构成周期为100ms的pwm波。t1用做波特率发生器。t2定时60ms。每次t2中断能重置一次按键处理标志位,这个标志位能保证每60ms内只允许处理一次按键操作,让按键处理既能高速增减,也能准确;此外当有合计25次t2的中断发生时,它能保存当前的转速值并且通知主循环刷新数码管显示请况,因此我们计算转速的方式是“统计1.5s内风扇的转动圈数”。利用

5、在t2中断的定时判断,也能把当前数码管的显示请况发回pc机。串口通讯方面,也是利用一个标志位来申明是否接受了数据。使用“操作符+操作数据”的5字节字符串数据格式,例如用“a0980”代表需要风扇按n=980r/min的速度运行。通知标志被主循环检测到的时候,会将串口数据检查并且保存成整数形式,方便后续函数的调用。当串口数据不合理时,会发送信息到pc机。五、风扇转速与占空比之间的关系表格和曲线编程实现单片机给pc定时发送转速与占空比数据后,取对应的数据制表如下。占空比(%)10095908580757065605550转速n/(r/min)2140196018201740168016001500

6、1420130011801060占空比(%)454035302520151050转速n/(r/min)90074058044010000000将500个转速与占空比数据拟合成关系曲线如下可以发现,在风扇正常转动时,转速与占空比有着正相关的关系,占空比越大,风扇的转速越高。此外,当占空比小于26%时,风扇停转。六、设计程序1、主程序:#include #define jingzhen 11059200ul /*使用11.0592m晶体*/ #define botelv 9600ul /*波特率定义为9600*/volatile unsigned char sending;sbit dula =p

7、26;/段选信号的锁存器控制sbit wela =p27;/位选信号的锁存器控制sbit pwmout=p25;/pwm输出位置 蓝线sbit need_steady=p34;/接地后开始调整sbit hidevalue =p35;/接地后显示目标转速sbit k3 =p36;/增加占空比按钮sbit k4 =p37;/减少占空比按钮unsigned char code wei=0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f;/数码管各位的码表unsigned char code duan=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0

8、x07,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 number8=0,value6=0;/数码管显示缓存和串口字符串数据缓存int target;bit flag=0,flag_k=0,flag_send=0,flag_direct=0;/通知标志void timer0init(void);/初始化函数void timer2init(vo

9、id);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;wai

10、t=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_turnif(!k3&pwm_turn10 ) pwm_turn-;flag_k=0;if(flag_direct)check();direct();flag_direct=0;wai

11、t=4;/传送了直接值后不能马上进行反馈调整,误差太大了if(flag)/控制约1.5s允许调整数码管显示值value_to_num(500*(speed_temp)/25),4);if(wait0) wait-;/减缓约4.56s才允许反馈调整if(0=wait)&(!need_steady)/满足条件时启用转速反馈调整adjust();flag=0;value_to_num(pwm_turn,0);if(!hidevalue) value_to_num(target,0);/直接按下k2显示当前的目标转速的值,可以检查有没有收到串口数据if(flag_send)sendc_num(numb

12、er);flag_send=0;display();2、 初始化子程序void timer0init(void)tmod |= 0x01;/t0 16位定时tl0 = 0x33;/设置定时初值th0 = 0xfe;/设置定时初值tf0 = 0;/清除tf0标志ea = 1; /总中断打开et0 = 1; /定时器0中断打开tr0 = 1;/定时器0开始计时void timer2init(void)rcap2h = 0x28;rcap2l = 0x00;/定时60msea=1;/打开总中断et2=1;/打开定时器2中断tr2=1;/定时器2开始计时void ext0init(void)int0=

13、1;/置高接收口p3.2px0=1;/设置高中断优先级ea=1;/全局中断开it0=1;/边沿触发ex0=1;/外部中断0开 void uartinit(void)/9600bps11.0592mhzea=0;/暂时关闭中断tmod|=0x20;/定时器1工作在模式2,自动重装模式scon=0x50;/串口工作在模式1th1=256-jingzhen/(botelv*12*16); /计算定时器重装值tl1=256-jingzhen/(botelv*12*16);pcon|=0x80;/串口波特率加倍ps=1;/给串口中断高优先级es=1;/串行中断允许tr1=1;/启动定时器1ren=1;/

14、允许接收 ea=1;/允许中断3、 中断操作程序/* 外部中断0统计转速脉冲*/void ext0(void) interrupt 0 /负责统计速度值,信号下降沿产生中断speed+;/* 定时器0负责调控pwm波*/void time0(void) interrupt 1 using 1/负责产生pwm波tl0 = 0x33;/设置定时初值th0 = 0xfe;/设置定时初值pwmout=pwm_count=pwm_max)/pwm_count达到顶端时回到初始pwm_count=0;/* 串行中断服务函数接受速度控制命令*/void serial() interrupt 4static

15、unsigned char write_point=0;static bit read_able=0;unsigned char temp;if(ri)/判断是接收中断产生ri=0;/标志位清零temp=sbuf;/读入缓冲区的值if(read_able)valuewrite_point=temp;write_point+;if(write_point4)/只读入4个字节 flag_direct=1;/通知主函数可以调节pwm了read_able=0;write_point=0;wait=4;/立即暂停反馈调整if(temp=a)/a作为特征码检测,也可以使用其他的字母来规定控制代码write

16、_point=0;/一旦收到a_ _ _ _,指针回到开头并且允许接受数据read_able=1;if(ti) /如果是发送标志位,清零ti=0;sending=0; /清正在发送标志/* 定时器2调节数码管的刷新速度*/void time2(void) interrupt 5 using 1 /定时器2中断tf2=0;/必要的软件清中断标志count_time+;flag_k=1;if (count_time=25)flag=1;speed_temp=speed;speed=0;count_time=0;count_send+;if (count_send=5)flag_send=1;cou

17、nt_send=0;4、 辅助处理程序/* 检查串口数据*/void check()unsigned char i;for(i=0;i4;i+)if(valuei9)valuei=0;target=(value0-0)*1000+(value1-0)*100+(value2-0)*10+(value3-0);if(target2180|target3;i-)numberi-d=num%10;num=num/10;/* 直接调节pwm函数*/void direct()if(target2180|target280)/禁止不可调节范围的pwm return;if(target200) pwm_tu

18、rn=200;/* 反馈调节pwm函数*/void adjust()double num;num=speed_temp*20;if(target2180|target280)/禁止不可调节范围的pwm return;if(target1520)pwm_turn=pwm_turn+( 0.00006*target + 0.01311)*(target-num);/原理是dy=f(x)*dxelse /属于比例调节pwm_turn=pwm_turn+(-0.00018*target + 0.4299)*(target-num);if(num200) pwm_turn=200;/* 数码管显示程序*

19、/void display()unsigned char num;unsigned int m;for(num=0;num0;m-); /时间间隔短,利用人眼的余辉效应,觉得每个数码管都一直在亮。/*- 发送一个字节-*/void send(unsigned char d) /发送一个字节的数据,形参d即为待发送数据。sbuf=d; /将数据写入到串口缓冲sending=1; /设置发送标志while(sending); /等待发送完毕/*- 发送一个字符串-*/void sendc(unsigned char * pd)while(*pd)!=0) /发送字符串,直到遇到0才结束send(*pd); /发送一个字符pd+; /移动到下一个字符void sendc_num(unsigned char * pd)unsigned char t;for(t=0;t8;t+)if(t=4) send( );send(*pd)+0); /发送一个字符pd+; /移动到下一个字符send(n);7、 分析设计过程出现的问题1.在设计pwm的调控方式的过程中,我们遇到了一个选择pwm波周期的问题。查阅资料后发现,pwm波的周期大小能直接影响小风扇的输出转矩。在实际测试过程中,第一次选用载波脉冲数为200个,载波周期为250us的方式构成周期为50ms的pwm。我们发现,此时使风扇恰

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论