基于PWM的电机调速系统设计_第1页
基于PWM的电机调速系统设计_第2页
基于PWM的电机调速系统设计_第3页
基于PWM的电机调速系统设计_第4页
基于PWM的电机调速系统设计_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

...wd......wd......wd...基于PWM的电机调速系统实验目的:1.学会并掌握可keil软件的使用;2.学会并掌握protues软件的使用;3.通过实验稳固单片机相关知识和检验自身动手能力实验要求:掌握单片机相关知识,利用调PWM占空比的方式来控制直流电机的转速,并且在led数码管上显示转速。实验设备和仪器:1.89c51单片机最小系统2.直流电机3.示波器实验内容:本次实验设计是由小组五个成员共同完成基于PWM的电机调速系统并完成实物搭建和撰写实验报告。本次实验小组共提供了两个方案,方案一和方案二,两个方案各自具有优缺点,详细内容会在下面给出。方案一实验步骤:1.利用protues画电路图,电路图如图1所示:图1:方案一电路图2.根据电路图编写C语言代码:代码如下:#include<reg51.h>sbitPWM=P2^7;sbitCS3=P2^3;sbitCS2=P2^2;sbitCS1=P2^1;sbitCS0=P2^0;sbitkey1=P1^0;sbitkey2=P1^1;sbitkey3=P1^2;sbitkey4=P1^3;unsignedchartimer1;unsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};voidTime1Config();voidmain(void){ Time1Config(); while(1) { if(timer1>100)//PWM周期为100*0.5ms { timer1=0; } if(~key1) { if(timer1<30) //改变30这个值可以改变直流电机的速度 { PWM=1; } else { PWM=0; }CS0=0;CS1=0;CS2=1;CS3=0;P0=tab[3];P0=0xff;CS0=0;CS1=0;CS2=0;CS3=1;P0=tab[0];P0=0xff; } elseif(~key2) {if(timer1<50) { PWM=1; } else { PWM=0; }CS0=0;CS1=0;CS2=1;CS3=0;P0=tab[5];P0=0xff;CS0=0;CS1=0;CS2=0;CS3=1;P0=tab[0];P0=0xff; } elseif(~key3) {if(timer1<80) { PWM=1; } else { PWM=0; }CS0=0;CS1=0;CS2=1;CS3=0;P0=tab[8];P0=0xff;CS0=0;CS1=0;CS2=0;CS3=1;P0=tab[0];P0=0xff; } elseif(~key4) {if(timer1<100) { PWM=1; } else { PWM=0; }CS0=0;CS1=1;CS2=0;CS3=0;P0=tab[1];P0=0xff;CS0=0;CS1=0;CS2=1;CS3=0;P0=tab[0];P0=0xff;CS0=0;CS1=0;CS2=0;CS3=1;P0=tab[0];P0=0xff; } }}voidTime1Config(){ TMOD|=0x10;//设置定时计数器工作方式1为定时器 //--定时器赋初始值,12MHZ下定时0.5ms--// TH1=0xFE; TL1=0x0C; ET1=1; //开启定时器1中断 EA=1; TR1=1; //开启定时器 }voidTime1(void)interrupt3//3为定时器1的中断号{ TH1=0xFE;//重新赋初值 TL1=0x0C; timer1++;}3.实验仿真,局部仿真结果如图2图3所示:图2:仿真结果图〔1〕图3:仿真结果图〔2〕4.实物验证结果如图4所示:图4:方案一实物验证结果实物验证可以明显感觉到电机转速的变化,由于每个开发板不同,相比仿真程序,对实物验证程序进展了略微的修改,最终能到达要求。方案二实验步骤:1.利用protues画电路图,电路图如图5所示:图5:方案二protues电路图2.编写C语言程序代码:代码如下:#include<reg51.h>#defineucharunsignedchar#defineuintunsignedintsbitkey1=P3^1;sbitCLOCK=P2^4;sbitST=P2^5;sbitEOC=P2^6;sbitOE=P2^7;sbitPWM=P3^7;uinttemp,temp1;sbitCS3=P2^3;sbitCS2=P2^2;sbitCS1=P2^1;sbitCS0=P2^0;uchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};ucharstart;voiddelayms(uintms){ucharj;while(ms--){for(j=0;j<120;j++);}}voiddelay(uintzz);voidmain(){ P3=0;P0=0xff; TMOD=0x02; TH0=0x01; TL0=0X00; IE=0x82; TR0=1; start=0; while(1) { start=1; while(start) { ST=0;ST=1;ST=0; //启动ADC0809 while(!EOC); //查询EOC是否为1; OE=1; temp=P1; //读取A/D转化的结果 OE=0;temp1=temp/2.38;CS0=0;CS1=1;CS2=0;CS3=0;P0=tab[temp1/100];delayms(1);P0=0xff;CS0=0;CS1=0;CS2=1;CS3=0;P0=tab[temp1%100/10];delayms(1);P0=0xff;CS0=0;CS1=0;CS2=0;CS3=1;P0=tab[temp1%10];delayms(1);P0=0xff; PWM=1; //PWM输出高电平 delay(temp); //正脉冲宽度 PWM=0; //PWM输出低电平 delay(255-temp); //低脉冲宽度 } }}voidclockwave()interrupt1{ CLOCK=!CLOCK; TH0=0x01; TL0=0X00;}voiddelay(uintzz){ uintx,y; for(x=zz;x>0;x--) for(y=50;y>0;y--);}3.实验仿真,局部仿真结果如图6所示:图6:方案二仿真结果4.实物结果如图7所示:图7:方案二实物结果实验总结:本次实验提供了方案一和方案二两个方案,方案一是通过不同按键设定不同的PWM占空比从而实现对电机调速,其优点是可以设定我们自己需要的转速从而实现相对准确的调速;缺点便是只能调到设定的转速,如需调制其它速度,需要对软件代码进展改写,相对而言比较繁琐。方案二是通过滑动变阻器改变电压值从而改变PWM占空比实现电机调速,其优点是可以直接从硬件调速,快速方便;缺点就是利用滑动变阻器难以准确控制PWM占空比从而准确控制转速。方案一和方案二各有优缺点,可以对自己的需求进展选择。心得体会:通过本次的实验,小组成员都发现自己的知识面还是非常的狭窄,缺少的东西也有很多,在网上查找一些相关的资料以及在图书馆借阅了几本关于单片机方面的书籍,慢慢的懂了一些关于编程和仿真方面的问题。通过这次实验,成员们都发现各自还是存在一些问题。这些不经意的东西虽

温馨提示

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

最新文档

评论

0/150

提交评论