种基于C8051F单片机的直流无刷电机转速控制系统.docVIP

种基于C8051F单片机的直流无刷电机转速控制系统.doc

  1. 1、本文档共4页,可阅读全部内容。
  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文档。上传文档
查看更多
无刷直流电机内置3个霍尔效应传感器,用来检测转子的位置,也决定电机的换相,并可以根据该信号来计算电机的转速。当电机正常运行时,通过霍尔传感器可得到3个脉宽为180度电角度的互相重叠的信号,而电机转速的改变可以从位置传感器输出脉冲频率的改变上反映出来,因此可以利用单片机对这个 脉冲信号进行监测得到电机转速。因频率和转速成正比测量,所以测出输出脉冲的频率即可计算出转速。另外,为了提高精度,高速(>/1000HZ)采用测频法,低速(<1000HZ)采用测周法。   将脉冲信号输出与INT0连接,采用INT0中断对转速脉冲计数,每1s读一次计数值,将此值与预设的转速值比较,若大于预设的转速值,则减小DAC0的数值;若小于预设的转速值,则增加DAC0的值,调整电机的转速直到转速值等于预设定的值。电机当前的转速值可在七段数码管上显示,在电机的可控范围内控制电机转速等于预设值。 单片机程序采用C51完成,部分源程序如下: 1、系统时钟初始化,采用18.432MHZ外部晶振: ? void?SYSCLK_Init?(void) ?? { ?? ???????int?i;?????????????????????????????//延时计数器 ?? ???????OSCXCN=0x67;????????????????????//开启外部振荡器18.432MHz晶体 ?? ???????for(i=0;i<256;i++)?;????????//等待振荡器启振 ?? ???????while(!(OSCXCN&0x80))?;???????//等待晶体振荡器稳定 ?? ???????OSCICN=0x88;??????????????????//选择外部振荡器为系统时钟源并允许丢失时钟检测器 ?? } ?? ?2、IO口初始化 ? void?PORT_Init?(void) ?? ?? ??????XBR0????=0x07;?????????????????????//使能SMBus,SPI0,和UART0 ?? ??????XBR1????=0x04;????????????????????//P1.0<---int0 ?? ??????XBR2????=0x40;????????????????????//使能数据交叉开关和弱上拉 ?? ??????EMI0CF??=0x27; ?? ??????EMI0TC??=0x21; ?? ??????P74OUT??=0xFF; ?? ??????P0MDOUT?=0x15; ?? ??????P1MDOUT?|=0x3C;??????//P1.2-P1.5推挽输出 ?? ??????P1?&=?0xc3;?????//P1.2-P1.5=0 ?? ?? 3、定时器0初始化,定时时间为1ms ? ?void?Timer0_Init?(void) ?? { ?? ????????CKCON|=0x8; ?? ????????TMOD|=0x1;?????????????????????//16位 ?? ?????????Count1ms=10; ?? ????????TR0?=?0;?????????????????????????//停止定时器0 ?? ????????TH0?=?(-SYSCLK/1000)?>>?8;???????//设初值,1ms时溢出 ?? ????????TL0?=?-SYSCLK/1000; ?? ????????TR0?=?1;??????????????????????//开启定时器0 ?? ????????IE|=?0x2;? ?? } ?? 4、Timer0中断: ? void?Timer0_ISR?(void)?interrupt?1???????????? ?? { ?? ????TH0?=?(-SYSCLK/1000)?>>?8;?? ?? ????TL0?=?-SYSCLK/1000; ?? ????if?(Count1ms) ?? ????{ ?? ????????Count1ms--; ?? ????} ?? ????if?(Count1s)? ?? ????{ ?? ????????Count1s--;??????????????????//Count1s初值为1000 ?? ????} ?? ????else?? ????{ ?? ????????Count1s=1000; ?? ????????SaveMotorCount=MotorCount;??????????//MotorCount为测得每秒脉冲个数 ?? ????????MotorCount

文档评论(0)

海川电子书城 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档