?? 步進電機.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 + -