步驟1:您將需要什么
該項(xiàng)目將需要一些注意事項(xiàng),如果您正在閱讀此內(nèi)容,則可能已經(jīng)擁有:/p》
*某種風(fēng)味的arduino(我正在使用UNO)
*步進(jìn)電機(jī)(請查閱規(guī)格表)
* L298N驅(qū)動程序類似于圖片中的電路板
*某種電源,至少可提供5V電壓,但小于電機(jī)的最大電壓
*連接線,剝線鉗,電線推子等(在該項(xiàng)目上無需焊接)
數(shù)字萬用表可能會有所幫助
第2步:將L298N連接到Arduino
我在上一節(jié)中對此進(jìn)行了描述,但讓我們詳細(xì)介紹一下:
L298N模塊IN1-4上有四個(gè)引腳,有四個(gè)輸出連接OUT1-4。模塊的接線盒中還有一個(gè)+ V和GND。還有一個(gè)+ 5V端子(我們將不再使用)。
IN引腳可以連接到Arduino上的任何控制引腳。在我的情況下,我在UNO上有一個(gè)LCD屏蔽,因此我使用了模擬引腳(A1到4,這在以后很重要)。然后按如下方式連接它們:
A1-》 IN1
A2-》 IN2
A3-》 IN3
A4-》重要的是,還必須將arduino的接地引腳連接到公共接地端子,否則將無法正常工作!?。。?!
然后我將+ V連接到可變電源,然后通過端子將地再次接地。
步驟3:為步進(jìn)器接線
如果您查看規(guī)格表,它應(yīng)該列出哪些導(dǎo)線是A + A- B +和B-有時(shí),它們不使用此特定語言,但是您所擁有的是一盒帶有4根導(dǎo)線的盒子,它們被分成兩組。您可以通過測量電阻(或連接)來查看萬用表,以查看配對的兩個(gè)(如果沒有說明)。為了使電動機(jī)真正旋轉(zhuǎn),您需要確保A +和B +分別掛接到OUT1和OUT3。如果您對電動機(jī)進(jìn)行接線,而電動機(jī)剛剛振動,則其中一對會反轉(zhuǎn)。
接線圖基本上是:
A +(黑色)-》 OUT1
A-(綠色)-》 OUT2
B +(藍(lán)色)-》 OUT3
B-(紅色)-》 OUT4
第4步:編程:概述和警告
因此,當(dāng)我第一次開始本奧德賽時(shí),文檔非常少,而且更糟糕的是,大多數(shù)示例仍然依賴于使用digitalWrite來處理引腳操作,或更糟糕的是,仍然依賴于內(nèi)置的arduino步進(jìn)器庫,該庫實(shí)際上實(shí)現(xiàn)了同一件事。但是,以這種方式進(jìn)行操作存在很大的問題。 digitalWrite系統(tǒng)非常慢,而且,如果要執(zhí)行的是digitalWrite,然后再執(zhí)行另一個(gè)digitalWrite,則它確實(shí)是丑陋的,可怕的慢速代碼。
如果您還不熟悉它,則應(yīng)該閱讀以下內(nèi)容:
https://www.arduino.cc/zh/Reference/PortManipulati 。..
這允許我們要做的是,而不是一次寫高電平或低電平引腳,只需通過尋址控制這些引腳的寄存器,就將整套引腳高電平或低電平寫入即可。
警告:L298N H橋本質(zhì)上是4個(gè)單獨(dú)的開關(guān),作為一個(gè)開關(guān)運(yùn)行,如果與現(xiàn)有的arduino Stepper庫一起使用,則有一個(gè)主要的壞習(xí)慣,或者如果您使用重復(fù)的digitalWrite()語句,也就是說,由于設(shè)置引腳之前的等待時(shí)間,則可能同時(shí)將IN1和IN2置于高電平。這會造成死機(jī),并且可能不超過一兩分鐘,可能會冒煙檢查您的橋梁。我花了幾天的調(diào)試時(shí)間才能弄清楚橋?yàn)楹我?安培的電流,并在運(yùn)行約5秒鐘后,散熱器變得太熱而無法觸摸。
第5步:編程示例
因此,這里可能需要或可能不需要一些額外的東西,例如LCDShield的代碼或檢查主循環(huán)執(zhí)行時(shí)間的代碼。
如果您使用的是A1-A4,則應(yīng)編譯該代碼(Arduino IDE 1.6.5),并使電動機(jī)旋轉(zhuǎn)。這段代碼大部分是我自己的,從Stepper.h文件中借來了或修改了一點(diǎn)。
注意:
“ StepFast”上的延遲以微秒為單位,因此2000僅為2毫秒,大多數(shù)情況下,如果嘗試以小于1200的延遲步進(jìn)電動機(jī)它會跳過一些步,盡管對于大多數(shù)電動機(jī)來說,800步是4整圈,但您可能會發(fā)現(xiàn)電動機(jī)只能轉(zhuǎn)動四分之一圈。
此代碼僅作為示例,目前不反向,它也不會吸收L298的反饋,也不會做我想做的其他很多事情。在查看現(xiàn)有的Stepper.h時(shí),我可能會在接下來的幾周中使用此方法來處理步驟,以重新編寫它,因?yàn)楝F(xiàn)有的方法可能會損壞L298或任何其他H橋配置。
#include
#include
//Keypad Shield LCD pins
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
long unsigned int lasttime;
long unsigned int timer;
int timeuntil;
float exectime;
int smallcount;
void setup()
{
lcd.begin(16, 2);
lcd.print(“Motor Test”);
delay(2500);
lcd.clear();
}
void StepFast(long int steps,long unsigned wait)
{
DDRC = B00011110; //set arduino ports A1-A4 output remember this works backwards!
// ^-pin 7^-pin 0
int pattern = 0;
int mydelay = 0;
for (int i = 0;i 《 steps; i++)
{
switch (pattern)
{
case 0: // 1010
PORTC = B00001010; //arduino analog port we‘re using pins A1-A4 So we’re only going to change those
break;
case 1: // 0110
PORTC = B00001100;
break;
case 2: //0101
PORTC = B00010100;
break;
case 3: //1001
PORTC = B00010010;
break;
}
pattern++;
if (pattern 》 3) {pattern = 0; }
delayMicroseconds(wait);
}
PORTC = B00000000; //de-energize to motor
}
void loop()
{
lasttime = timer;
timer = millis();
exectime = (timer - lasttime)/1000;
if (timeuntil 《 timer)
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(“Clockwise ”);
lcd.print(exectime);
lcd.setCursor(0,1);
lcd.print(timer);
lcd.print(“ ”);
lcd.print(lasttime);
timeuntil = timer + 1500;
}
StepFast(800,2000); //steps,delay in microseconds
delay(5000);
}
注意:
此代碼在?300RPM的中等步進(jìn)速度(步進(jìn)率為1ms左右)下可以很好地工作,因?yàn)槟鷩L試將其提高到1000RPM,除非電壓升高,否則它將開始丟失步驟,但是,如果以》 5V在60RPM(5ms)下運(yùn)行電動機(jī),則L298N會開始變得很熱。
步驟6:事后的想法和補(bǔ)充
所以我在原始文章中沒有真正提到的一些事情我非常重視在處理過程中。其中的主要問題是:
隨著步進(jìn)速度的增加,電源電壓也必須增加
使用引腳ENA和ENB作為PWM輸入以將電壓保持在低低步速,并隨著步速的增加而提高
加速和慣性應(yīng)對
-
步進(jìn)電機(jī)
+關(guān)注
關(guān)注
150文章
3114瀏覽量
147607 -
L298N
+關(guān)注
關(guān)注
21文章
224瀏覽量
78716 -
Arduino
+關(guān)注
關(guān)注
188文章
6472瀏覽量
187353
發(fā)布評論請先 登錄
相關(guān)推薦
評論