52
推動CDIO創新教學 計算機程式語言 / 電子電路學 MATLAB for Arduino Support Package

推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

  • Upload
    others

  • View
    3

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

推動CDIO創新教學計算機程式語言 / 電子電路學

MATLAB for Arduino

Support Package

Page 2: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

1

Motor Shield V2馬達驅動擴展板

Page 3: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

Motor Shield V2

使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM

驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進馬達(Stepper motor)/伺服馬達(Servo motor)/直流馬達(DC

motor)。

2

TB6612

PCA9685

數位接腳

類比接腳外接電源

5~12V

電源

Page 4: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

能連接2個伺服馬達

Tower Pro SG90 伺服馬達 : 三條線顏色分別是紅(電源) 、棕(接地)、橘(訊號)

Servo ①橘(訊號) 接腳,使用數位接腳D10

Servo ②橘(訊號) 接腳,使用數位接腳D9

3

http://yehnan.blogspot.tw/2013/09/arduinotower-pro-sg90.html

Page 5: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

能連接4個直流馬達

4

M1

M2

M4

M3

Page 6: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

能連接2個步進馬達

28BYJ-48 四相五線(藍粉黃橘紅)步進馬達

藍粉黃橘為4組線圈,紅色為接地

5

https://sites.google.com/site/csjhmaker/d-dong-li-pian/28byj-48-bu-jin-ma-da

一圈 2048步

28BYJ-48 Stepper Motor and ULN2003 Driver Intro

① ②

Page 7: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

Motor Shield V2馬達驅動擴展板,採用疊層設計,可將Arduino Uno的全部數位與類比介面擴展出來

6

Page 8: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

MATLAB for Arduino 提供Adafruit Motor Shield V2的函式庫(library),馬達驅動的程式語法相當容易

使用以下程式碼建立馬達與驅動擴展板的連結

7

%指派Arduino板代號為a_board,並使用Adafruit/MotorshieldV2 library

a_board = arduino('COM3','Uno','Libraries','Adafruit/MotorshieldV2');

%使用addon指令建立驅動擴展板的連結,指派驅動擴展板代號為motor_shield

motor_shield = addon(a_board,'Adafruit/MotorshieldV2');

Page 10: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

9

Tower Pro SG90 伺服馬達

Page 11: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

Tower Pro SG90 伺服馬達

三條線顏色分別是紅(電源) 、棕(接地)、橘(訊號)

所需PWM脈衝訊號波範圍約為0.5~2.4ms, 也就是0.510-3

~ 2.410-3 s,轉動角度範圍可設定 0o~180o

10

Arduino練習:伺服馬達以Tower Pro SG90為例

伺服馬達簡介

Page 12: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

Tower Pro SG90 伺服馬達0o~180o轉動範例

在這個範例中,使用Adafruit/MotorshieldV2函式庫中servo/readPosition/writePosition的指令來調控伺服馬達的輸出

s = servo(argument引數): creates a servo motor connection

with the specified motor number on an Adafruit® Motor

Shield.

s = servo(shield, motornum)

shield :馬達驅動擴展板代號

motornum : 連接至馬達驅動擴展板的伺服馬達位置(1或2)

11

位置 “2”

位置 “1”

建立伺服馬達與驅動板的連結

Page 13: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

也可再依據各廠牌伺服馬達規格,設定所需PWM脈衝訊號範圍

s = servo(shield, motornum, Name, Value)

Name :引數名稱

'MinPulseDuration' :最小脈衝時間(對應伺服馬達最小角度)

'MaxPulseDuration' : 最大脈衝時間(對應伺服馬達最大角度)

Value :引數相對應的數值

12

範例:

step_m = servo(MT_shield,1);

表示在名為MT_shield馬達驅動擴展板上的第1個伺服馬達接腳,連接1個伺服馬達,並將此伺服馬達指派名為step_m

範例:

step_m = servo(MT_shield,1,...

'MinPulseDuration', 6.0*10^-4,...

'MaxPulseDuration', 2.1*10^-3);

表示step_m伺服馬達最小脈衝訊號時間0.6ms/最大脈衝訊號時間2.1ms,分別對應其最小與最大角度

Page 14: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

position = readPosition(argument引數): reads the position of the motor shaft and returns the value of the position in ratio to the maximum angle of the specified servo motor.position = readPosition(s)

s :馬達驅動擴展板上連接的伺服馬達代號

position讀取值為0~1間的數值,若馬達的轉動範圍為0o~180o,則0代表0o / 1代表180o ,假設s的讀取值為0.5則其對應角度為0.5180o=36o

13

範例:

current_pos = readPosition(step_m);

current_angle = current_pos*180;fprintf('Current motor position is %6.2f degrees\n',current_angle)

讀取step_m伺服馬達介於0~1數值位置後,再轉換為角度

讀取伺服馬達的轉動位置/角度

Page 15: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

writePosition(argument引數): sets servo position to the specified value.

writePosition(s, position)

s :馬達驅動擴展板上連接的伺服馬達代號

position :為0~1間的數值,代表伺服馬達轉動軸到達的位置,

14

範例:

writePosition(step_m,0.5);

若馬達的轉動範圍為0o~180o,step_m伺服馬達轉至0.5,相當於0.5180o = 36o

設定伺服馬達轉動的角度

Page 16: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

15

將Tower Pro SG90 伺服馬達連接至Motor Shield V2馬達驅動擴展板servo1的腳位

此範例設定伺服馬達:(可依馬達規格進行調整)

最小脈衝訊號時間0.6ms(MinPulseDuration)

最大脈衝訊號時間2.1ms(MaxPulseDuration)

分別對應其最小(0o)與最大角度(180o)

開始來寫個簡單的程式吧!

Page 17: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

Tower Pro SG90 伺服馬達0o~180o轉動程式範例

16

clear;clc;

%指派Arduino板代號為a_board,並使用Adafruit/MotorshieldV2 library

a_board = arduino('COM3','Uno','Libraries','Adafruit/MotorshieldV2');

%使用addon指令建立驅動擴展板的連結,指派驅動擴展板代號為MT_shield

MT_shield = addon(a_board,'Adafruit/MotorshieldV2');

%表示伺服馬達連接於馬達驅動擴展板上的第1組接腳step_m伺服馬達最小脈衝訊號時間0.6ms/最大脈衝訊號時間2.1ms,%此範例分別對應其最小(0度)與最大角度(180度)

step_m = servo(MT_shield,1,'MinPulseDuration', 0.6*10^-3,...

'MaxPulseDuration', 2.1*10^-3);

no = 10;%取點數目m_position = linspace(0,1,no); %0~1間取no點,第1點0,最後一點10

writePosition(step_m,0);pause(0.5)%伺服馬達轉回至0點位置

%使用for迴圈執行此no點的角度for i = 1:length(m_position)

%使用writePosition執行馬達角度轉動%若馬達的轉動範圍為0~180度,step_m伺服馬達轉至m_position(i)

%相當於 m_position(i)x180度writePosition(step_m,m_position(i));

Page 18: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

17

%使用readPosition讀取step_m伺服馬達介於0~1數值位置後,%再轉換為角度current_pos = readPosition(step_m);

current_angle = current_pos*180;

fprintf('Current motor position is %6.2f degrees\n',current_angle)

pause(0.5)

end

clear % 執行完後清除

Page 19: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

執行結果

18servo_motor_01.mp4

Page 20: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

19

Light Meter Project

Tower Pro SG90 伺服馬達 +

光敏电阻(Photoresistor/

Light-Dependent Resistor, LDR)

Page 22: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

使用 Tower Pro SG90 伺服馬達 + 光敏电阻(Photoresistor/Light-Dependent Resistor, LDR) 組成一個光照強度量測系統

伺服馬達角度變化

0o 光照強度最強 writePosition(s, 0)

180o 光照強度最弱 writePosition(s, 1)

之前範例光敏電阻量測結果

光照強度最強壓降值設定 = 0.01V 對應 0o

光照強度最弱壓降值設定 = 4.99V 對應 180o

21

光照強時 光照不足時 全暗時

壓降 0.02V電阻值 40Ω

壓降 1.5V電阻值 4.3kΩ

壓降 4.8V電阻值 234kΩ

Page 23: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

可依據前述資訊設計一個光照強度量測系統,量測光照強度

這個範例使用2個迴路:

光敏電阻迴路: 感測外界環境光照強度,由Motor Shield V2

馬達驅動擴展板的類比接腳輸入,並藉由此訊號決定光照強度量測系統的動作,為光照強度量測系統的 “輸入(input)”

端,馬達轉動角度可由以下關係求得:

伺服馬達迴路: 接受Motor Shield V2馬達驅動擴展板的輸出訊號,執行光照強度量測系統的動作,為光照強度量測系統的 “輸出(output)”端 writePosition(s, position)

22

)01.099.4(

01.01)~(0

光敏電阻量測值

position

Page 24: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

光照強度量測系統輸入/輸出

23

10kΩ

輸入 輸出

Page 25: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

將光敏電阻壓降輸出連接至類比A0腳位,讀取光敏電阻兩端的壓降值,以判定光照強度,計算伺服馬達轉動角度

24

10kΩ

Page 26: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

光照強度量測系統Arduino接線線路

25

Page 27: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

光照強度量測系統程式範例

26

clear;clc;

%指派Arduino板代號為a_board,並使用Adafruit/MotorshieldV2 library

a_board = arduino('COM3','Uno','Libraries','Adafruit/MotorshieldV2');

%使用addon指令建立驅動擴展板的連結,指派驅動擴展板代號為MT_shield

MT_shield = addon(a_board,'Adafruit/MotorshieldV2');

%表示step_m伺服馬達最小脈衝訊號時間0.6ms/最大脈衝訊號時間2.1ms,%此範例分別對應其最小(0度)與最大角度(180度)

step_m = servo(MT_shield,1,'MinPulseDuration', 0.6*10^-3,...

'MaxPulseDuration', 2.1*10^-3);

no = 10;%取點數目m_position = linspace(0,1,no); %0~1間取no點,第1點0,最後一點10

writePosition(step_m,0);pause(0.5)%伺服馬達轉回至0點位置

%使用for迴圈執行此no點的角度for i = 1:length(m_position)

%使用writePosition執行馬達角度轉動%若馬達的轉動範圍為0~180度,step_m伺服馬達轉至m_position(i)

%相當於 m_position(i)x180度writePosition(step_m,m_position(i));

Page 28: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

27

%使用readPosition讀取step_m伺服馬達介於0~1數值位置後,%再轉換為角度current_pos = readPosition(step_m);

current_angle = current_pos*180;

fprintf('Current motor position is %6.2f degrees\n',current_angle)

pause(0.5)

end

clear % 執行完後清除

Page 29: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

執行結果

28servo_photoresistor.mp4

Page 30: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

可以試著在這系統再加上一個LED迴路,隨著光照強度改變明暗度,但因伺服馬達連接在馬達驅動擴展板上的第1個servo接腳,數位接腳D10已被使用,所以LED迴路的數位輸出接腳不可使用D10

29

220Ω

10kΩ①

Page 31: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

30

DC 直流馬達

Page 32: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

DC 直流馬達轉動範例

在這個範例中,使用Adafruit/MotorshieldV2函式庫中dcmotor/start/stop的指令來調控直流馬達的輸出

dcm = dcmotor(argument引數): creates a DC motor

connection with the specified motor number on an Adafruit®

Motor Shield connected to an Arduino® board.

dcm = dcmotor(dev,motornum)

dev :馬達驅動擴展板代號

motornum : 連接至馬達驅動擴展板的直流馬達位置(1/2/3/4)

31

建立直流馬達與驅動板的連結

Page 33: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

直流馬達接腳位置(1/2/3/4)

32

位置 “2”

位置 “1”

位置 “3”

位置 “4”

Page 34: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

也可設定直流馬達轉動速度dcm = dcmotor(dev,motornum, Name, Value)

Name :引數名稱

'Speed' : 直流馬達速度

Value :引數對應數值,直流馬達速度速度設定值介於-1~1之間

此外,直流馬達速度設定亦可使用以下程式語法:

33

範例:

dc_m = dcmotor(MT_shield,4,'Speed',0.5);

表示dc_m直流馬達速度設定為0.5

範例:

dc_m = dcmotor(MT_shield,4);

dc_m.Speed = 0.5;

範例:

dc_m = dcmotor(MT_shield,4);

表示在名為MT_shield馬達驅動擴展板上的第4個直流馬達接腳,連接1個直流馬達,並將此直流馬達指派名為dc_m

Page 35: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

start(argument引數): starts the DC motor. If the motor speed is set 0, the DC motor will not rotate.

start(dcm)

dcm :馬達驅動擴展板上連接的直流馬達代號

34

啟動直流馬達運轉

範例:

dc_m = dcmotor(MT_shield,4);

dc_m.Speed = 0.5;

start(dc_m)

Page 36: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

stop(argument引數): stops the DC motor.

stop(dcm)

dcm :馬達驅動擴展板上連接的直流馬達代號

35

停止直流馬達運轉

範例:

dc_m = dcmotor(MT_shield,4);

dc_m.Speed = 0.5;

start(dc_m);

pause(5);

stop(dc_m);

Page 37: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

36

將直流馬達連接至Motor Shield V2馬達驅動擴展板M4的腳位

開始來寫個簡單的程式吧!

Page 38: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

DC 直流馬達轉動程式範例

37

clear;clc;

%指派Arduino板代號為a_board,並使用Adafruit/MotorshieldV2 library

a_board = arduino('COM3','Uno','Libraries','Adafruit/MotorshieldV2');

%使用addon指令建立驅動擴展板的連結,指派驅動擴展板代號為MT_shield

MT_shield = addon(a_board,'Adafruit/MotorshieldV2');

%直流馬達連接於馬達驅動擴展板上的第4個位置,並將此直流馬達指派名為dc_m

dc_m = dcmotor(MT_shield,4);

dc_m.Speed = 0.8; % 設定馬達速度為0.8

start(dc_m); %啟動馬達運轉pause(5);

dc_m.Speed = -0.1; %運轉5秒後馬達反轉速度為0.1

pause(5);

stop(dc_m); %運轉5秒後,停止馬達運轉clear; % 執行完後清除

Page 39: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

執行結果

38dc_motor_01.mp4

Page 40: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

可以試著在這系統再加上一個之前完成的感光燈系統迴路,隨著光照強度改變明暗度,並調控馬達速度,範例中的光敏電阻亦可由其它元件諸如可變電阻/熱敏電阻取代,不妨嘗試看看

39

Page 41: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

40

28BYJ-48 四相五線步進馬達

Page 42: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

能連接2個步進馬達

28BYJ-48 四相五線(藍粉黃橘紅)步進馬達

藍粉黃橘為4組線圈,紅色為接地

41

https://sites.google.com/site/csjhmaker/d-dong-li-pian/28byj-48-bu-jin-ma-da

一圈 2048步

28BYJ-48 Stepper Motor and ULN2003 Driver Intro

① ②

Page 43: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

28BYJ-48 四相五線步進馬達

藍粉黃橘為4組線圈,紅色為接地

42

https://sites.google.com/site/csjhmaker/d-dong-li-pian/28byj-48-bu-jin-ma-da

28BYJ-48 Stepper Motor and ULN2003 Driver Intro

一圈 2048步

Page 44: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

28BYJ-48 四相五線(藍粉黃橘紅)步進馬達轉動範例

在這個範例中,使用Adafruit/MotorshieldV2函式庫中stepper/move/release的指令來調控步進馬達的輸出

sm = stepper(argument引數): creates a stepper motor

connection with the specified motor number and steps per

revolution on an Adafruit® Motor Shield.

sm = stepper(shield,motornum,sprev)

shield :馬達驅動擴展板代號

motornum : 連接至馬達驅動擴展板的步進馬達位置(1/2)

sprev : 連接至馬達驅動擴展板的步進馬達每圈轉動步數

43

建立步進馬達與驅動板的連結

Page 45: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

步進馬達接腳位置(1/2)

44

位置 “1” 位置 “2”

Page 46: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

也可設定步進馬達每分鐘轉速(RPM)/激磁形式dcm = dcmotor(dev,motornum, Name, Value)

Name :引數名稱

'RPM' : 步進馬達每分鐘轉速

'StepType' : 步進馬達激磁形式

Value :引數對應值

'RPM' 對應數值

'StepType'對應 'Single' , 'Double' , 'Interleave' , 'Microstep'

45

範例:

stepper_m = stepper(MT_shield,2,2048,'RPM',15,

'StepType', 'Single');

表示stepper_m步進馬達轉速為15RPM,激磁形式為Single

範例:

stepper_m = stepper(MT_shield,2,2048);

表示在名為MT_shield馬達驅動擴展板上的第2個步進馬達接腳,連接1個步進馬達,並將此步進馬達指派名為stepper_m

Page 47: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

此外,步進馬達轉速(RPM)設定亦可使用以下程式語法:

move(argument引數): rotates the stepper motor for the specified number of steps. The move command blocks MATLAB® while the stepper motor is rotating.

move(sm,steps)

sm :馬達驅動擴展板上連接的步進馬達代號

steps :步進馬達轉動步數

46

範例:

stepper_m = stepper(MT_shield,2,2048,'StepType',

'Single');

stepper_m.RPM = 15;

啟動步進馬達運轉

範例:

move(stepper_m,1024);

表示stepper_m步進馬達轉動1024步

Page 48: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

release(argument引數): releases the stepper motor, allowing it to rotate freely.

release(sm)

sm :馬達驅動擴展板上連接的步進馬達代號

47

停止步進馬達運轉

範例:

stepper_m = stepper(MT_shield,2,2048,'StepType',

'Single');

stepper_m.RPM = 15;

move(stepper_m,1024);

release(stepper_m)

Page 49: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

48

將步進馬達連接至Motor Shield V2馬達驅動擴展板M3M4的腳位

開始來寫個簡單的程式吧!

Page 50: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

DC 直流馬達轉動程式範例

49

clear;clc;

%指派Arduino板代號為a_board,並使用Adafruit/MotorshieldV2 library

a_board = arduino('COM3','Uno','Libraries','Adafruit/MotorshieldV2');

%使用addon指令建立驅動擴展板的連結,指派驅動擴展板代號為MT_shield

MT_shield = addon(a_board,'Adafruit/MotorshieldV2');

%步進馬達連接於馬達驅動擴展板上的第2個位置,並將此直流馬達指派名為dc_m

stepper_m = stepper(MT_shield,2,2048,'stepType','single')

stepper_m.RPM = 15; % 設定馬達轉速15RPM

move(stepper_m,1024); % 馬達轉動1024步pause(0.1);

stepper_m.RPM = 2; % 設定馬達轉速2RPM

move(stepper_m,-1024); % 馬達反向 轉動1024步pause(0.1);

clear; % 執行完後清除

Page 51: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

執行結果

50stepper_motor_01.mp4

Page 52: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進

可以試著在這系統再加上一個之前完成的感光燈系統迴路,隨著光照強度改變明暗度,並調控馬達速度,範例中的光敏電阻亦可由其它元件諸如可變電阻/熱敏電阻取代,不妨嘗試看看

51