精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
電子發燒友網>電子資料下載>電子資料>車床電子絲杠開源硬件

車床電子絲杠開源硬件

2022-11-15 | zip | 0.43 MB | 次下載 | 免費

資料介紹

描述

背景

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

由于 VFD 驅動主軸是獨立于電子絲杠的系統,因此我將其分為兩部分:主軸驅動系統和絲杠驅動系統。

主軸驅動系統非常簡單。用三相代替單相驅動電機,用VFD驅動。

絲杠驅動系統使用 Arduino 來創建一種電子變速箱。Arduino 讀取主軸速度并根據用戶輸入調整伺服 RPM 以匹配正確的比率,以創建公制或英制螺紋。LCD 顯示屏與兩個用于用戶界面的瞬時按鈕一起使用。這允許用戶選擇公制或英制單位和螺紋尺寸。一旦選擇了所需的螺紋或螺距,就可以使用 3 向開關以 CW 或 CCW 方向轉動電機電機運行后,LCD 不會更新,并且在電機停止之前您無法更改螺距。

主軸驅動系統 (VFD)

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

對于驅動系統,我還購買了一個內聯 EMI 濾波器(這個 TECO VFD 會發出很多噪音并干擾 Arduino)。EMI 濾波器放置在 VFD 的電源側。

鐵氧體環用于降低從 VFD 到電機的噪音。

開/關開關用于為主軸和絲杠驅動系統供電它安裝在面板門上。

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

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

?
poYBAGNy2qOAZy6yAA6W2rFDOaM179.jpg
顯示 VFD、濾波器、鐵氧體環和步進電機 P/S 的外殼
?

絲杠驅動系統

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

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

使用鋼制安裝支架將電機安裝在車床工作臺上

14t 3/8in L 正時皮帶輪用于步進器上的小齒輪驅動

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

下面是帶有同步帶系統的步進電機的圖片。我切掉了安全門的底部以安裝在步進電機上,這樣它就可以關閉了。

?
pYYBAGNy2qmABxRyAAyCy8DB4gE277.jpg
梯形絲杠驅動系統顯示步進和同步帶驅動
?

我使用微步進驅動器來連接 Arduino 和步進電機。驅動器使用 24v 電源根據來自 Arduino 的信號為步進器提供脈沖。我只是將它安裝在靠近步進器的長凳底部。我沒有把它放在 VFD 面板中,因為 EMI 太多。

為了測量主軸的轉速,我使用了這個感應霍爾效應傳感器由于它帶有自己的 LCD,我可以使用它來校準 Arduino 速度計算。我將磁鐵粘在主軸上,如下所示。

?
poYBAGNy2rCAMbZsAAvFx_wpLGw901.jpg
?

我用一個小塑料盒來裝液晶屏、Arduino、面包板和開關。

塑料外殼

阿杜諾

液晶顯示器

按按鈕

3路開關

?
pYYBAGNy2raAL5f6AAy6a6yjKWg239.jpg
帶有 LCD、按鈕、Arduino、開關和電位器的外殼,用于主軸轉速
?

編碼

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

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

設置按鈕標志循環使用 for 循環來讀取按鈕狀態并在狀態已更改時發出信號。

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;
     }
   }

如果按鈕已更改狀態,則解決按鈕標志會觸發按鈕操作。

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

按鈕動作循環確定在顯示某個屏幕時按下某個按鈕時要執行的操作。因此,當您在公制屏幕上并按下按鈕 A 時,音高將會改變。如果您使用英語,則 TPI 會發生變化。

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++;
     }
   }

速度傳感器回路使用去抖來觸發計算主軸 RPM 回路和步進 RPM 回路。每主軸旋轉一次,步進器 RPM 只會改變一次。同樣,根據您在哪個屏幕上,它將計算英制或公制。

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();
       }
     }
   }
 }

發送數據循環在步進器不運行時運行,用于將信息發送到 LCD 屏幕。當步進器運行時,這個循環不活躍,因為它減慢了 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;
 }
}

步進速度計算基于每英寸的絲杠螺紋(在本例中為 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];
}

這是主循環,一旦你讓步進器運行,只有速度傳感器循環與步進器設置速度庫函數和 if 語句一起運行以停止電機。

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;
     }
   }
 }
}

*更新*

我添加了一個 if 語句,這樣當程序處于切割/螺紋模式時,如果您按住藍色瞬時按鈕,主軸將以快速模式反向運行,以快速切割材料。

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

結論

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

接線圖與源代碼一起附上。您應該能夠將所有這些部分放在一起,上傳代碼并開始切割金屬。

?


評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費