Professional Documents
Culture Documents
17151071 - Đồ án 2 tự động hóa - Xe 2 bánh tự cần bằng - Hồ Lê Long Thiên
17151071 - Đồ án 2 tự động hóa - Xe 2 bánh tự cần bằng - Hồ Lê Long Thiên
HỒ CHÍ MINH
KHOA ĐÀO TẠO CHẤT LƯỢNG CAO
BỘ MÔN ĐIỀU KHIỂN TỰ ĐỘNG
ĐỒ ÁN 2
ĐỒ ÁN 2
1.1 TẦM QUAN TRỌNG CỦA ĐỀ TÀI ERROR! BOOKMARK NOT DEFINED.
1.2 MỤC TIỆU 3
1.3 GIỚI HẠN 3
1.4 PHƯƠNG PHÁP THỰC HIỆN 4
1.5 NỘI DUNG 4
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 5
3
2.6 GIAO TIẾP I2C 19
2.6.1 Nguồn gốc I2C 19
2.6.2 Cấu tạo và nguyên lý làm việc 20
2.6.3 Giao thức truyền dữ liệu 22
4
CHƯƠNG 1 GIỚI THIỆU
1
Một ví dụ về nhược điểm của xe ba hoặc bốn bánh là: Khi xe đi lên dốc
nghiêng, do trọng lượng đầu xe khá nhẹ so với tổng khối lượng của xe, cộng
thêm việc động cơ bánh sau mạnh, khiến cho xe mất thăng bằng và lật ra sau.
Hình 1.2: Xe 3 bánh di chuyển trên mặt phẳng nghiêng, bị lật ra sau
Việc chế tạo xe 4 bánh, giống như xe hơi đồ chơi hay các loại xe bốn bánh
đang sử dụng trong giao thông hiếm khi gặp các vấn đề trên, nhưng điều này sẽ
làm các xe robot không gọn gàng và bộ phận lái (cua quẹo) gặp một chút khó
khăn, khó xác định được góc cua và quãng đường đi.
Các xe dạng hai bánh đồng trục lại thăng bằng rất tốt và linh động khi di
chuyển trong địa hình phức tạp. Khi nó leo sườn dốc, nó tự động nghiêng ra
trước và giữ cho trọng lượng dồn về về trước. Tương tự khi leo xuống dốc, nó
nghiêng ra sau và dồn trọng lực về sau. Do đó, không bao giờ có hiện tượng xe
mất thăng bằng và ngã.
2
Đối với những địa hình khó đi, sự thăng bằng của xe hai bánh sẽ mang lại
nhiều ý nghĩa thực tiễn trong giới hạn ổn định hơn là xe ba/bốn bánh truyền
thống.
Ngoài ra, đề tài “xe hai bánh tự cân bằng” có nhiều ứng dụng trong đời sống
và làm nền tảng cho các ứng dụng khác dựa vào thiết kế này.
3
- Thiết kế mô hình phần cứng.
- Thiết kế phần điện sử dụng các module có sẵn.
- Thực thi giải thuật bằng lập trình.
- Kiểm tra và sửa lỗi.
4
CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
Hình 2.1: Mô hình xe Hình 2.2: Hệ xe hai bánh Hình 2.3: Hệ xe hai bánh
hai bánh tự cân bằng cân bằng nhìn nghiêng cân bằng nhìn từ trên xuống
5
Bảng 2.1: Kí hiệu và ý nghĩa của các đại lượng
Hình thức cơ bản nhất của các vòng tuần hoàn trong các hệ vô hướng là
không trực tiếp mở rộng thành hệ đa biến (MIMO), được đặc trưng bởi các ma
trận thay vì các công thức.
Khái niệm về sự tối ưu gắn chặt với thiết kế hệ thống kiểm soát MIMO. Bộ
điều khiển tối ưu, tức là các bộ điều khiển tốt nhất có thể, theo các chuyên gia, bộ
kiểm soát tối ưu này tạo ra bộ điều khiển ổn định cho các hệ thống MIMO.
Do đó, các giải pháp kiểm soát tối ưu cung cấp một quy trình thiết kệ tự
động, ta chỉ phải quyết định dùng phương pháp nào.
Bộ điều chỉnh bậc hai tuyến tính LQR (Linear–quadratic regulator) là một
phương pháp nổi tiếng tạo ra sự hiệu quả thực tiễn.
Để đảm bảo hệ thống ổn định tại gốc tọa độ và có khả năng chống ảnh hưởng
của nhiễu, một hàm mục tiêu được lựa chọn như sau:
∞
1 𝑇 𝑇
𝐽= 2
∫ 𝑥 𝑄𝑥 + 𝑢 𝑅𝑢 𝑑𝑡
0
Trong đó Q và R là các ma trận đối xứng xác định dương. Chọn luật điều
khiển hồi tiếp trạng thái
u = -Kx, K là véc tơ hằng số. Thay vào J ta có:
∞
1 𝑇 𝑇
𝐽= 2
∫ 𝑥 𝑄 + 𝐾 𝑅𝐾 𝑥𝑑𝑡
0
6
∞
1 𝑇 𝑇
𝑉𝑥𝑡 = 2
∫ 𝑥 𝑄 + 𝐾 𝑅𝐾 𝑑𝑡
0
𝑉˙(𝑥) =
𝑇 𝑇 ∞
1
2 (
𝑥 𝑄 + 𝐾 𝑅𝐾 𝑥|𝑡 )
𝑇 𝑇 𝑇 𝑇
=
1
2 [
𝑥 (∞) 𝑄 + 𝐾 𝑅𝐾 𝑥(∞) − ] 1
2 [
𝑥 (𝑡) 𝑄 + 𝐾 𝑅𝐾 𝑥(𝑡) ]
Chọn K để hệ ổn định, do đó 𝑥 ∞→0. Vậy:
𝑉˙(𝑥) =−
𝑇 𝑇
1
2 [
𝑥 (𝑡) 𝑄 + 𝐾 𝑅𝐾 𝑥(𝑡) ]
Mặt khác ta có thể biểu diễn hàm Lyapunov dưới dạng:
1 𝑇
𝑉𝑥𝑡 = 2
𝑥 𝑃𝑥
Trong đó P là một ma trận đối xứng xác định dương. Như vậy ta có thể tính
⎣ ⎦ ⎣
( ) ⎦
∂𝑃
Lấy đạo hàm phương trình theo 𝐾𝑖𝑗 và dùng tính chất: ∂𝐾𝑖𝑗
=0
(
⎡
) ⎤
𝑇 −1 𝑇 𝑇 −1 𝑇
Ta suy ra:
∂
∂𝐾𝑖𝑗
⎢ Γ𝐾 − Γ
⎢ ( ) 𝐵 𝑃 (Γ𝐾 − Γ ( ) 𝐵 𝑃)⎥ = 0
⎥
⎣ ⎦
Cực tiểu xảy ra khi số hạng trong ngoặc bằng không. Do đó
7
𝑇 −1 𝑇
Γ𝐾 = Γ ( ) 𝐵 𝑃
𝑇
Vector tín hiệu điều khiển: 𝑢(𝑡) = [𝑢1(𝑡), 𝑢2(𝑡), …, 𝑢𝑚(𝑡)] (10)
Bài toán đặt ra là làm tín hiệu điều khiển 𝑢(𝑡) điều chỉnh hệ thống từ trạng
thái đầu 𝑥(0) = 𝑥0 bất kỳ về trạng thái cuối 𝑥(𝑡𝑓) = 0 sao cho tối thiểu chỉ tiêu
Đối tượng tuyến tính rới rạc được mô tả bởi phương trình trạng thái:
𝑥(𝑘 + 1) = 𝑎𝑑𝑥(𝑘) + 𝑏𝑑𝑢(𝑘) (11)
𝑇
Vector trạng thái: 𝑥(𝑡) = [𝑥1(𝑡), 𝑥2(𝑡), …, 𝑥𝑛(𝑡)] (12)
𝑇
Vector tín hiệu điều khiển: 𝑢(𝑡) = [𝑢1(𝑡), 𝑢2(𝑡), …, 𝑢𝑚(𝑡)] (13)
8
Bài toán đặt ra là làm tín hiệu điều khiển 𝑢(𝑘) điều chỉnh hệ thống từ trạng
thái đầu 𝑥(0) = 𝑥0 bất kỳ về trạng thái cuối 𝑥(𝑁) = 0 sao cho tối thiểu chỉ tiêu
2.3. MPU-6050
2.3.1. GIỚI THIỆU MPU – 6050
9
góc nghiêng của robot, chúng ta cần các giá trị gia tốc dọc theo trục y và
z Hàm atan2 (y, z) cho biết góc có đơn vị là radian giữa trục z dương của mặt
phẳng và điểm được cho bởi tọa độ (z, y) trên mặt phẳng đó, với dấu dương cho
góc ngược chiều kim đồng hồ (nửa mặt phẳng phải), y> 0) và dấu âm cho các
góc theo chiều kim đồng hồ (nửa mặt phẳng trái, y <0).
Đối với dữ liệu lấy từ Gyro:
- Gyroscope (gọi tắt là gyro): là một loại cảm biến đo tốc độ quay của nó
quanh một trục. Tương tự với accel, gyro cũng thường có 3 trục xyz.
- Con quay hồi chuyển 3 trục của MPU6050 do tốc độ góc (vận tốc quay)
dọc theo ba trục. Đối với robot tự cận bằng, vận tốc dọc theo trục x là đủ để đo
tốc độ ngã của robot. Phương pháp chuyển đổi giá trị con quay hồi tiếp về trục
x, chuyển đổi nó thành độ chia giây và sau đó nhận với thời gian vòng lập để có
được sự thay đổi về góc.
10
+ Để giữ độ nhạy offset của gyro là nhỏ nhất, cảm biến nghiêng nên được
dùng trong vùng băng thông tần số rộng nhất có thể.
+ Số lượng tham số thiết kế nên nhỏ để dễ cho sự điều chỉnh và áp dụng bộ
lọc trong thực tế của các vi điều khiển.
2.3.3.2. Lọc Kalman
Giới thiệu chung về bộ lọc Kalman:
Được đề xuất từ năm 1960 bởi giáo sư Kalman đề thu thập và kết hợp linh
động các thông tin từ cảm biến thành phần. Một khi phương trình định hướng và
mẫu thống kê nhiểu trên mỗi cảm biến được biết và xác định, bộ lọc Kalman sẽ
cho ước lượng giá trị tối ưu (chính xác do đã được loại sai số, nhiễu) như là đang
sử dụng một tín hiệu “tinh khiết” và có độ phân bổ không đổi. Trong hệ thống
này, tín hiệu cảm biến vào bộ lọc gồm hai tín hiệu: từ cảm biến góc
(inclinometer) và cảm biến vận tốc góc (gyro). Tín hiệu ngõ ra của bộ lọc là tín
hiệu của inclinometer và gyro đã được loại nhiểu nhờ hai nguồn tín hiệu hỗ trợ
và xử lý lẫn nhau trong bộ lọc, thông qua quan hệ (vận tóc góc = đạo hàm/vi
phân của giá trị góc).
Bộ lọc Kalman đơn giản là thuật toán xử lý dữ liệu hồi quy tối ưu. Có nhiều
các xác định tối ưu, phụ thuộc tiêu chuẩn lựa chọn trình thông số đánh giá. Nó
cho thấy rằng bộ lọc Kalman tối ưu đối với chi tiết cụ thể trong bất kỳ tiêu chuẩn
có nghĩa nào. Một khía cạnh của sự tối ưu này là bộ lọc Kalman hợp nhất tất cả
thông tin được cung cấp tới nó. Nó xử lý tất cả giá trị sẵn có, ngoại trừ độ sai số,
ước lượng giá trị hiện thời của nhựng giá trị quan tâm, với cách sử dụng hiểu biết
động học thiết bị giá trị và hệ thống, mô tả số liệu thống kê của hệ thống nhiễu,
gồm nhiễu ồn, nhiễu đo và sự không chắc chắn trong mô hình động học và những
thông tin bất kỳ về điều kiện ban đầu của giá trị quan tâm.
Giải thuật bộ lọc Kalman áp dụng cho cảm biến gia tốc và gyro:
Cảm biến góc được thiết kế bằng cách kệt hợp một cảm biến gia tốc 1 trụ là
một gyro vận tốc 1 trục. Hai cảm biến này được nối nhau thông qua một bộ lọc
11
Kalman 2 trạng thái, với trạng thái là góc và trạng thái còn lại là giá trị cơ sở
gyro (gyro bias).
Gyro_bias được điều chỉnh tự động bởi bộ lọc. Kalman filter là một vấn đề
thực sự phức tạp, mặc dù đã được tối ưu nhiều lần đoạn code C.
Khai báo biến cố định: 𝑃𝑖𝑛𝑖𝑡 = [1 0 0 1 ]
float angle;
float q_bias;
float rate;
R tượng trung cho giá trị nhiễu covariance. Trong trường hợp này, nó là mà
𝑜
trận 1x1 được mong đợi 0.03 rad ≈ 18 từ gia tốc kế:
R_angle = 0.03;
Q là ma trận 2x2 tượng trung cho tiến trình nhiễu covariance. Trong trường
hợp này, nó chỉ mức độ tin cậy của gia tốc kế quan hệ với gyro.
𝑄 = [𝑄_𝑎𝑛𝑔𝑙𝑒 0 0 𝑄_𝑔𝑦𝑟𝑜 ] = [0. 001 0 0 0. 003 ]
State_update được gọi mỗi dt với giá trị cơ sở gyro bởi người dùng module.
Nó cập nhật góc hiện thời và vận tốc ước lượng.
Giá trị gyro_m được chia thành đúng đơn vị thực, nhưng không cần bỏ
gyro_bias độ nghiêng. Bộ lộc theo dõi độ nghiêng.
Vector giá trị: X = [𝑎𝑛𝑔𝑙𝑒 𝑔𝑦𝑟𝑜_𝑏𝑖𝑎𝑠 ]
Nó chạy dưới sự ước lượng giá trị qua hàm giá trị:
𝑋˙ = [𝑎𝑛𝑔𝑙𝑒
˙ 𝑔𝑦𝑟𝑜_𝑏𝑖𝑎𝑠
˙
] = [𝑔𝑦𝑟𝑜 − 𝑔𝑦𝑟𝑜_𝑏𝑖𝑎𝑠 0 ]
Và cập nhật ma trận Covariance qua hàm:
𝑃˙ = 𝐴𝑃 + 𝑃𝐴 + 𝑄
'
𝑃˙ = 𝐴 𝑃 + 𝑃 𝐴 + 𝑄 (𝑙ý 𝑡ℎ𝑢𝑦ế𝑡 𝑙à 𝑃 = 𝐴 𝑃 𝐴 + 𝑄
. . ' . . 𝑇
12
Vì CPU nhỏ có sẵn trên vi điều khiẻn, nên tối ưu code C chỉ để tính giới hạn
rõ ràng không bằng 0, cũng như khai triển toán ma trận qua vài bước có thể.
Cách tiính này làm nó khó đọc hơn, debug và kéo dài hơn thuật toán chính xác
của bộ lọc Kalman, nhưng cho phép ít thời gian thực hiện với CPU.
[
= [𝑃[0][0] 𝑃[0][1] 𝑃[1][0] 𝑃[1][1] ] + 𝑄𝑎𝑛𝑔𝑙𝑒 − 𝑃[0][1] − 𝑃[1][0] − 𝑃[1][1] − 𝑃[1][1
Kalman_update được gọi bởi người dùng module khi giá trị gia tốc kế có sẵn.
Giá trị angle_m không cần chia thành đơn vị thực tế, nhưng phải được chuẩn
mức 0 và có độ chia như nhau.
Procedure này không cần phải gọi mỗi bước thời gian, nhưng có thể nếu dữ
liệu gia tốc có sặn tại vận tốc bằng giá trị vận tốc gyro.
Ma trận C là một ma trận 1x2 (giá trị x trạng thái), đó là ma trận Jacobian của
giá trị đo lường với giá trị mong đợi. Trong trường hợp này, C là:
𝑑(𝑎𝑛𝑔𝑙𝑒_𝑚) 𝑑(𝑎𝑛𝑔𝑙𝑒_𝑚)
𝐶 =⎡ ⎤ = [1 0 ] (𝐶 𝑐ℎí𝑛ℎ 𝑙à 𝐻)
⎣ 𝑑(𝑎𝑛𝑔𝑙𝑒) 𝑑(𝑔𝑦𝑟𝑜_𝑏𝑖𝑎𝑠) ⎦
13
Vì giá trị góc đáp ứng trực tiếp với góc ước lượng và giá trị góc không quan
hệ với giá trị gyro_bias, C_0 cho thấy giá trị trạng thái quan hệ trực tiếp với trạng
thái ước lượng như thế nào, C_1 cho thấy giá trị trạng thái không quan hệ với giá
trị cơ sở gyro ước lượng.
Error là giá trị khác nhau trong giá trị đo lường và giá trị ước lượng. Trong
trường hợp này, nó khác nhau giữa hai gia tốc kế đo góc và góc ước lượng.
angle_error = angle_m – angle
Tính sai số ước lượng. Từ bộ lọc Kalman:
𝑇
𝐸 = 𝐶𝑃𝐶 + 𝑅 = [1 0 ][𝑃[0][0] 𝑃[0][1] 𝑃[1][0] 𝑃[1][1] ][1 0 ] + 𝑅 = 𝑃[0][0] + 𝑅
PCt_0 = 𝐶[0] * 𝑃[0][0]
PCt_1 = 𝐶[0] * 𝑃[1][0]
Ước tính bộ lọc Kalman đạt được. Từ lý thuyết bộ lọc Kalman:
[𝐾0 𝐾1 ] = [𝑃𝐶𝑡_0/𝐸 𝑃𝐶𝑡_0/𝐸 ]
P = (I – KH)P = P – KHP = P – KCP
Ta có phép nhân điểm trôi (floating point):
𝐶𝑃 = [1 0 ][𝑃[0][0] 𝑃[0][1] 𝑃[1][0] 𝑃[1][1] ] = [𝑃[0][0] 𝑃[0][1] ] = [𝑡_0 𝑡_1 ]
. . .
[ ] [
𝑃 = [𝑃[0][0] 𝑃[0][1] 𝑃[1][0] 𝑃[1][1] ] − [𝐾0 𝐾1 ] 𝑡0 𝑡1 = 𝑃 − 𝐾0 𝑡_0 𝐾0 𝑡_1 𝐾1
angle_err=q_bias_err
14
Hình 2.4: Mô tả Encoder
Encoder được dùng để đo vận tốc và vị trí của bánh xe, là một trong những
tham số điều khiển mô hình. Đĩa cảm biến được làm bằng mica, ghép với một
tấm film trong đã in sẵn các vạch đen trắng xe kẽ.
Cấu tạo gồm một đĩa đục có những rãnh trong suốt, một nguồn phát quang
thông qua các rãnh trên đĩa đến một đầu thu. Tín hiệu ra có thể dạng xung vuông
hoặc hình sin. Việc đọc các tín hiệu ra này sẽ xác định vị trí cũng như vận tốc của
động cơ.
(22)
Số xung trên mân encoder: n
Góc mở trên một xung:
(23)
Quãng đường đi được trên một xung:
(24)
15
Nếu cần di chuyển một quãng đường S thì số xung di chuyển cần phải có:
(25)
Động cơ DC có thể được mô hình hóa một cách đơn giản như hình vẽ dưới
đây:
16
Hệ chuyển động có moment quán tính J với trục . Từ trường B xuyên qua
khung dây được tạo ra từ một nam châm vĩnh cửu.
Hệ cơ S tác dụng lên trục một ngẫu lực cản, kí hiệu ( ) được tính theo
công thức:
Với c là hằng số giảm chấn của kết cấu cơ khí ( bộ truyền động ở trục động
cơ).
Khi ta đặt điện áp một chiều R và 2 đầu chổi than H và K thì trong cuộn dây
phần ứng có dòng điện I ư. Theo hiện tượng cảm ứng điện từ khung dây sẽ chịu
tác dụng của lực điện trường và quay quanh trục . Lưu ý rằng cứ mỗi nữa vòng
lại chuyển mạch do H và K là 2 vành bán khuyên. Điều này bảo đảm cho khung
dây luôn quay theo một chiều hất định với vận tốc gốc .
E(t),I(t) là tổng điện áp cảm ứng và dòng dẫn trong động cơ. C(t), . là
ngẫu lực điện từ và vận tốc xoay của rotor. Ta có công thức:
Với k là hằng số phụ thuộc vào đặc tính của động cơ, loại cuộn dây, giá trị từ trường, thừng
17
Cuộn dây dẫn được mô hình hóa bởi điện trở R và độ tự cảm L, được áp vào điện áp U(t),
Trong mối quan hệ ở trên, sự phụ thuộc vận tốc góc theo C(t) là đặc tính cơ học của
Với J là momen quán tính, là hằng số; Fs(t) là ngẫu lực xoay và fv là hệ số ma sát quay, ta
18
Nhin lên hình vẽ, Ton và Toff lần lượt là khoảng thời gian kích ( trạng thái
HIGH) và tín hiệu ngắt ( trạng thái LOW) trong một chu kỳ. Việc làm này sẽ tạo
ra mức điện áp Vtb cấp cho động cơ tương ứng với mức tốc độ động cơ.
Cũng cần chú ý rằng vì đây là điện áp trung bình của động cơ tương ứng với
một tỉ lệ Ton/Toff nào đó, nên mối quan hệ giữa vận tốc động cơ và điện áp trung
bình này là không tuyến tính.
Điện áp trung bình được tính bằng công thức:
Ưu điểm
Một trong những ưu điểm của PWM là khả nang9 chống nhiễu giá trị từ bộ
xử lí đến hệ thống điều khiển, do tín hiệu bản chất vẫn là tín hiệu số nên nhiễu
chỉ xãy ra nếu nó đủ mạnh hơn mức tín hiệu số để đổi từ logic 0 lên 1 hoặc
ngược lại.
Đầu năm 1980 Phillips đã phát triển một chuẩn giao tiếp nối tiếp 2 dây được
gọi là I2C. I2C là tên viết tắt của cụm từ Inter-Intergrated Circuit. Đây là đường
Bus giao tiếp giữa các IC với nhau. I2C mặc dù được phát triển bới Philips,
nhưng nó đã được rất nhiều nhà sản xuất IC trên thế giới sử dụng. I2C trở thành
19
một chuẩn công nghiệp cho các giao tiếp điều khiển, có thể kể ra đây một vài tên
tuổi ngoài Philips như: Texas Intrument(TI), MaximDallas, analog Device,
National Semiconductor ... Bus I2C được sử dụng làm bus giao tiếp ngoại vi cho
rất nhiều loại IC khác nhau như các loại Vi điều khiển 8051, PIC, AVR, ARM...
chip nhớ như: RAM tĩnh (Static Ram), EEPROM, bộ chuyển đổi tương tự số
(ADC), số tương tự(DAC), IC điểu khiển LCD, LED...
I2C là giao thức truyền thông nối tiếp đồng bộ phổ biến hiện nay, được
sử dụng rộng rãi trong việc kết nối nhiều IC với nhau, hay kết nối giữa IC
và các ngoại vi với tốc độ thấp.
20
bởỉ một địa chỉ duy nhất với một quan hệ chủ/tớ tồn tại trong suốt thời gian kết
nối. Mỗi thiết bị có thể hoạt động như là thiết bị nhận hoặc truyền dữ liệu hay có
thể vừa truyền vừa nhận. Hoạt động truyền hay nhận còn tùy thuộc vào việc thiết
bị đó là chủ (master) hay tớ (slave).
Một thiết bị hay một IC khi kết nối với bus I2C, ngoài một địa chỉ (duy nhất)
để phân biệt, nó còn được cấu hình là thiết bị chủ hay tớ.Tại sao lại có sự phân
biệt này ? Đó là vì trên một bus I2C thì quyền điều khiển thuộc về thiết bị
chủ. Thiết bị chủ nắm vai trò tạo xung đồng hồ cho toàn hệ thống, khi giữa hai
thiết bị chủ-tớ giao tiếp thì thiết bị chủ có nhiệm vụ tạo xung đồng hồ và quản lý
địa chỉ của thiết bị tớ trong suốt quá trình giao tiếp. Thiết bị chủ giữ vai trò chủ
động, còn thiết bị tớ giữ vai trò bị động trong việc giao tiếp.
Về lý thuyết lẫn thực tế I²C sử dụng 7 bit để định địa chỉ, do đó trên một bus
có thể có tới 2^7 địa chỉ tương ứng với 128 thiết bị có thể kết nối, nhưng chỉ có
112 , 16 địa chỉ còn lại được sử dụng vào mục đích riêng. Bit còn lại quy định
việc đọc hay ghi dữ liệu (1 là write, 0 là read)
Điểm mạnh của I²C chính là hiệu suất và sự đơn giản của nó: một khối điều
khiển trung tâm có thể điều khiển cả một mạng thiết bị mà chỉ cần hai lối ra điều
khiển.
Ngoài ra I2C còn có chế độ 10bit địa chỉ tương đương với 1024 địa chỉ,
tương tự như 7 bit, chỉ có 1008 thiết bị có thể kết nối, còn lại 16 địa chỉ sẽ dùng
để sử dụng mục đích riêng.
21
Hình 2.10: Sơ đồ kết nối thiết bị chủ và tớ của I2C
Giao thức sau đây (tập hợp các quy tắc) được theo sau bởi thiết bị Master và
các thiết bị Slave để truyền dữ liệu giữa chúng.
Dữ liệu được truyền giữa thiết bị Master và các thiết bị Slave thông qua một
đường dữ liệu SDA duy nhất, thông qua các chuỗi có cấu trúc gồm các số 0 và 1
(bit). Mỗi chuỗi số 0 và 1 được gọi là giao dịch (transaction) và dữ liệu trong mỗi
giao dịch có cấu trúc như sau:
22
3.1. NGUYÊN LÝ HOẠT ĐỘNG CỦA ROBOT HAI BÁNH
TỰ CÂN BẰNG
Robot hai bánh tự cân bằng đọc giá trị vị trí từ cảm biến encoder và giá trị
góc nghiêng từ cảm biến góc MPU 6050, đưa về chuân analog input của vi điều
khiển Arduino Mega sau đó xử lý lọc nhiễu, xuất tín hiệu điều khiển PWM đến
ENA, ENB để điều khiển động cơ A, B.
23
3.2. LƯU ĐỒ GIẢI THUẬT
24
Mô tả phần cứng:
Mô hình thực tế của đề tài chia làm 2 phần chính: khung và hai động cơ.
Khung được làm bằng 3 tấm bìa mica được xếp chồng lên nhau bằng các trụ
đồng, bên trong gồm các linh kiện, pin nguồn. Kích thước khung 17x6,5x10cm.
Thiết kế:
Hình 3.2: Kích thước bìa mica được thiết kế (tầng dưới)
Hình 3.3: Kích thước bìa mica được thiết kế (tầng giữa và tầng trên)
- Các lỗ ø4 để gắn động cơ GA25 và trụ đồng. các lỗ ø10 và ø20 để đi dây.
- Các lỗ ø10 và ø20 để đi dây, kết nối linh kiện.
25
3.4. LỰA CHỌN LINH KIỆN
Chọn pin:
2 Pin 18650 Shuangdi SD-18650 - 4.2V - 3800mAh
26
Hình 3.5: Động cơ GA25
27
Hình 3.7: Encoder tích hợp động cơ GA25
28
Hình 3.8: Arduino Mega 2560
Bộ nguồn của vi điều khiển và các mạch điện tử được tách rời khỏi bộ
nguồn cung cấp cho động cơ nhằm hạn chế tín hiệu nhiễu từ động cơ lên hoạt
động các vi điều khiển và cảm biến.
Mạch giảm áp LM2596 3A:
- Là module giảm áp có khả năng điều chỉnh được dòng ra đến 3A
- Module nguồn không sử dụng cách ly
- Nguồn đầu vào từ 4V - 35V
- Nguồn đầu ra: 1V - 30V
- Dòng ra Max: 3A
- Kích thước mạch: 53 (mm) x26 (mm)
29
Hình 3.9: Mạch giảm áp LM2596
Mạch cầu H đóng vai trò là bộ trung gian giao tiếp giữa vi điều khiển và cơ
cấu chấp hành ở đề tài này là động cơ. Tín hiệu vi điều khiển được cách ly với
các tín hiệu vào MOSFET công suát bằng các opto quang nhằm tránh xung đột
điện áp gây hư hỏng vi điều khiển.
30
Khi động cơ được mắc vào OUT1 và OUT2 đồng thời ngõ vào INT 1 ở mức
cao, và đầu vào INT2 ở mức thấp thì động cơ sẽ quay phía trước. Ngược lại nếu
đầu INT1 ở mức thấp và INT2 ở mức cao thì động cơ sẽ quay về phía sau.
Tương tự cho động cơ còn lại. Trong trường hợp cả hai đều cùng mức cao hoặc
cùng mức thấp thì động cơ dừng.
L298N 2.5A Mina: Mạch điều khiển động cơ dòng 2.5A với dây silicon.
Điện áp nguồn từ 2V - 10V, có thể điều khiển hai động cơ DC hoặc một động cơ
bước 2 pha 4 dây cùng một lúc. Nó có thể điều khiển tiến, lùi và tốc độ với bảo
vệ nhiệt và phục hồi tự động:
- Điều khiển động cơ cầu H hai chiều, có thể điều khiển hai động cơ DC
hoặc một động cơ bước hai pha 4 dây cùng một lúc
- Điện áp 2V - 10V
- Dòng điện làm việc đơn 2.5A, Dòng điện chờ thấp (dưới 0,1ua)
- Mạch bảo vệ quá nhiệt tích hợp (tSD)
- Kích thước sản phẩm: 31x32x5mm (chiều dài, chiều rộng và chiều cao),
Kích thước nhỏ, thích hợp để lắp ráp và xe
- Trọng lượng: 11g
31
Cảm biến góc GY-521 MPU6050:
Là một cảm biến sáu trục, có chứa một gia tốc 3 trục con quay hồi chuyển 3
trục. Hoạt động với 3.3V và giao tiếp I2C với tốc độ tối đa 400KHz
Các cảm biến bên trong MPU-6050 sử dụng bộ chuyển đổi tương tự – số
(Anolog to Digital Converter – ADC) 16-bit cho ra kết quả chi tiết về góc quay,
tọa độ… Với 16-bit bạn sẽ có 2^16 = 65536 giá trị cho 1 cảm biến.
Tùy thuộc vào yêu cầu của bạn, cảm biến MPU-6050 có thể hoạt động ở chế
độ tốc độ xử lý cao hoặc chế độ đo góc quay chính xác (chậm hơn). MPU-6050
có khả năng đo ở phạm vi:
Con quay hồi chuyển: ± 250 500 1000 2000 dps
Gia tốc: ± 2 ± 4 ± 8 ± 16g
Hơn nữa, MPU6050 có sẵn bộ đệm dữ liệu 1024 byte cho phép vi điều khiển
phát lệnh cho cảm biến, và nhận về dữ liệu sau khi MPU-6050 tính toán xong.
32
Hình 3.13: Mạch điện kết nối cảm biến với vi điều khiển
33
3.6. MÔ HÌNH THỰC
34
CHƯƠNG 4 KẾT QUẢ
35
Hướng phát triển của đề tài:
- Sử dụng giải thuật Fuzzy-PID thay cho giải thuật LQR.
- Mô hình có thể phát triển để điều khiển thông qua máy tính nhờ kết nối
bluetooth và giao diện trên máy tính sẽ thân thiện trực quan hơn.
- Tối ưu hóa khối lượng, thuật toán để mô hình có thể hoạt động trơn tru, linh
hoạt, dễ điều khiển, tiết kiệm năng lượng.
- Có thể gắn thêm camera và gps để robot có thể định vị, ghi hình, xử lý ảnh
và tự hoạt động trong không gian lớn.
- Mô hình robot 2 bánh tự cân bằng là tiền đề để phát triển thành xe 2 bánh tự
cân bằng có thể chở được người và di chuyển linh hoạt hơn.
36
TÀI LIỆU THAM KHẢO
[1] KS. Mai Tuấn Đạt, Xe Hai Bánh Tự Cân Bằng Di Chuyển Trên Địa
Hình Phẳng, Đại học Bách Khoa thành phố Hồ Chí Minh, năm 2005.
[2] ThS. Nguyễn Đình Phú, Vi Xử Lý, Đại học Sư Phạm Kỹ Thuật thành
phố Hồ Chí Minh, năm 2013.
[3] ThS. Huỳnh Thái Hoàng, Lý Thuyết Điều Khiển Tự Động, NXB Đại
Học Quốc Gia, năm 2005.
Đơn vị: Khoa Đào Tạo Chất Lượng Cao, trường Đại học Sư Phạm Kỹ Thuật
Email: 17151086@student.hcmute.edu.vn,
17151132@student.hcmute.edu.vn
37
PHỤ LỤC
#include <Wire.h>
#include "Kalman.h"
#define ToRad PI/180
#define ToDeg 180/PI
float loopStartTimer,loop_time;
const double FIX_loop_time = 12500;
//LQR data//
long PWML, PWMR; // PWM output for H-Brigde
float k1, k2, k3, k4, k5, k6;// The factor of K maxtrix
bool falldown;// Run = true; Stop = false;
//MPU6050 Data//
float mpudata; //Save psi angle ( Y axis)
float AcX, AcZ;
float Gyro;
void setup()
{
38
//Motor control Pin//
pinMode(8,OUTPUT); //PWM Pin 1 ENA
pinMode(11,OUTPUT); //PWM Pin 2 ENB
pinMode(28,OUTPUT); //Left Motor Pin 1 INT1
pinMode(26,OUTPUT); //Left Motor Pin 2 INT2
pinMode(24,OUTPUT); //Right Motor Pin 1 INT3
pinMode(22,OUTPUT); //Right Motor Pin 2 INT4
//Encoder Pin//
pinMode(1,INPUT_PULLUP);// CHÂN NGẮT LEFT
pinMode(4,INPUT_PULLUP);// CHÂN NGẮT RIGHT
pinMode(2,INPUT_PULLUP);// CHÂN ĐỌC ENCODER LEFT A
pinMode(18,INPUT_PULLUP);// CHÂN ĐỌC ENCODER RIGHT A
pinMode(3,INPUT_PULLUP);// CHÂN ĐỌC ENCODER LEFT B
pinMode(19,INPUT_PULLUP);// CHÂN ĐỌC ENCODER RIGH B
}
39
void loop()
{
loopStartTimer = micros();
readmpu();
if(loop_time<FIX_loop_time)
{
delayMicroseconds(FIX_loop_time - loop_time);
}
}
void readmpu() {
/* Update all the values */
while (i2cRead(0x3B, i2cData, 14));
AcX = ((i2cData[0] << 8) | i2cData[1]);
//accY = ((i2cData[2] << 8) | i2cData[3]);
AcZ = ((i2cData[4] << 8) | i2cData[5]);
43