- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于51单片机三相步进电机调速系统
学校:南京理工大学
专业:机电一体化技术
姓名:卜婷婷
班级:电气123
学号:120202301
摘要
步进电机是将电脉冲信号转变为角位移或线位移的开环控制元件。在非超载的情况下,电机的转速,停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,即给电机加一个脉冲信号,电机则转过一个步距角。这一线性关系的存在,加上步进电机只有周期性的误差而无累计误差等特点,使得它在位置,速度等控制领域显得非常简单。步进电机的调速一般是改变输入步进电机的脉冲频率来实现调速的,步进电机每给一个脉冲就转动一个固定角度,这样就可以通过控制步进电机的脉冲到下一个脉冲的时间间隔来改变脉冲的频率,延时的长短来具体控制步进角来改变转速,从而实现调速功能。
一 . 步进电机
1.1步进电机的工作原理
本论文我们采用的电机是三相步进电机,其主要应用于完成调速功能。
步进电机是一种用电脉冲进行控制,将电脉冲信号转换成相位移的电机,其机械位移和转速分别与输入电机绕组的脉冲个数和脉冲频率成正比,每一个脉冲信号可以使步进电机旋转一个固定角度,脉冲的数量决定了旋转的总角度,脉冲的频率决定了电机运转的速度,当步进驱动器接收到一个脉冲信号,它就驱动步进电机按设定的方向转动一个固定的角度,他的旋转是以固定的角度一步一步运行的。可以通过控制脉冲个数来控制角位移量,从而达到准确定位的目的,同时可以通过控制脉冲频率来控制电动机的速度和加速度,从而达到调速的目的。
1.2 步进电机的特点
1·一般步进电机的精度为步进角的百分之三到百分之五;
2·步进电机外表允许的温度高,电机外表允许的最高温度应取决于不同的电机磁性材料的退磁点,一般的磁性材料的退磁点都在摄氏130度以上,所以步进电机的外表温度在摄氏80度到90度下完全正常。
3·步进电机的力矩会随转速的升高而下降。
二 单片机的选择
本次设计以AT89C51作为步进电机的控制芯片。它结构简单,并且可以在编程器上实现闪烁式的电擦写达几万次以上,使用方便等优点。而且完全兼容MCS51系列单片机的所有功能。它是一种带4k字节闪烁可编程可擦除只读存储器的低电压,高性能CMOS八位微处理器。它为很多嵌入式的控制系统提供了一种灵活性且廉价的方案。
2.1显示模块
LED数码管实际上是有七个发光管组成的8字形构成的,加上小数点就是8个。这些段分别可以用字母a,b,c,d,e,f,g,dp来表示。当数码管特定的段加上电压之后,这特定的段就会发亮,就形成了我们看到的字样了。通过分时轮流控制各个LED数码管的COM端,就使各个数码管轮流受控显示,这就是动态驱动。
P0口和P2口的前四个分别接步数显示中对数码管的字段控制及数码管片选,如图1 ,这里主要是有软件算法来实现单片机输出的控制。
图1 :显示模块
2.2工作模块
由三个键盘控制单片机。将步进电机的3个端口直接接到单片机P3.0至P3.2即可,另外3个端口可接到+12V的高电平给步进电机供电,只需在软件编写上控制算法便可以调节这三个端口的高低电平来控制步进电机的开启与停止,正反转与停止。如图2所示。
图2:工作模块
2.3 驱动模块
步进电机相当于四个绕组与三极管串联,采用星形接法。当绕组通电后再切断电源时,绕组所产生的自感电动势上边正,下边负,而且比加在绕组上的工作电压高出N倍,这个感应电压很高,对三极管产生影响,因此在绕组上并接一个续流二极管,就是为绕组的自感电动势提供一个泄放通道,消除感生电压对开关器件的影响
流经续流二极管的额定电流为200mA。
图3:驱动模块
三 程序流程图
3.1 主程序流程图
3.2按键流程
四 主电路图
五 程序部分
#include.reg51.h
#include.stdio.h
viod delay1(void);
viod delay2(viod);
viod display(int);
int bs=0;
main()
{char a,b,c,d,j,*q,
done1[8]={0x01,0x02,0x04,0x00,0x01,0x04,0x02,0x00},
done2[8]={0x03,0x06,0x05,0x00,0x03,0x05,0x06,0x00},
don3[14]={0x01,0x03,0x02,0x06,0x04,0x05,0x00,0x01,0x05,0x04,0x06,0x02,0x03,0x00},
L: a=P1;
while(!(a0x08)) //判断是否启动,若没有启动则重新判断
{P3=0
文档评论(0)