這一次是用電腦控制步進馬達的轉速
打開arduino介面才發現...單晶片處於失控狀態
我在猜可能是單晶片的電流不夠大,無法推動達零頓電路的大電流
(我用的atmega168每隻腳最多輸入輸出40mA,而步進馬達則會用掉600mA...)
所以我加了7404(反相器)
去做穩定脈波輸出的功能,然後就把問題解決掉了XD
結果產生新問題...電壓不夠大...只剩下3.4V左右
我再加了一顆7805做為電源的穩壓
提高到5V左右
7805雖然有散熱片,但是在5V,0.6A的輸出下...還真是燙@@
code:
const int A = 9;
const int B = 10;
const int a = 11;
const int b = 12;
int t = 30;
String readStr = String(100);
String str1 = String(3);
String str2 = String(10);
void setup()
{
Serial.begin(9600);
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
}
void loop()
{
//Serial.println("hello");
while( Serial.available() )
{
delay(1);
//delayMicroseconds(500);
if( Serial.available() > 0 )
{
char c = Serial.read(); //gets one byte from serial buffer
if (c == ';')
{
Serial.println(readStr);
goto parce;
}
readStr += c;
} //makes the string readString
}
parce:
if ( readStr.length() > 0 )
{
int pos = readStr.length(); //capture string length
str1 = readStr.substring(0, readStr.indexOf(' ')); //first part of string
t = StringtoInt(str1);
//str2 = readStr.substring(readStr.indexOf(' ') + 1, pos);
//Serial.println("Recieving command: " + readStr);
Serial.println(t);
//command(str1, str2);
readStr = "";
}
digitalWrite(A, HIGH);
digitalWrite(B, HIGH);
digitalWrite(a, LOW);
digitalWrite(b, LOW);
delay(t);
digitalWrite(A, LOW);
digitalWrite(B, HIGH);
digitalWrite(a, HIGH);
digitalWrite(b, LOW);
delay(t);
digitalWrite(A, LOW);
digitalWrite(B, LOW);
digitalWrite(a, HIGH);
digitalWrite(b, HIGH);
delay(t);
digitalWrite(A, HIGH);
digitalWrite(B, LOW);
digitalWrite(a, LOW);
digitalWrite(b, HIGH);
delay(t);
}
int StringtoInt(String num)
{
int NUM = 0;
for( int i = 0; i < num.length() ; i++)
{
NUM += (num[i] - 48) * pow(10, num.length() - i - 1);//在百位數以上的時候,會有少1的bug
}
if( num.length() > 2)//如果輸入超過百位數,則補一//修正bug用的...
{
NUM += 1;
}
return NUM;
}