《微机原理无刷直流风扇调速与测速分析.doc》由会员分享,可在线阅读,更多相关《微机原理无刷直流风扇调速与测速分析.doc(18页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 工 学 院微机原理(3级)项目报告项目名称: 微机原理课程设计 项目题目: 无刷直流风扇调速与测速 指导教师: 系 别: 机电系 专 业: 机械设计制造及其自动化 组员信息 学号: 姓 名: 王 组员信息 学号: 姓 名: 郭 完成时间: 2019 年 12 月 01 日至 2019 年 1 月 3 日 成绩: 评阅人:第 15 页目录一、 学习目标.(1)二、 项目要求.(1)三、 转速测量和调节系统的硬件构成.(1)四、 程序流程图并说明方案思路.(3)五、 风扇转速与占空比之间的关系表格和曲线.(4)六、 设计程序.(5)七、 分析设计过程出现的问题.(12)八、 方案总结.(13)一
2、、 学习目标本次系统作业的目的在于:通过脉冲宽度调节实现无刷直流风扇转速的改变;借助风扇转动时产生的脉冲信号,测量风扇的转速并显示;比较每组风扇从某一转速(600r/min)到另一转速(2000r/min)稳定运转的所需要的时间。通过比较试验结果的估算结果并讨论结果差异的主要原因,让学生展示对无刷直流风扇数学模型建立和调节方法局限性有深入理解。二、 项目要求检查项目要求转速显示风扇转速能够显示在LED上,转速单位是r/min,刷新周期为1秒钟左右风扇转速可调风扇转速可以改变,根据要求转速在700-1400r/min风扇转速与显示通过简单方法给风扇加负载,随着转速的下降应该看到转速变化的显示转速
3、指令输入环节通过串口或键盘输入给定转速给定某一转速,1200-1500之间,看显示转速的稳定性转速调节功能在稳定转动条件下1500r/min,在30cm处加载一个外加一个风扇,对照加载前后的稳态转速回答问题随机提出有关转速测量、PWM输出和转速控制方面的问题,要有针对性,检查设计过程中的付出。三、 系统硬件构成风扇电路:接线:黄线接Vcc,黑线接地,绿线接P32,蓝线接P25。输出:OC输出,如下图四、 画程序流程图并说明方案思路开始初始化中断产生PWM波显示转速和占空比查询是否需要反馈调整查询是否收到串口数据查询风扇转速是否更新查询有无按键操作调整占空比更新目标转速刷新数码管缓存数据计算需要
4、的占空比YYYYNNNN程序主要用查询法判断需要执行的操作,并且利用中断处理函数来产生各种对应的标志位来通知主循环,在主循环中进行要求的运算。其中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)21401960182017401680160
6、015001420130011801060占空比(%)454035302520151050转速n/(r/min)90074058044010000000将500个转速与占空比数据拟合成关系曲线如下可以发现,在风扇正常转动时,转速与占空比有着正相关的关系,占空比越大,风扇的转速越高。此外,当占空比小于26%时,风扇停转。六、设计程序1、主程序:#include #define jingzhen 11059200UL /*使用11.0592M晶体*/ #define botelv 9600UL /*波特率定义为9600*/volatile unsigned char sending;sbit du
7、la =P26;/段选信号的锁存器控制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,0
8、x7d,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 Number8=0,value6=0;/数码管显示缓存和串口字符串数据缓存int Target;bit flag=0,flag_k=0,flag_send=0,flag_direct=0;/通知标志void Timer0Init(void);/初始化函数void Timer2Ini
9、t(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
10、;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_turnif(!K3&PWM_turn10 ) PWM_turn-;flag_k=0;if(flag_direct)check();direct();flag_direct=0
11、;wait=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(
12、Number);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)I
13、NT0=1;/置高接收口P3.2PX0=1;/设置高中断优先级EA=1;/全局中断开IT0=1;/边沿触发EX0=1;/外部中断0开 void UARTInit(void)/EA=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;/允许接收 EA=1;/允许
14、中断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 unsigned char write_point
15、=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_point=0;/一旦收到A_ _ _ _,指针
16、回到开头并且允许接受数据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;count_send=0;4、 辅助处理程序 检查串口数据voi
17、d 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_turn=200; 反馈调节PWM函数void adjust()double
18、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; 数码管显示程序void Display()unsigned char num;unsigned int
19、 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 *
20、pd)unsigned char t;for(t=0;t8;t+)if(t=4) send( );send(*pd)+0); /发送一个字符pd+; /移动到下一个字符send(n);七、 分析设计过程出现的问题1.在设计PWM的调控方式的过程中,我们遇到了一个选择PWM波周期的问题。查阅资料后发现,PWM波的周期大小能直接影响小风扇的输出转矩。在实际测试过程中,第一次选用载波脉冲数为200个,载波周期为250us的方式构成周期为50ms的PWM。我们发现,此时使风扇恰好保持转动的占空比为35%。第二次选用载波脉冲数为200个,载波周期为500us的方式构成周期为100ms的PWM。此时使风扇
21、恰好保持转动的占空比为26%,并且相对上一次的选择在调速过程中,相同的占空比能输出更大的转速。因此相对的,第二种方案调速能力更加优秀。最终选择了用载波脉冲数为200个,载波周期为500us的方式构成周期为100ms的PWM。2. 设计中关于测定转速与占空比的关系的次序也是一个问题。在设计的后期,我们注意到从高占空比测到低占空比以及从低到高测,得到的PWM-n关系曲线在占空比相同时,转速的差值可以很大,这直接影响到占空比直接调节函数的精度。为解决这个问题,利用随机给定占空比的方式测速更为贴合实际的使用情况。因此后期中创建了一个专门用来测定转速与占空比的关系的程序,它能随机指定占空比并且定时几秒后
22、把当前稳定的PWM-n关系发回PC机。八、 方案总结按照项目报告的检查要求,我们将项目过程分阶段进行。第一阶段,初步实现用按键调节占空比并输出PWM波让风扇转动;第二阶段让数码管能显示PWM波的占空比情况;第三阶段加入转速测量功能并且用数码管显示转速;第四阶段加入串口通讯功能,主要实现用单片机接受数据;第五阶段制作风扇转速与占空比之间的关系表格和曲线;第六阶段根据关系曲线选择合适的调节方案;最后整合程序并且完成项目实践报告。从结果上看,我们的无刷直流风扇系统已经能实现所有要求的功能,能做到调速与自动稳定转速。为提高该系统的性能,我们可以考虑从改善稳定转速的方案入手,这需要对PID调节有深入的了解。