网站大量收购独家精品文档,联系QQ:2885784924

89C52单片机控制PWM调速电路实现小功率直流电机的转速.docVIP

89C52单片机控制PWM调速电路实现小功率直流电机的转速.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
89C52单片机控制PWM调速电路实现小功率直流电机的转速调节,并要将其实时转速用LED管显示出来。而本系统必须符合以下几点要求: (1) 在(1000—5500)转/分 内对直流电机进行任意调速,最小调速级差为1转/分。 (2)??电机能在所设速度下稳定运转,运转速度与设定速度之差小于±20转/分。 (3)??电机启动和加减80%额定负载时,其转速能迅速回到设定值,转速超调±5%内。 (4)??利用按键和LED数码管设置速度,设置方便,快捷。 (5)??利用LED数码管实时显示电机速度。 (6)??电机能进行正反转控制。 ???????? 控制方面,本设计是采用定时器控制I/O口输出PWM信号驱动斩波电路控制电机运转和调速;利用单片机外部中断引脚的捕获功能、电机同轴带缺口的圆盘、光电耦合器来测量转速;并将测得转速和设定转速进行PI运算后输出,实现闭环控制;转向调节则是用的桥式电路。显示是利用8位LED数码管,用按键进行设定。 下面简单介绍下硬件组成和一些软件原理: 一、硬件电路。 ???????? 1、单片机选用的是STC的89C52,20MHz晶振。 ???????? 2、显示部分比较简单,用的8位7段数码管同时显示设定速度和实时速度。采用74LS164串行移位输出,只占用单片机3个I/O口,刷新频率100Hz。 ???????? 3、PWM驱动电路。使用了9012和8050两个三极管来驱动,相信网上很多的,也不用我多说,只是别忘了加上续流二极管和两个三极管之间的限流电阻就是。 ????? ?????????????????????????????????? ???????? 4、测速电路。测速电路用的是光耦测量转动圆盘引起的脉冲宽度,从而可得单片机的实时速度,精度很高,可达千分之一。用的是外部中断的。。。好像是捕获模式,忘记了~呵呵! ???????? 5、转向调节电路。转向调节,由于是后来加上去的,所以就没有使用单片机控制,直接用硬件实现,但其实原理是一样的。原理是利用开关控制继电器,然后控制桥路对电机实施转向控制。另外用一个同轴电机按正反方向接2个LED用来指示方向。PS:因为这是小功率电机,所以就算没有制动电路,强制转向,也不会对电机造成损坏。 二、软件方面 ???????中断方面,本程序一共用了3个中断源:定时器0,定时器2以及外部中断1,它们的优先级分别为:定时器0、外部中断1为高优先级,定时器2为低优先级。另外还用了计数器1,用做计算脉冲宽度,与外部中断1一起构成测速系统。 ????? 显示部分程序不多说,按键消抖动什么的也是街知巷闻的了。本设计中,重点是3个,PWM调速和测速,还有PI运算。 ????? 1、PWM的调速原理是通过调节一个斩波周期中的脉冲占空比来调节电机功率而达到调速目的。本设计中,PWM的斩波周期为1ms,那也就是说斩波频率为1KHz,在理论上能达到1‰线性可调,也就是能以0.1%的调节精度来调节PWM占空比。程序如下:(放中断中进行) void time0_int(void) interrupt 1 { TH0= (time0_tmp/256); TL0= (time0_tmp%256); if(cut == 1) { time0_tmp = 65536-time0_set*20/12; cut = 0; } else { time0_tmp = 65536-(time0 - time0_set)*20/12; cut = 1; ????????? }??????? } ???? ????? 2、测速系统的工作原理为:利用电机轴上带的圆盘的缺口,引起光电开关产生高电平脉冲,单片机就采集此脉冲的宽度,加以计算,得出其实时速度。 获取脉冲宽度值子函数如下: void getwidth_1() { TH1 = 0; TL1 = 0; n = 0; n1 = n; while(INT1==1((n-n1)30))//n为每1MS +2 {} if(INT1==0) TR1 = 1; //计数器1打开 else goto out; //IE1 = 0;//中断请求标志 EX1 = 1;//外部中断1启动 n = 0; n1 = n; while(m==0((n-n1)30)) {} if(m==0)//M=1,则已经进入out_int1中断,若等于0,则说明30MS延时已过 { TH1_1 = 0; TL1_1 = 0; } out: IE1 = 0;//中断请求标志 m = 0; EX1 = 0;//外部中断允许位 TR1 = 0; width_1 = (TH1_1*256+TL1_1);//timepr=脉冲宽度 /μS } 另外为了稳定测得的转速

文档评论(0)

文档分享 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档