步驟1:使用的資源
今天我們將使用以下組件列表進行組裝:
?直徑8mm,間距2mm的梯形主軸
?直徑8mm間距8mm的梯形主軸
?8x2主軸的法蘭螺母
?8x8主軸的法蘭螺母
?8毫米直徑主軸的軸承
?10mm直徑圓柱線性導軌
?10mm導軌的圓柱滾子軸承
?10mm圓柱導軌的支架
?NEMA 17電機
?軸聯(lián)軸器
?Arduino Mega
?驅(qū)動程序DRV8825
?4x4矩陣鍵盤
?顯示諾基亞5110
?各種各樣塑料零件
?螺栓和螺母
?木底座
?外部電源12V
第2步:演示
我們今天的大會非常簡單類似于帶有主軸和步進電機的Arduino Uno視頻。
我需要更改什么?這次,我選擇了Arduino Mega來使用路線終點開關,您可以在項目的右側(cè)看到該路線終點開關,因為行程終點開關用于最快的主軸中。每個菜單都在ATmega中該程序的源代碼中進行了說明。在視頻中的演示中,我們使引擎移動了5厘米,以顯示加速和減速情況。然后,它返回15厘米并觸摸行程開關的終點,從而停止發(fā)動機。
步驟3:航向開關的終點
它是做什么用的?限位開關是通過停止發(fā)動機運動來限制路線的機械元件。它們用于機器組裝中以保護機械性能。在CNC機床中,鍵還用作參考點,例如,將坐標軸歸零。市場上有幾種類型的鍵,其中包括:按鈕,紅外傳感器,電容傳感器等。
在我們的組裝件中,我們使用紅外傳感器,如上圖所示。
步驟4:示例代碼
在arduino上有一個源代碼,其中顯示了Setup(設置)以及如何在行程開關和加速結束時移動步進電機。這是lib StepMotor,它是我制作的一個庫,可以操縱8825、4988和TB6600驅(qū)動程序,并允許您播放更大的引擎,例如Nema 23或34。
然后,我們配置驅(qū)動器引腳,每毫米及周圍的步距以及微速。我還以最大和最小速度配置節(jié)氣門運動,并激活發(fā)動機動力輸出端口。最后,限位開關銷被激活。
#include
DRV8825 d1;
void setup() {
//Configuracao dos pinos do driver
d1.pinConfig(2,3,4,5,6,7,8,9);
//configuracao de passos por milimetro
d1.stepPerMm(100);
//configuracao de passos por volta
d1.stepPerRound(200);
//configuracao de micropasso
d1.stepConfig(1);
//configuracao do movimento (aceleracao, velocidade maxima, velocidade minima)
// tempos em uSegundos
// Acelera??o é o decremento de tempo a cada novo passo
d1.motionConfig(20,1500,5000);
//reseta o driver
d1.reset();
//ativa as portas saídas de potencia do motor
d1.enable(HIGH);
//Pinos das chaves de fim de curso e se ativam em nivel alto ou baixo
// d1.endstopConfig(min,max,HIGH ou LOW);
d1.endstopConfig(10,11,HIGH);
}
下面是發(fā)動機代碼示例。
void loop() {
//move o motor 100mm em direcao crescente
d1.motorMoveTo(100, HIGH);
//aguarda 1 segundo
delay(1000);
//move o motor 100mm em direcao decrescente
d1.motorMoveTo(100, LOW);
//aguarda 1 segundo
delay(1000);
}
步驟5:課程切換結束
代碼:在我們的代碼中,我們將采取行動
bool DRV8825::canGo(bool direction)
{
if(LVL) // se: as chaves de fim de curso ativam em nível alto
{
if(direction && !digitalRead(EMAX)) //se: move positivamente E o fim de curso máximo N?O está ativado
return true;
if(!direction && !digitalRead(EMIN)) //se: N?O move positivamente E o fim de curso mínimo N?O está ativado
return true;
}
else //sen?o: as chaves de fim de curso ativam em nível baixo
{
if(direction && digitalRead(EMAX)) //se: move positivamente E o fim de curso máximo está ativado
return true;
if(!direction && digitalRead(EMIN)) //se: N?O move positivamente E o fim de curso mínimo está ativado
return true;
}
return false;
}
步驟6:加速
在一定的時間間隔內(nèi),通過高低脈沖控制電動機的步進。
為了使發(fā)動機不以最大速度直接啟動,我們使用加速度。
加速會改變每一步的脈沖時間以改變發(fā)動機轉(zhuǎn)速,然后逐漸增加到最大速度以加速,然后逐漸減小直到停止減速。
加速可以通過多種方式實現(xiàn)。
我們創(chuàng)建的代碼示例了步進電機中加速度的使用。
步驟7:加速度-代碼
簡單的加速度代碼示例。
在此代碼中,脈沖時間在每一步都由用戶選擇的值減少,直到中途或連續(xù)l發(fā)動機達到最大速度,即設置的最短脈沖時間。
void DRV8825::motorMoveTo(double distance, bool direction) //(distancia, dire??o, tempo da largura do pulso em microssegundos (metade do tempo em nível alto, metade em nível baixo))
{
digitalWrite(DIR, direction);
long accSpeed = SMIN;
long steps = distance*SPM;
long stepsToStop;
bool flag = true;
for(long i = 0; i 《 steps; i++){
if(i 《 (steps)/2){
if(accSpeed》SMAX){
if(canGo(direction)){
digitalWrite(STP, HIGH);
delayMicroseconds(accSpeed/2);
digitalWrite(STP, LOW);
delayMicroseconds(accSpeed/2);
}
else{
delayMicroseconds(accSpeed);
}
accSpeed = accSpeed - ACC;
}
這時,將存儲電動機為達到該路徑的最大速度而執(zhí)行的脈沖量。
else
{
if(flag){
stepsToStop = i;
flag = false;
}
if(canGo(direction)){
digitalWrite(STP, HIGH);
delayMicroseconds(SMAX/2);
digitalWrite(STP, LOW);
delayMicroseconds(SMAX/2);
}
else{
delayMicroseconds(SMAX);
}
}
}
此數(shù)量將與達到行程結束之前用于發(fā)動機減速的量相同。
要使發(fā)動機減速,脈沖時間會增加
else
{
if(i 《 steps-stepsToStop){
if(canGo(direction)){
digitalWrite(STP, HIGH);
delayMicroseconds(SMAX/2);
digitalWrite(STP, LOW);
delayMicroseconds(SMAX/2);
}
else{
delayMicroseconds(SMAX);
}
}
else
{
if(canGo(direction)){
digitalWrite(STP, HIGH);
delayMicroseconds(accSpeed/2);
digitalWrite(STP, LOW);
delayMicroseconds(accSpeed/2);
}
else{
delayMicroseconds(accSpeed);
}
accSpeed = accSpeed + ACC;
}
}
}
}
-
步進電機
+關注
關注
152文章
3157瀏覽量
149130 -
限位開關
+關注
關注
0文章
49瀏覽量
4988
發(fā)布評論請先 登錄
實時生成步進電機速度曲線
加速度傳感器的應用與選購技巧

LSM6DS3TRC讀取加速度數(shù)據(jù)不對是哪里的問題?
網(wǎng)絡筆記分享-實時生成步進電機速度曲線
加速度傳感器的選型?主要看這八大參數(shù)!

加速度傳感器的工作原理

adxl345檢測振動加速度信號,在加速度為0處,有±1g的跳動怎么解決?
MEMS加速度計的工作原理是什么
什么是AEC-Q102的恒定加速度測試?

加速度傳感器的應用

物聯(lián)網(wǎng)系統(tǒng)中加速度測試方案的實現(xiàn)_加速度傳感器分析

EPSON工業(yè)級加速度計選型

步進電機伺服控制系統(tǒng)的作用
e2studio開發(fā)三軸加速度計LIS2DW12(2)----基于中斷信號獲取加速度數(shù)據(jù)

評論