找資料?
< All Topics
Print

【感測】 DC電機 | DUAL22-2s | esp32

簡介

我們無法使用微處理器、單晶片(MCU)等可程式微控器單元,直接控制致動器(電機、電磁閥…)或是較大功率元件,原因在於MCU的GPIO控制腳位是一種通用型的輸出輸入訊號處理設計思維,GPIO腳位對外的電流輸出能力(fan out)都相當微小,不足以驅動致動器等需要較大功率的元件。如下圖。解決的方法就是透過專化的處理電路,對應被控制元件(如直流電機、BLDC…)的特性進行功率放大、訊號回授、電路保護…等處裡。

準備

材料與工具

本文範例使用【DUAL22-2s開發板】為示範。如圖標註,每個DC電機接口可提供max 10V/ 800mA的推動能力。此電機接口可使用N20-6V/12V、TT馬達…等,或其他符合推動規格以內之電機。

延伸應用部分,由於此四組電機接口為獨立控制,是以也可以滿足全向輪的控制需求。

GPIO與電路

DUAL22-2s開發板內建之DC馬達接口與PWM通道配置,如下表與圖所示。

函數與補充

我們依據DUAL22-2s的電路規劃特性,提供專用的函數庫以方便【快速應用與學習】的用途。當然,你也可以選擇不使用此函數庫,一樣可以完整地控制DUAL22-2s硬體功能。我們的函數庫完全開放、使用簡明的C/C++語法撰寫,你也可以據此修改更加適合你使用需求的函數庫。

函數使用方式,請參照本文、韌體範例。

函數庫控制元件內建數類別方法
dual2s.hDC馬達4Motor+ void Motor::act(dir, speed);
+ void Motor::stop();
+ typedef enum {STOP,CW,CCW} Motor_Action;

韌體範例

注意:驅動電機需要的電流較大些,請將鋰電池依極性方向安裝,方能正常驅動電機

DC電機規格限制:10V以下、耗電流800mA以下、瞬時堵轉電流1A以下。

Arduino C語言

【dual2s函數庫是小幫手,功用在快速上手】

dual2s函數庫開放,有需要者,你可以修改成所需的功能。

  • 行數 4-26:DUAL22-2s開發板GPIO腳位定義。依據需求開啟相對腳位即可。
  • 行數30-38:PWM通道使用定義。
#include <dual2s.h>

//DC電機GPIO
#define PIN_MOTO_1A  14
#define PIN_MOTO_1B  32
#define PIN_MOTO_2A  12
#define PIN_MOTO_2B  33
#define PIN_MOTO_3A  25
#define PIN_MOTO_3B  26
#define PIN_MOTO_4A  23
#define PIN_MOTO_4B  22
//蜂鳴器GPIO
#define PIN_BUZZER   15
//超音波GPIO
#define PIN_USC_FRONT_ECHO 13
#define PIN_USC_FRONT_TRIG 27
#define PIN_USC_RIGHT_ECHO 5
#define PIN_USC_RIGHT_TRIG 4
#define PIN_USC_LEFT_ECHO 19
#define PIN_USC_LEFT_TRIG 18
//短距紅外線GPIO
#define PIN_IR_LEFT    34
#define PIN_IR_MIDDLE  35
#define PIN_IR_RIGHT   39
//供電偵測GPIO
#define PIN_BATTERY    36

//esp32 has 16 PWM channel
//Reserve 0-6 Channel for Servo, LED ... 
#define PWM_CH_BUZZER 7 
#define PWM_CH_M1A    8
#define PWM_CH_M1B    9
#define PWM_CH_M2A    10
#define PWM_CH_M2B    11
#define PWM_CH_M3A    12
#define PWM_CH_M3B    13
#define PWM_CH_M4A    14
#define PWM_CH_M4B    15

//取得DC Motor物件
Motor m1(PIN_MOTO_1A, PIN_MOTO_1B, PWM_CH_M1A, PWM_CH_M1B); //馬達接口:MOTO-1
Motor m2(PIN_MOTO_2A, PIN_MOTO_2B, PWM_CH_M2A, PWM_CH_M2B); //馬達接口:MOTO-2
Motor m3(PIN_MOTO_3A, PIN_MOTO_3B, PWM_CH_M3A, PWM_CH_M3B); //馬達接口:MOTO-3
Motor m4(PIN_MOTO_4A, PIN_MOTO_4B, PWM_CH_M4A, PWM_CH_M4B); //馬達接口:MOTO-4


void setup() { 
  //Motor::CW,  順時針轉動
  //Motor::CCW, 逆時針轉動

  m1.act(Motor::CW, 1023);
  m3.act(Motor::CW, 1023);
  delay(1000);
  m1.stop();
  m3.stop();
  delay(1000);
  m1.act(Motor::CCW, 1023);
  m3.act(Motor::CCW, 1023);  
  delay(1000);
  m1.stop();
  m3.stop();  
  delay(1000);

  m2.act(Motor::CW, 1023);
  m4.act(Motor::CW, 1023);
  delay(1000);
  m2.stop();
  m4.stop();
  delay(1000);
  m2.act(Motor::CCW, 1023);
  m4.act(Motor::CCW, 1023);  
  delay(1000);
  m2.stop();
  m4.stop();  
  delay(1000);

}

void loop() {
  
}

yesioBlockly積木語言

電源啟動/重置啟動後,電機接口MOTO-1順時針旋轉、MOTO-3逆時針旋轉,3秒後停止。

Tags:
Table of Contents