logo

您所在位置网站首页 > 海量文档  > 理工科 > 机械/制造

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

本文档一共被下载: ,您可全文免费在线阅读后下载本文档。

  • 支付并下载
  • 收藏该文档
  • 百度一下本文档
  • 修改文档简介
全屏预览

下载提示

1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
无刷直流电机内置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

发表评论

请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码: 点击我更换图片

“原创力文档”前称为“文档投稿赚钱网”,本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】。原创力文档是网络服务平台方,若您的权利被侵害,侵权客服QQ:3005833200 电话:19940600175 欢迎举报,上传者QQ群:784321556