三相单三拍步进电机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
单片机驱动三相单三拍步进电机仿真设计关于单片机驱动三相单三拍步进电机仿真设计
随着生产过程机械化、电气化和自动化的不断发展,出现了各种类型的特种电动机。这些电动机的工作原理,一般与普通的异步电动机和直流电动机的基本原理近似,但是它们在性能、结构、生产工艺上各有其特殊性,多用于自动控制过程中。一般来说,这些电动机的功率不大,小的只有几分之一瓦,大的也不过几十瓦或几百瓦,属于微型电动机的范围。
步进电动机
一般电动机都是连续旋转,而步进电动却是一步一步转动的,故叫步进电动机。每输入一个冲信号,该电动机就转过一定的角度(有的步进电动机可以直接输出线位移,称为直线电动机)。因此步进电动机是一种把脉冲变为角度位移(或直线位移)的执行元件。
步进电动机的转子为多极分布,定子上嵌有多相星形连接的控制绕组,由专门电源输入电脉冲信号,每输入一个脉冲信号,步进电动机的转子就前进一步。由于输入的是脉冲信号,输出的角位移是断续的,所以又称为脉冲电动机。
随着数字控制系统的发展,步进电动机的应用将逐渐扩大。
步进电动机的种类很多,按结构可分为反应式和激励式两种;按相数分则可分为单相、两相和多相三种。
图1 反应式步进电动机的结构示意图
图1是反应式步进电动机结构示意图,它的定子具有均匀分布的六个磁极,磁极上绕有绕组。两个相对的磁极组成一组,联法如图所示。
下面介绍反应式步进电动机单三拍的基本原理。
一、单三拍通电方式的基本原理及本设计的要求
设A相首先通电(B、C两相不通电),产生A-A′轴线方向的磁通,并通过转子形成闭合回路。这时A、A′极就成为电磁铁的N、S极。在磁场的作用下,转子总是力图转到磁阻最小的位置,也就是要转到转子的齿对齐A、A′极的位置(图2a);接着B相通电(A、C 两相不通电),转了便顺时针方向转过30°,它的齿和C、C′极对齐(图2c)。不难理解,当脉冲信号一个一个发来时,如果按A→C→B→A→…的顺序通电,则电机转子便逆时针方向转动。这种通电方式称为单三拍方式。
图2 单三拍通电方式时转子的位置
采用单片机控制一个三相单三拍的步进电机工作。步进电机的旋转方向由正反转控制信号控制。步进电机的步数由键盘输入,可输入的步数分别为3、6、9、12、15、18、21、24和27步,且键盘具有键盘锁功能,当键盘上锁时,步进电机不接受输入步数,也不会运转。只有当键盘锁打开并输入步数时,步进电机才开始工作。电机运转的时候有正转和反转指示灯指示。红色指示灯亮,同时警报响。
二步进电机仿真电路图
三仿真程序
#include
#define unchar unsigned char
sbit kai_key p3^1; //开关,作锁功能sbit zheng_key p3^2; //正转
sbit fan_key p3^3; //翻转
sbit 18_key p1^0; //18步
sbit 15_key p1^1; //15步
sbit 12_key p1^2; //12步
sbit 9_key p1^3; //9步
sbit 6_key p1^4; //6步
sbit 3_key p1^5; //3步
sbit 21_key p1^6; //21步
sbit 24_key p1^7; //24步
sbit 27_key p3^0; //27步
bit flag=0; //电机正反标志位
uchar bushu,maichong=3,table_begin=0;
uchar code table[]={0x01,0x02,0x04,0x04,0x02,0x01};
//电机正反转I/O口的高低电平对应表
void delay(uchar i) //延时函数
{
uchar j,k;
for(j=i;j>0;j--)
for(k=125;k>0;k--);
}
void key()
{
//kaikey=shuo_key;
if(kai_key==0) //这里开关闭合,表示键盘锁打开。如果开关不闭合,表示上锁,电机不转
{
if(27_key==0) bushu=27; //步数高的优先,即多个步数开关同时打上,运行高步数
else if(24_key==0) bushu=24;
else if(21_key==0) bushu=21;
else if(18_key==0) bushu=18;
else if(15_key==0) bushu=15;
else if(12_key==0) bushu=12;
else if(9_key==0) bushu=9;
else if(6_key==0) bushu=6;
else if(3_key==0) bushu=3;
esle bushu=0;
}
if(zheng_key==0)
flg=0;
else if(fan_key==0)
flg=1;
}
void dispose() //数据处理函数
{
if(flag==0)
{
table_begin=0; //flag为0正转
}
else
table_begin=3; //flag为1反转
}
void qudong()
{
while(kai_key==0)
{
while(bushu!=0)
{
unchar i,j;
for(j=0+table_begin;(j<3+table_begin)&&(bushu!=0);j++)
{
PO=table[j]
for(i=0;i { delay(10) //延时函数,控制电机速度 } bushu--; } } }