推動cdio創新教學 - aero.fcu.edu.t · motor shield v2 使用2個tb6612 mosfet馬達驅動ic...
TRANSCRIPT
![Page 1: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/1.jpg)
推動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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/2.jpg)
1
Motor Shield V2馬達驅動擴展板
![Page 3: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/3.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/4.jpg)
能連接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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/5.jpg)
能連接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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/6.jpg)
能連接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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/7.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/8.jpg)
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 9: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/9.jpg)
MATLAB for Arduino 馬達控制範例影片
8
![Page 10: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/10.jpg)
9
Tower Pro SG90 伺服馬達
![Page 11: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/11.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/12.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/13.jpg)
也可再依據各廠牌伺服馬達規格,設定所需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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/14.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/15.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/16.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/17.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/18.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/19.jpg)
執行結果
18servo_motor_01.mp4
![Page 20: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/20.jpg)
19
Light Meter Project
Tower Pro SG90 伺服馬達 +
光敏电阻(Photoresistor/
Light-Dependent Resistor, LDR)
![Page 21: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/21.jpg)
Light Meter Project
20
https://www.mathworks.com/videos/arduino-light-meter-project-part-1-
develop-an-algorithm-in-matlab-106499.html
![Page 22: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/22.jpg)
使用 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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/23.jpg)
可依據前述資訊設計一個光照強度量測系統,量測光照強度
這個範例使用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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/24.jpg)
光照強度量測系統輸入/輸出
23
10kΩ
輸入 輸出
①
![Page 25: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/25.jpg)
將光敏電阻壓降輸出連接至類比A0腳位,讀取光敏電阻兩端的壓降值,以判定光照強度,計算伺服馬達轉動角度
24
10kΩ
①
![Page 26: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/26.jpg)
光照強度量測系統Arduino接線線路
25
①
![Page 27: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/27.jpg)
光照強度量測系統程式範例
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/28.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/29.jpg)
執行結果
28servo_photoresistor.mp4
![Page 30: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/30.jpg)
可以試著在這系統再加上一個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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/31.jpg)
30
DC 直流馬達
![Page 32: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/32.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/33.jpg)
直流馬達接腳位置(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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/34.jpg)
也可設定直流馬達轉動速度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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/35.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/36.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/37.jpg)
36
將直流馬達連接至Motor Shield V2馬達驅動擴展板M4的腳位
開始來寫個簡單的程式吧!
④
![Page 38: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/38.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/39.jpg)
執行結果
38dc_motor_01.mp4
![Page 40: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/40.jpg)
可以試著在這系統再加上一個之前完成的感光燈系統迴路,隨著光照強度改變明暗度,並調控馬達速度,範例中的光敏電阻亦可由其它元件諸如可變電阻/熱敏電阻取代,不妨嘗試看看
39
![Page 41: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/41.jpg)
40
28BYJ-48 四相五線步進馬達
![Page 42: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/42.jpg)
能連接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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/43.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/44.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/45.jpg)
步進馬達接腳位置(1/2)
44
位置 “1” 位置 “2”
![Page 46: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/46.jpg)
也可設定步進馬達每分鐘轉速(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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/47.jpg)
此外,步進馬達轉速(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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/48.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/49.jpg)
48
將步進馬達連接至Motor Shield V2馬達驅動擴展板M3M4的腳位
開始來寫個簡單的程式吧!
②
![Page 50: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/50.jpg)
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介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/51.jpg)
執行結果
50stepper_motor_01.mp4
![Page 52: 推動CDIO創新教學 - aero.fcu.edu.t · Motor Shield V2 使用2個TB6612 MOSFET馬達驅動IC 與1個16頻道PWM 驅動晶片(PCA9685)與I2C介面連接,可有效地驅動步進](https://reader030.vdocuments.mx/reader030/viewer/2022040814/5e59e89dc0e95b51aa22ef74/html5/thumbnails/52.jpg)
可以試著在這系統再加上一個之前完成的感光燈系統迴路,隨著光照強度改變明暗度,並調控馬達速度,範例中的光敏電阻亦可由其它元件諸如可變電阻/熱敏電阻取代,不妨嘗試看看
51