電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>車床電子絲杠開源硬件

車床電子絲杠開源硬件

2022-11-15 | zip | 0.43 MB | 次下載 | 免費(fèi)

資料介紹

描述

背景

這個(gè)項(xiàng)目從一個(gè)簡單的請(qǐng)求開始,我希望能夠在我的 Atlas Craftsman 車床上切割公制螺紋,并消除手動(dòng)更換絲杠驅(qū)動(dòng)齒輪的麻煩。在網(wǎng)上搜索后,我找不到有關(guān)制造或購買電子絲杠的好信息,所以我決定開始制造一個(gè)。此外,我決定添加一個(gè) VFD 來控制電機(jī)主軸的速度。

由于 VFD 驅(qū)動(dòng)主軸是獨(dú)立于電子絲杠的系統(tǒng),因此我將其分為兩部分:主軸驅(qū)動(dòng)系統(tǒng)和絲杠驅(qū)動(dòng)系統(tǒng)。

主軸驅(qū)動(dòng)系統(tǒng)非常簡單。用三相代替單相驅(qū)動(dòng)電機(jī),用VFD驅(qū)動(dòng)。

絲杠驅(qū)動(dòng)系統(tǒng)使用 Arduino 來創(chuàng)建一種電子變速箱。Arduino 讀取主軸速度并根據(jù)用戶輸入調(diào)整伺服 RPM 以匹配正確的比率,以創(chuàng)建公制或英制螺紋。LCD 顯示屏與兩個(gè)用于用戶界面的瞬時(shí)按鈕一起使用。這允許用戶選擇公制或英制單位和螺紋尺寸。一旦選擇了所需的螺紋或螺距,就可以使用 3 向開關(guān)以 CW 或 CCW 方向轉(zhuǎn)動(dòng)電機(jī)。電機(jī)運(yùn)行后,LCD 不會(huì)更新,并且在電機(jī)停止之前您無法更改螺距。

主軸驅(qū)動(dòng)系統(tǒng) (VFD)

我決定從 eBay 購買 1/3hp 3ph 電機(jī)和 VFD 套件,電機(jī)框架尺寸與現(xiàn)有的 1/2hp 1ph 電機(jī)相似,因此可以直接安裝。

對(duì)于驅(qū)動(dòng)系統(tǒng),我還購買了一個(gè)內(nèi)聯(lián) EMI 濾波器(這個(gè) TECO VFD 會(huì)發(fā)出很多噪音并干擾 Arduino)。EMI 濾波器放置在 VFD 的電源側(cè)。

鐵氧體環(huán)用于降低從 VFD 到電機(jī)的噪音。

開/關(guān)開關(guān)用于為主軸和絲杠驅(qū)動(dòng)系統(tǒng)供電。它安裝在面板門上。

VFD 也可以與外部電位器一起使用,在操作車床時(shí)控制電機(jī)速度。10k 的底池效果很好。它安裝在 Arduino 外殼上。

這些物品被組裝成一個(gè) nema 4 外殼并連接在一起(我是一個(gè)機(jī)械人,不注意電線的鳥巢)。

?
poYBAGNy2qOAZy6yAA6W2rFDOaM179.jpg
顯示 VFD、濾波器、鐵氧體環(huán)和步進(jìn)電機(jī) P/S 的外殼
?

絲杠驅(qū)動(dòng)系統(tǒng)

使用 24v 20 a 電源為步進(jìn)電機(jī)供電(您可能使用較小的安培數(shù) P/S)。電源安裝在 VFD 外殼中。

我決定使用扭矩為 3Nm 的 NEMA 23 步進(jìn)電機(jī),如果我能再做一次,我會(huì)升級(jí)到 NEMA 24,這個(gè)電機(jī)有足夠的功率來切割螺紋而不會(huì)失速。

使用鋼制安裝支架將電機(jī)安裝在車床工作臺(tái)上

14t 3/8in L 正時(shí)皮帶輪用于步進(jìn)器上的小齒輪驅(qū)動(dòng)

對(duì)于絲杠上的正時(shí)皮帶輪,我使用了 22t 3/8in L 正時(shí)皮帶輪和錐形鎖適配器。該適配器有一個(gè) 0.75 英寸的孔,其鍵槽與現(xiàn)有的絲杠相匹配。無需對(duì)車床進(jìn)行任何修改。

下面是帶有同步帶系統(tǒng)的步進(jìn)電機(jī)的圖片。我切掉了安全門的底部以安裝在步進(jìn)電機(jī)上,這樣它就可以關(guān)閉了。

?
pYYBAGNy2qmABxRyAAyCy8DB4gE277.jpg
梯形絲杠驅(qū)動(dòng)系統(tǒng)顯示步進(jìn)和同步帶驅(qū)動(dòng)
?

我使用微步進(jìn)驅(qū)動(dòng)器來連接 Arduino 和步進(jìn)電機(jī)。驅(qū)動(dòng)器使用 24v 電源根據(jù)來自 Arduino 的信號(hào)為步進(jìn)器提供脈沖。我只是將它安裝在靠近步進(jìn)器的長凳底部。我沒有把它放在 VFD 面板中,因?yàn)?EMI 太多。

為了測量主軸的轉(zhuǎn)速,我使用了這個(gè)感應(yīng)霍爾效應(yīng)傳感器由于它帶有自己的 LCD,我可以使用它來校準(zhǔn) Arduino 速度計(jì)算。我將磁鐵粘在主軸上,如下所示。

?
poYBAGNy2rCAMbZsAAvFx_wpLGw901.jpg
?

我用一個(gè)小塑料盒來裝液晶屏、Arduino、面包板和開關(guān)。

塑料外殼

阿杜諾

液晶顯示器

按按鈕

3路開關(guān)

?
pYYBAGNy2raAL5f6AAy6a6yjKWg239.jpg
帶有 LCD、按鈕、Arduino、開關(guān)和電位器的外殼,用于主軸轉(zhuǎn)速
?

編碼

該程序有幾個(gè)功能。使用了 LiquidCrystal_I2C 庫和 AccelStepper 庫。屏幕是使用數(shù)組設(shè)置的,因此它是可擴(kuò)展的。它使用 X 變量來表示公制與英制,y 變量在屏幕上打印每個(gè)數(shù)據(jù)字段。

const int x = 2;
int currentX = 0;
String screens[x][5] = {{"TPI","Dir","LatheRPM ","ServoRPM","tpi/mm"}, {"Pitch","Dir","LatheRPM","ServoRPM","tpi/mm"}};

設(shè)置按鈕標(biāo)志循環(huán)使用 for 循環(huán)來讀取按鈕狀態(tài)并在狀態(tài)已更改時(shí)發(fā)出信號(hào)。

void setButtonFlags() 
{
 for(int i=0; i < n; i++)
 {
   buttonState[i] = digitalRead(buttonPin[i]);
   delay[1];
   if(buttonState[i] != lastButtonState[i])
   {
     if(buttonState[i] == HIGH)
     {
       //Serial.print("Button: ");
       //Serial.println(buttonPin[i]);
       buttonFlags[i] = HIGH;
     }
   }

如果按鈕已更改狀態(tài),則解決按鈕標(biāo)志會(huì)觸發(fā)按鈕操作。

void resolveButtonFlags() 
{
 for(int i = 0; i < n; i++)
 {
   if(buttonFlags[i] == HIGH)
   {
     buttonAction(i);
     buttonFlags[i] = LOW;
     printScreen();
   }
 }
}

按鈕動(dòng)作循環(huán)確定在顯示某個(gè)屏幕時(shí)按下某個(gè)按鈕時(shí)要執(zhí)行的操作。因此,當(dāng)您在公制屏幕上并按下按鈕 A 時(shí),音高將會(huì)改變。如果您使用英語,則 TPI 會(huì)發(fā)生變化。

void buttonAction(int button) 
{
 if (button == 0)
 {
   if (currentX == x-1)
   {
     currentX = 0;
   }
   else
   {
     currentX++;
   }
 }
 if (button == 1)
 {
   if (currentX == 0)
   {
     if(currentTPI == nTPI-1)
     {
       currentTPI = 0;
     }
     else
     {
       currentTPI++;
     }
   }

速度傳感器回路使用去抖來觸發(fā)計(jì)算主軸 RPM 回路和步進(jìn) RPM 回路。每主軸旋轉(zhuǎn)一次,步進(jìn)器 RPM 只會(huì)改變一次。同樣,根據(jù)您在哪個(gè)屏幕上,它將計(jì)算英制或公制。

void speedSensor() 
{
 time = millis();
 int currentSensorState = digitalRead(SensorPin);
 if (currentSensorState != lastSensorState)
 {
   lastDebounceTime = millis();
 }
 if ((millis() - lastDebounceTime) > debounceDelay)
 {
   if (currentSensorState != sensorState)
   {
     sensorState = currentSensorState;
     if (sensorState == LOW) 
     {
       calculateRPM(); // Real RPM from sensor
       if (currentX == 0)
       {
         englishCalc();
       }
       else if (currentX == 1)
       {
         metricCalc();
       }
     }
   }
 }

發(fā)送數(shù)據(jù)循環(huán)在步進(jìn)器不運(yùn)行時(shí)運(yùn)行,用于將信息發(fā)送到 LCD 屏幕。當(dāng)步進(jìn)器運(yùn)行時(shí),這個(gè)循環(huán)不活躍,因?yàn)樗鼫p慢了 arduino 的處理器。

void sendData()
{
 unsigned long currentMillis = millis();
 if(currentMillis - prevMillis >= interval)
 {
   prevMillis = currentMillis;
   lcd.setCursor(9,2);
   lcd.println(lcdRPM);
   lcd.rightToLeft();
   lcd.print("   ");
   lcd.leftToRight();
   lcd.setCursor(9,3);
   lcd.println(servoRPM);
   lcd.rightToLeft();
   lcd.print("   ");
   lcd.leftToRight();
   lcdRPM = 0;
 }
}

步進(jìn)速度計(jì)算基于每英寸的絲杠螺紋(在本例中為 8TPI)、同步帶齒輪比(在本例中為 1.529)、微步(在本例中為 400)和 RPM。

void metricCalc()
{
   stepperRPM = 1.529 * 0.315 * 400 * RPM * pitch[currentPitch] / 60.00;
   servoRPM = 0.482 * RPM * pitch[currentPitch];
}
// =========================== metric stepper speed =========================
void englishCalc()
{
   stepperRPM = 1.529 * 8.00 * 400.00 * RPM / ( tpi[currentTPI] * 60.00 );
   servoRPM = 1.529 * 8.00 * RPM / tpi[currentTPI];
}

這是主循環(huán),一旦你讓步進(jìn)器運(yùn)行,只有速度傳感器循環(huán)與步進(jìn)器設(shè)置速度庫函數(shù)和 if 語句一起運(yùn)行以停止電機(jī)。

void loop()
{
 setButtonFlags();
 resolveButtonFlags();
 sendData();
 speedSensor();
 if (digitalRead(leftPin) == HIGH)
 {
   //direction = 1;
   lcd.setCursor(4,1);
   lcd.print("CW ");
   lcd.setCursor(9,3);
   lcd.println(servoRPM);
   lcd.rightToLeft();
   lcd.print("   ");
   lcd.leftToRight();
   lcd.setCursor(9,2);
   lcd.println(lcdRPM);
   lcd.rightToLeft();
   lcd.print("   ");
   lcd.leftToRight();
   delay(5);
   stepper.enableOutputs();
   stepper.setSpeed(stepperRPM);  
   stepper.run();
   while(stepper.isRunning())
   {
     speedSensor();
     stepper.setSpeed(stepperRPM);  
     stepper.run();
     if(digitalRead(leftPin)==LOW)
     {
       stepper.disableOutputs();
       lcd.setCursor(4,1);
       lcd.print("OFF");
       break;
     }
   }
 }
 else if (digitalRead(rightPin) == HIGH)
 {
   //direction = -1.00;
   lcd.setCursor(4,1);
   lcd.print("CCW");
   lcd.setCursor(9,3);
   lcd.println(servoRPM);
   lcd.rightToLeft();
   lcd.print("   ");
   lcd.leftToRight();
   lcd.setCursor(9,2);
   lcd.println(lcdRPM);
   lcd.rightToLeft();
   lcd.print("   ");
   lcd.leftToRight();
   delay(5);
   stepper.enableOutputs();
   stepper.setSpeed(-stepperRPM);  
   stepper.run();
   while(stepper.isRunning())
   {
     speedSensor();
     stepper.setSpeed(-1*stepperRPM);  
     stepper.run();
     if(digitalRead(rightPin)==LOW)
     {
       stepper.disableOutputs();
       lcd.setCursor(4,1);
       lcd.print("OFF");
       break;
     }
   }
 }
}

*更新*

我添加了一個(gè) if 語句,這樣當(dāng)程序處于切割/螺紋模式時(shí),如果您按住藍(lán)色瞬時(shí)按鈕,主軸將以快速模式反向運(yùn)行,以快速切割材料。

if(digitalRead(buttonPin[1]) == HIGH)
     {
       stepper.setSpeed(1500);
       stepper.run();
     }

結(jié)論

總而言之,該系統(tǒng)運(yùn)行良好。如果您正在切割螺紋,請(qǐng)不要停止伺服電機(jī),因?yàn)檫@會(huì)導(dǎo)致主軸和絲杠超時(shí)。您將無法回溯相同的螺紋輪廓。如果我有更多時(shí)間,我會(huì)在步進(jìn)電機(jī)上安裝一個(gè)編碼器以形成一個(gè)閉合控制回路,以便主軸和絲杠也可以根據(jù)位置同步。但這似乎工作正常,只要伺服器保持運(yùn)行,我就可以用這種設(shè)置切割公制螺紋(只需像平常一樣脫離托架)。您將在下面找到構(gòu)建項(xiàng)目的組件列表和每個(gè)項(xiàng)目的基本描述以及原理圖。

接線圖與源代碼一起附上。您應(yīng)該能夠?qū)⑺羞@些部分放在一起,上傳代碼并開始切割金屬。

?


下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評(píng)論

查看更多

下載排行

本周

  1. 1ADE-12H混頻器規(guī)格書
  2. 0.28 MB   |  1次下載  |  5 積分
  3. 2AD9984A高性能10位顯示接口英文手冊(cè)
  4. 0.49 MB   |  1次下載  |  5 積分
  5. 351開發(fā)板芯片資料
  6. 14.95 MB   |  1次下載  |  1 積分
  7. 4用TL431LI-Q1監(jiān)控電流供應(yīng)
  8. 176.71KB   |  1次下載  |  免費(fèi)
  9. 5十進(jìn)制數(shù)據(jù)轉(zhuǎn)十六進(jìn)制字符_轉(zhuǎn)ASCII碼
  10. 0.01 MB   |  次下載  |  免費(fèi)
  11. 6使用TRF7970A進(jìn)行NFC主動(dòng)和被動(dòng)點(diǎn)對(duì)點(diǎn)通信
  12. 926.87KB   |  次下載  |  免費(fèi)
  13. 7LP8864-Q1 LP8864S-Q1 LP8866-Q1和LP8866S-Q1診斷說明和故障處理程序
  14. 577.42KB   |  次下載  |  免費(fèi)
  15. 8將設(shè)計(jì)移植到LP3470A低lq電壓監(jiān)控器,以改善電源監(jiān)控
  16. 115.28KB   |  次下載  |  免費(fèi)

本月

  1. 1HFSS電磁仿真設(shè)計(jì)應(yīng)用詳解PDF電子教程免費(fèi)下載
  2. 24.30 MB   |  129次下載  |  1 積分
  3. 2正激、反激、推挽、全橋、半橋區(qū)別和特點(diǎn)
  4. 0.91 MB   |  36次下載  |  1 積分
  5. 3GBT 4706.1-2024家用和類似用途電器的安全第1部分:通用要求
  6. 7.43 MB   |  20次下載  |  免費(fèi)
  7. 4在設(shè)計(jì)中使用MOSFET瞬態(tài)熱阻抗曲線
  8. 1.57MB   |  15次下載  |  免費(fèi)
  9. 5幾張電動(dòng)車充電器電路圖
  10. 0.23 MB   |  9次下載  |  1 積分
  11. 6AD18學(xué)習(xí)筆記
  12. 14.47 MB   |  8次下載  |  2 積分
  13. 7H橋中的電流感測
  14. 545.39KB   |  7次下載  |  免費(fèi)
  15. 8電機(jī)驅(qū)動(dòng)器電路板布局的最佳實(shí)踐
  16. 3.03MB   |  6次下載  |  免費(fèi)

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935113次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420061次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233084次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191360次下載  |  10 積分
  9. 5十天學(xué)會(huì)AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183329次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81578次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73804次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65985次下載  |  10 積分