arduino中驅動 步進電機


參考:https://www.arduino.cn/thread-75936-1-1.html

 知識點:
    步進電機是一種將電脈沖轉化為角位移的執行機構。通俗一點講:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。您可以通過控制脈沖個來控制角位移量,從而達到准確定位的目的;同時您可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。

    步進電機28BYJ48型四相八拍電機,電壓為DC5V—DC12V。當對步進電機施加一系列連續不斷的控制脈沖時,它可以連續不斷地轉動。每一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態改變一次,也就對應轉子轉過一定的角度(一個步距角)。當通電狀態的改變完成一個循環時,轉子轉過一個齒距。四相步進電機可以在不同的通電方式下運行,常見的通電方式有單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)

   正文:
   本文用Arduino 驅動步進電機28BYJ48,沒有使用庫文件,編寫的程序簡捷高效。注意,連接成組,在端口4 5 6 7,之后就可以測試了。程序測試通過,沒有問題,供學習Arduino和步進電機用。


[kenrobot_code]/*********************************
  功能:驅動28BYJ-48步進電機
  設計:凌晨七點半
  日期:2018.3.25
  連接引腳:分別將28BYJ-48驅動器的IN1 IN2 IN3 IN4連接到
            Arduino Uno R3 4 5 6 7引腳 也就是PORTD 4 5 6 7
*********************************/
//定義連接為PD4 PD5 PD6 PD7

#define ROTATE(x) {PORTD|=x; PORTD&=(x|0x0F);}

//四相單四拍
const char SinBeat[4]={0x80,0x40,0x20,0x10};
//四相雙四拍
const char DulBeat1[4]={0xc0,0x60,0x30,0x90};
//四相雙八拍
const char DulBeat2[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};

//節拍模式選擇
#define MODE DulBeat2
void setup() {
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  Serial.begin(9600);
}
//逆時針旋轉
void Anti_Clockwise(int Speed)
{
for(int i=0;i<sizeof(MODE);i++)
{
ROTATE(MODE);
delay(Speed);
}
}
//順時針旋轉
void Clockwise(int Speed)
{
for(int i=sizeof(MODE);i>=0;i--)
{
ROTATE(MODE);
delay(Speed);
}
}
void loop() {


Clockwise(50);
delay(500);
//Serial.println("OK...");

}[/kenrobot_code]

<ignore_js_op>

IMG_20180325_173728.jpg (399.76 KB, 下載次數: 208)

 

IMG_20180325_173728.jpg
<ignore_js_op>

STEPPER_2018.3.25.zip

 參考:

/*********************************
  功能:驅動28BYJ-48步進電機
  設計:凌晨七點半
  日期:2018.3.25
  連接引腳:分別將28BYJ-48驅動器的IN1 IN2 IN3 IN4連接到
            Arduino Uno R3 4 5 6 7引腳 也就是PORTD 4 5 6 7
*********************************/
//定義連接為PD4 PD5 PD6 PD7

#define ROTATE(x) {PORTD|=x;PORTD&=(x|0x0F);}
unsigned long Time;
unsigned long End;

//四相單四拍
const char SinBeat[4]={0x80,0x40,0x20,0x10};
//四相雙四拍
const char DulBeat1[4]={0xc0,0x60,0x30,0x90};
//四相雙八拍
const char DulBeat2[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90};

//節拍模式選擇
#define MODE SinBeat//DulBeat1
void setup() {
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  Serial.begin(9600);
}
////逆時針旋轉
//void Anti_Clockwise(int Speed)
//{
//for(int i=0;i<sizeof(MODE);i++)
//{
// ROTATE(MODE[i]);//{PORTD|=MODE[i];PORTD&=(MODE[i]|0x0F);}
//delay(Speed);
//}
//}
//順時針旋轉
void Clockwise(int Speed)
{
for(int i=sizeof(MODE);i>=0;i--)
{
 ROTATE(MODE[i]);
delay(Speed);
}
}
void loop() {
Time = millis();
do
{
Clockwise(2);
End = millis() - Time;
} while(End < 6000);

delay(25920000); // 一天86400000  三天25920000
 //Serial.println("OK...");


}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM