顯示包含「模組」標籤的文章。顯示所有文章
顯示包含「模組」標籤的文章。顯示所有文章

2022年10月12日星期三

DRV8833 馬達驅動模組

DRV8833 馬達驅動模組

    


    今天來介紹一下小面積的馬達驅動模組,雖然有些驅動力比不上L298N,但是在玩具馬達的使用上綽綽有餘了,話不多說Let's go!

    使用模組前,一定要看先規格書,這次的沒有通訊界面,我們只要看電壓與接線即可。

電源規格

  •     可以推動兩個 DC 馬達或一個步進馬達
  •     使用電壓DC 2.7V ~ DC 10.8V


手冊建議接線電路



本次實驗材料

  1. Arduino Nano
  2. 電解電容4.7uF
  3. 陶瓷電容0.1uF
  4. Drv8833 模組
  5. DC 減速馬達

實驗電路


程式碼

#define AIN1 3
#define AIN2 4
#define STBY 2
void setup() {
  pinMode(AIN1,OUTPUT);
  pinMode(AIN2,OUTPUT);
  pinMode(STBY,OUTPUT);
  digitalWrite(STBY, HIGH);
  delay(10);
}

void loop() {
  digitalWrite(AIN1, HIGH);
  digitalWrite(AIN2, LOW); ;
  delay(1000);
  digitalWrite(AIN1, LOW);
  digitalWrite(AIN2, HIGH); ;
  delay(1000);
}

 

實際結果


參考資料

DRV8833 晶片資料


2022年5月21日星期六

Arduino 繼電器模組 Relay Module

Arduino 繼電器模組

        寫這篇文章,主要紀錄一下繼電器的特性及常見問題,也分享一下繼電器模組的規格辨識、如何使用及特性,與常見問題說明,並透過實驗一、實驗二、實驗三觀察繼電器的動作。

(本次實驗用的繼電器)
 (模組電路)

繼電器簡介

        繼電器的種類其實很多,在工業上的不同領域會有不同樣式的繼電器,主要根據自己需要的使用場合挑選合適的繼電器即可,但比較常見的就是上面藍色的那個。詳細請參見維基百科

軟體

Arduino IDE

程式碼

後面的實驗都會使用同一個程式碼,只修改時延遲的時間

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(10);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(10);//間隔時間

}

繼電器的規格怎麼看?

        每個繼電器的規格都不太一樣,但大同小異,此處以SRD-05VDC-SL-C說明,主要注意控制的電壓多少及開關側可承受的電壓電流為多少(這很重要!!!)


        可操作的承受電壓會依照規格的不同也有所不同,本次實驗用的是DC 5V 驅動的,此款繼電器是靠內部線圈產生磁力,使其吸引導電片進行開關的行為,所以勢必會有切換的反應時間。正確的控制時間也會影響繼電器的動作,下圖為繼電器的反應時間相關參數。


 










Operation Time 操作時間最大是10ms,但是實際上每個繼電器會有所不同

Release Time 釋放後繼電器的回復時間

Max. ON/OFF Swithing 最大的開關動作速度,機械結構是每分鐘300次.

實驗一

目標:
觀察Arduino NANO (5V)發送訊號後繼電器的反應時間,分別有開跟關。
材料:
  1. Arduino NANO
  2. 繼電器模組
  3. 杜邦線若干條
  4. 示波器一台+探棒x2
電路接線

 程式碼

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(500);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(500);//間隔時間

}

實驗結果 

1.使用NANO 發送HIGH電位訊號後,繼電器約5.76ms後才穩定,機電器動作過程中會有彈跳現象。

2.使用NANO 發送LOW電位訊號後,繼電器約4ms後才穩定。


實驗二

目標:
觀察ESP32(3.3V)發送訊號後繼電器的反應時間,分別有開跟關。
材料:
  1. ESP32 NodeMCU
  2. 繼電器模組
  3. 杜邦線若干條
  4. 示波器一台+探棒x2
電路接線說明

 程式碼

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(500);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(500);//間隔時間

}

實驗結果

1.使用ESP32發送HIGH電位訊號後,繼電器導通的時間會比較久,相較於使用arduino NANO (5V)


2.用ESP32發送LOW電位訊號後,會發現繼電器回復的速度很快 


實驗三

目標:
觀察Arduino NANO發送較快速開關訊號(超過規格),觀察繼電器的反應時間及狀態。
材料:
  1. Arduino NANO x1
  2. 繼電器模組x1
  3. 杜邦線若干條
  4. 示波器一台+探棒x2
電路接線說明

程式碼

#define RelayPin 4

void setup() {

  pinMode(RelayPin, OUTPUT); //設定GPIO

}

void loop() {

  digitalWrite(RelayPin, HIGH);//設定GPIO HIGH

  delay(5);//間隔時間

  digitalWrite(RelayPin, LOW);//設定GPIO LOW

  delay(5);//間隔時間

} 

 實驗結果

        高速開關繼電器,觀察繼電器動作狀況,會發現Arduino NANO訊號已經關閉,繼電器才剛打開的現象,及繼電器還沒關閉的現象。



使用繼電器模組時常見的問題

1. 未注意IO電位導致推不動(使用推動電壓低於規格)
2. 用杜邦線接觸不良
3. 開關幾次後就不會動了,有可能是負載過大導致內部導電片被電焊了
4. 繼電器可承受電壓,須符合欲控制項目的需求電壓
5.     如果開關繼電器會讓MCU 重啟,需替換成有帶光耦合隔離的及做電源隔離
6.     如果控制的負載會讓繼電器產生火花,記得加火花消除電路

資料來源


繼電器元件手冊
圖片來源
Goolge 搜尋

2022年4月20日星期三

Arduino RGB LED

 Arduino RGB LED 模組


模組原理

常見使用的三色LED,不是透過通訊控制,而是透過IO控制紅藍綠三個發光二極體,使燈管亮滅進行光的三原色混合進行調色。

實驗目標

透過Arduino 控制PWM輸出至RGB 模組調整色彩顏色

電路接線

RGB – 分別對應到arduino NANO 腳位

arduino NANO

RGB 模組

PIN3

R

PIN5

B

PIN6

G

GND

-


與arduino NANO接線前,需確認模組功能正常

使用電表的短路偵測檔位進行測試,模組上的"-"腳接黑色探棒,分別用紅色探棒依序,碰觸RGB腳,確認顏色是否正常,如下圖所示

綠燈測試

紅燈測試

藍燈測試

程式碼

//RGB LED

#define G_PIN 3

#define B_PIN 5

#define R_PIN 6

int G_PIN_Duty = 0;

int B_PIN_Duty = 0;

int R_PIN_Duty = 0;

void RGB_Demo(void)

{

  //Red Light On/Off

  analogWrite(R_PIN, 255);

  delay(1000);

  analogWrite(R_PIN, 0);

  delay(1000);

  //Green Light On/Off

  analogWrite(G_PIN, 255);

  delay(1000);

  analogWrite(G_PIN, 0);

  delay(1000);

  //Blue Light On/Off

  analogWrite(B_PIN, 255);

  delay(1000);

  analogWrite(B_PIN, 0);

  delay(1000);

}

void setup() {

  analogWrite(G_PIN, 0);

  analogWrite(B_PIN, 0);

  analogWrite(R_PIN, 0);

  RGB_Demo();

}

void Control_LED(int PIN, int DelayusTime, int Lightmode)

{

  if (Lightmode == true)//Off to On

  {

    for (int i = 0; i <= 255; i++)

    {

      analogWrite(PIN, i);

      delayMicroseconds(DelayusTime);

    }

  }

  else //On to Off

  {

    for (int i = 255; i >= 0; i--)

    {

      analogWrite(PIN, i);

      delayMicroseconds(DelayusTime);

    }

  }

}

void loop() {

  Control_LED(R_PIN,3000,true);

  Control_LED(G_PIN,3000,true);

  Control_LED(B_PIN,3000,true);

  delay(2000);

  Control_LED(R_PIN,3000,false);

  Control_LED(G_PIN,3000,false);

  Control_LED(B_PIN,3000,false);

  delay(2000);

  Control_LED(R_PIN,3000,true);

  Control_LED(G_PIN,3000,true);

  delay(2000);

  Control_LED(R_PIN,3000,false);

  Control_LED(G_PIN,3000,false);

  delay(2000);

  Control_LED(G_PIN,3000,true);

  Control_LED(B_PIN,3000,true);

  delay(2000);

  Control_LED(G_PIN,3000,false);

  Control_LED(B_PIN,3000,false);

  delay(2000);

  Control_LED(R_PIN,3000,true);

  Control_LED(B_PIN,3000,true);

  delay(2000);

  Control_LED(R_PIN,3000,false);

  Control_LED(B_PIN,3000,false);

  delay(2000);

}


完成效果

注意事項

1. LED 電流跟電壓注意,記得配電阻避免電流過大

2. 每家廠牌的可能不一樣,若沒有使用模組直接使用,建議串聯電阻,可避免燒毀

3. 模組使用前先使用電表確認功能


打賞按讚