找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2602|回復(fù): 4
收起左側(cè)

求一個(gè)通過Arduino步進(jìn)電機(jī)庫(kù) 控制步進(jìn)電機(jī)的程序

[復(fù)制鏈接]
ID:584041 發(fā)表于 2019-8-30 19:22 | 顯示全部樓層 |閱讀模式
用常規(guī)的方法寫Arduino程序,有一點(diǎn)沒有解決,就是中斷的問題,break 并不能起到預(yù)期跳出無(wú)限循環(huán)的功能;Arduino中本身有庫(kù)函數(shù),但是里面的語(yǔ)句還不熟,好像還要什么專門驅(qū)動(dòng)板之類的東西,我用的是雷賽步進(jìn)電機(jī),有個(gè)驅(qū)動(dòng)器(DIR-  DIR+ PUL- PUL+ ENA- ENA+ A- A+ B- B+ )希望有大佬能幫幫忙
回復(fù)

使用道具 舉報(bào)

ID:584041 發(fā)表于 2019-8-30 19:23 | 顯示全部樓層
希望這個(gè)程序能實(shí)現(xiàn)正反轉(zhuǎn)加減速的功能
回復(fù)

使用道具 舉報(bào)

ID:277550 發(fā)表于 2019-9-1 01:04 | 顯示全部樓層
驅(qū)動(dòng)板是肯定需要的,GPIO 電流有限。


arduino  IDE,文件、示例、Stepper、下邊有幾個(gè)例子,就是你需要的

回復(fù)

使用道具 舉報(bào)

ID:275826 發(fā)表于 2019-9-1 08:44 | 顯示全部樓層
void setup()
{
  //初始化電機(jī)驅(qū)動(dòng)IO為輸出方式
  pinMode(IN1, OUTPUT); // PIN 7
  pinMode(IN2, OUTPUT); // PIN 6
  pinMode(IN3, OUTPUT); // PIN 5
  pinMode(IN4, OUTPUT); // PIN 4
  pinMode(beep, OUTPUT); //PIN 3
  digitalWrite(beep, HIGH);
  Serial.begin(9600);//設(shè)置波特率為9600
}
/*******************************四相八拍***********************************/
void Coil_A()
{
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void Coil_AB()
{
  digitalWrite(IN1, LOW); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void Coil_B()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, HIGH); digitalWrite(IN4, HIGH);
}
void Coil_BC()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, LOW); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void Coil_C()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, HIGH);
}
void Coil_CD()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, LOW); digitalWrite(IN4, LOW);
}
void Coil_D()
{
  digitalWrite(IN1, HIGH); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
void Coil_DA()
{
  digitalWrite(IN1, LOW); digitalWrite(IN2, HIGH); digitalWrite(IN3, HIGH); digitalWrite(IN4, LOW);
}
/*******************************************************************/

void beep_once()//蜂鳴器響一次
{
   digitalWrite(beep, LOW);
   delay(100);
   digitalWrite(beep, HIGH);
}

void loop()
{
  unsigned long now_time = micros(); //獲取當(dāng)前的系統(tǒng)運(yùn)行時(shí)間長(zhǎng)度
  while ((micros() - now_time) < 14648); //   60 000 000us/4096
  switch (i)
  {
    case 0: Coil_A(); i++; break;
    case 1: Coil_AB(); i++; break;
    case 2: Coil_B(); i++; break;
    case 3: Coil_BC(); i++; break;
    case 4: Coil_C(); i++; break;
    case 5: Coil_CD(); i++; break;
    case 6: Coil_D(); i++; break;
    case 7: Coil_DA(); i = 0; break;
    default: break;
  }
  count++;
  if (count == 68)//一秒計(jì)時(shí),顯示并蜂鳴器響一下
  {
    count = 0;
    time++;
    if (time == 60)
      time = 0;
    Serial.print("second: " ) ;
    Serial.print(time, DEC) ;
    Serial.println("s" ) ;
    beep_once();
  }
}
回復(fù)

使用道具 舉報(bào)

ID:584041 發(fā)表于 2019-9-1 14:50
tyrl800 發(fā)表于 2019-9-1 08:44
void setup()
{
  //初始化電機(jī)驅(qū)動(dòng)IO為輸出方式

C:\Users\Administrator\Desktop

ID:584041 發(fā)表于 2019-9-1 14:52 | 顯示全部樓層
tyrl800 發(fā)表于 2019-9-1 08:44
void setup()
{
  //初始化電機(jī)驅(qū)動(dòng)IO為輸出方式

你是用L298N這個(gè)器件做驅(qū)動(dòng)器的吧?可惜我不是,我是直接用的雷賽電機(jī)的驅(qū)動(dòng)器,pul- pul+ dir+ dir- ena- ena+ A+ A- B- B+。。。。你懂吧?
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表