📄 步进电机.c
字号:
//****************************************************
//程序名: STC单片机控制5线四相24BYJ-48 5V DC 步进电机正反转驱动程序
//编写人: 苏锡常
//编写时间: 2010 年 8月25 日
//使用班级: 待定
//硬件支持:STC90C52RD单片机芯片一片、 步进电机驱动板 (五线四相)驱动板(UL2003)试验板 皇冠促销 一块
// 5线四相24BYJ-48 5V DC 步进电机一台
//接口说明:P1.0 P1.1 P1.2 P1.3 四要线分别接步进电机驱动板 (五线四相)驱动板(UL2003)试验板的IN1、IN2、IN3、IN4四要线,
//面包板上的单片机的电源+5V和地同时接步进电机驱动板 (五线四相)驱动板(UL2003)试验板的的+5V和地,
//5线四相24BYJ-48 5V DC 步进电机接嘉乐电子公司的步进电机驱动板 (五线四相)驱动板(UL2003)试验板
//嘉乐电子公司的步进电机驱动板 购买网址:http://item.taobao.com/item.htm?id=5521265549
///*****************************************************
//说明:本程序中延时程序的传递参数(至少)大于等于30时,步进电机才能转动;当等于3000时,电机不转。
//****************************************************
//#include<reg52.h>
#include<STC12C5A60S2.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
//sfr P0M1=0x93;
//sfr P0M0=0x94;
sbit a=P1^0;
sbit b=P1^1;
sbit c=P1^2;
sbit d=P1^3;
//uchar step_table[]={0x38,0x58,0x68,0x70};
//uchar step_table[]={0x60,0x70,0x30,0xb0,0x90,0xd0,0xc0,0xe0};
uchar step_table[]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};// 正转表格,逆时针转;四相八拍
uchar step_table2[]={0x09,0x08,0x0c,0x04,0x06,0x02,0x03,0x01};//反转表格,顺时针转;四相八拍
uchar step_table3[]={0x01,0x02,0x04,0x08};// 四拍
void delay(unsigned long int i)
{
//unsigned long int i;
for(;i>0;i--);
//{
_nop_(); //执行一次需要一个机器指令,一个机器指令所需时间为:T=12/fosc=12/11059200=1.085us
// }
}
void main()
{
while(1)
{
uchar i; //uchar型变量的最大值为255,所以,512要定义uint变量。
uint j;
j=1024;//512; 眼睛看步进电机的转轴,1024,逆时针转二圈。
//P0M1=0x00;// //P0口推挽输出。 这二条指令要放在i,j定义之后,否则出错
//P0M0=0xff;//
while(j--)
{
for(i=0;i<8;i++)
{
P1=step_table[i];
delay(40);
}
}
j=512;// 眼睛看步进电机的转轴,512,顺时针转一圈。
while(j--)
{
for(i=0;i<8;i++)
{
P1=step_table2[i];
delay(40);
}
}
for(i=0;i<8;i++) //步进电机停止转;
{
a=0;
b=0;
c=0;
d=0;
delay(3000);
}
//改变步进电机的节拍
j=512;// 眼睛看步进电机的转轴,512,逆时针转一圈。
while(j--)
{
for(i=0;i<4;i++)
{
P1=step_table3[i];
delay(300);
}
}
for(i=0;i<8;i++) //步进电机停止转;
{
a=0;
b=0;
c=0;
d=0;
delay(6000);
}
// a=1;
// b=0;
// c=0;
// d=0;
// delay(300);
//
// a=1;
// b=1;
// c=0;
// d=0;
// delay(300);
//
// a=0;
// b=1;
// c=0;
// d=0;
// delay(300);
// a=0;
// b=1;
// c=1;
// d=0;
// delay(300);
//
// a=0;
// b=0;
// c=1;
// d=0;
// delay(300);
//
// a=0;
// b=0;
// c=1;
// d=1;
// delay(300);// 29时步进电机不转动,振动明显。
//
// a=0;
// b=0;
// c=0;
// d=1;
//delay(300); //30时步进电机转动 ,20时步进电机不转动,振动明显。
// a=1; // delay(1000); 1000时步进电机转动很慢,粗心一点,以为不在转呢
// b=0;
// c=0;
// d=1;
// delay(300); //延时约2MS,当等于3000时,电机不转。300时转,3时不转。
// //delay_50ms(1);
// }
// }
//while(1);
}
}
//此程序的功能使步进电机快速逆时针转二圈,
//快速顺时针转一圈;
//停一会;
//慢速逆时针转一圈;
//停一会;
//回过去循环;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -