2.2.1 Sơ đồ khối hệ thống Cảm biến IMU Biến trở Nguồn cung cấp Bo Arduino Due AT91SAM3X8E Mạch điều khiền động cơ M ADC I2C PWM
Hình 2.8 Sơ đồ khối của mô hình xe
2.2.2 Mạch điều khiển động cơ
Mạch điều khiển động cơ sử dụng board cầu H với IC kích FET chuyên dụng IR2184 được điều khiển bằng vi điều khiển DsPIC4012. Board có thể hoạt động tốt trong môi trường công nghiệp với dòng điện làm việc ổn định 20 A. (sơ đồ nguyên lý trình bày ở phần phụ lục 2)
Hình 2.9 Board điều khiển động cơ
Thông số kỹ thuật của board:
Dòng làm việc ổn định: 20 A.
Điện áp cấp từ 24-36 V.
Có Led báo chiều động cơ.
Có Led báo nguồn.
Bảo vệ ngắn mạch, quá tải.
Kích thước 7x5 cm.
Dùng IC kích FET IR2184 chuyên dụng.
IC điều khiển DsPIC4012.
Có khả trả về giá trị Encoder.
2.2.3 Cảm biến IMU
IMU (Inertial Measurement Unit) là một thiết bị được tích hợp giữa hai cảm biến Accelerometer (cảm biến gia tốc) và cảm biến Gyroscope (cảm biến con quay hồi chuyển) có chức năng cung cấp thông tin về góc quay và độ nghiêng giúp cho việc giữ thăng bằng của hệ thống tự động như robot vượt địa hình, robot tự cân bằng, xe tự cân bằng, máy bay…
Cảm biến IMU sử dụng IC tích hợp MPU 6050 bao gồm một cảm biến gia tốc và một cảm biến con quay hồi chuyển dạng cảm biến vi cơ điện tử (MEMS). Cấu tạo phần cứng bên trong gồm có bộ chuyển đổi ADC 16 bit cho mỗi kênh với độ chính xác cao do đó dữ liệu đo thu được từ ba trục x, y và z không bị trễ về mặt thời gian.
.
2.2.4 Mạch điều khiển trung tâm
Mạch điều khiển chính của xe sử dụng board Arduino Due với chip vi điều khiển SAM3X8E ARM Cortex-M3 CPU của hãng Atmel. Đây là mạch Arduino đầu tiên dựa trên bộ vi điều khiển lõi ARM 32-bit. Mạch Arduino Due có 54 ngõ vào/ngõ ra là tín hiệu số (trong đó có 12 chân có thể xuất tín hiệu PWM), 12 chân ngõ vào analog và 2 chân ngõ ra DAC, xung nhịp 84 MHz, một cổng kết nối USB OTG, jack nguồn, nút nhấn reset CPU và các cổng giao tiếp đa dạng như 4 UART,
SPI, TWI ( ) và JTAG.
Hình 2.11 Board Arduino Due
Bảng tóm tắt tính năng, thông số cần quan tâm của board.
Microcontroller AT91SAM3X8E
Operating Voltage 3.3V
Input Voltage (recommended) 7-12V
Input Voltage (limits) 6-16V
Digital I/O Pins 54 (of which 12 provide PWM output)
Analog Input Pins 12
Analog Outputs Pins 2 (DAC)
Total DC Output Current on all 130 mA
DC Current for 5V Pin 800 mA
Flash Memory 512 KB all available for the user applications
SRAM 96 KB (two banks: 64KB and 32KB)
Clock Speed 84 MHz
Bảng 2.1 Các đặc tính và thông số kỹ thuật board Arduino Due
2.2.5 Động Cơ
Tính toán công suất của động cơ: Đặt:
: trong lượng của người điều khiển (80 kg)
: trọng lượng của xe (40 kg) : bán kính bánh xe (0,217 m) : lực cản chuyển động : gia tốc trọng trường (9,81) : hệ số ma sát trượt (8.10-4) : bán kính ổ trục bánh xe (0,004 m) : hệ số ma sát lăn (5.10-4) : hệ số ma sát giữa bánh xe và mặt đường (1,3)
Lực cản chuyển động được tính theo công thức (3):
(3)
I: tỷ số truyền của động cơ (1/10) : hiệu suất động cơ (90%)
M: mô men để thắng lực cản truyền động
(4)
: vận tốc mong muốn 20 km/h
: công suất động cơ di chuyển khi có tải
(5)
Như vậy phải chọn loại động cơ có công suất > 79 (W).
Động cơ sử dụng trong mô hình là hai động cơ DC servo SANYODENKI, bốn chổi than. Động cơ có tốc độ quay không tải là 2600 vòng/phút, công suất 170W, điện áp 32V, dòng điện định mức 7.9A, encoder nội 250 xung/vòng. Động cơ được lựa chọn với những thông số về công suất và tốc độ như trên nhằm mục đích giúp xe có thể đạt được mục tiêu về tốc độ di chuyển là 15km/h và tải trọng là 120kg.
Hình 2.12 Động cơ DC
2.2.6 Nguồn điện
Nguồn điện cung cấp cho toàn bộ hệ thống board mạch và động cơ bao gồm ba bình ắc quy khô 12V-14Ah. Ba ắc quy được mắc nối tiếp tạo thành nguồn điện 36V để cấp nguồn cho động cơ hoạt động, đồng thời làm nguồn nuôi cho board điều khiển chính và cả hệ thống điện. Đây là loại ắc quy được sử dụng cho xe đạp điện nên được bán rộng rãi trên thị trường, thuận tiện cho việc sửa chữa hoặc thay thế.
2.3 Mô hình xe thực tế 650 mm 650 mm 1 0 5 0 m m 8 3 0 m m Hình 2.14 Mô hình xe thực tế
2.4 Các phương thức giao tiếp 2.4.1 Giao thức 2.4.1 Giao thức
I2C là viết tắc của từ Inter-Integrated Circuit là một chuẩn truyền thông do
hãng điện tử Philips Semiconductor sáng lập và xây dựng thành chuẩn năm 1990.
I2C là một truyền thông nối tiếp đa chip chủ (multi-master serial computer
bus). Khái niệm “multi-master” là trong trên cùng một bus có thể có nhiều hơn một thiết bị làm Master, đồng thời một Slave có thể trở thành một Master nếu nó có khả
năng. I2C được thực hiện trên hai đường SDA (Serial DATA) và SCL (Serial
Clock) trong đó SDA là đường truyền/nhận dữ liệu và SCL là đường xung nhịp.
Căn cứ theo chuẩn I2C, các đường SDA và SCL trên các thiết bị có cấu hình “cực
thu để hở” (open-drain hoặc open-collector), nghĩa là cần có các “điện trở kéo lên” (pull-up resistor) cho các đường này. Ở trạng thái nghỉ, hai chân SDA và SCL ở mức cao.
Hình 2.15 Mạng I2C với nhiều thiết bị và 2 điện trở kéo lên cho SDA, SCL
Một số khái niệm và đặc điểm của I2C
Master:là chip khởi động quá trình truyền nhận, máy chủ phát đi địa chỉ
của thiết bị cần giao tiếp và tạo xung giữ nhịp trên đường SCL.
Slave: là chip có một địa chỉ cố định, được gọi bởi Master và phục vụ
yêu cầu từ Master.
SDA- Serial Data: là đường dữ liệu nối tiếp, tất cả các thông tin về địa
chỉ hay dữ liệu đều được truyền trên đường này theo thứ tự từng bit một.
SCL –Serial Clock: là đường giữ nhịp nối tiếp. I2C là chuần truyền thông
nối tiếp đồng bộ, cần có 1 đường tạo xung giữ nhịp cho quá trình truyền/nhận, cứ mỗi xung trên đường giữ nhịp SCL, một bit dữ liệu trên đường SDA sẽ được lấy mẫu (sample). Dữ liệu nối tiếp trên đường SDA được lấy mẫu khi đường SCL ở mức cao trong một chu kỳ giữ nhịp, vì thế đường SDA không được đổi trạng thái khi SCL ở mức cao (trừ START và STOP condition). Chân SDA có thể được đổi trạng thái khi SCL ở mức thấp.
2.4.2 ADC
Để có thể đọc được giá trị điện áp từ biến trở khi người vận hành xe điều khiển chuyển hướng board Arduino sử dụng bộ ADC 10 bit tích hợp sẵn trong bộ vi điều khiển trên board. Giá trị điện áp từ biến trở sẽ được chuyển đổi sang một giá trị
số tương ứng với độ lớn của điện áp. Độ phân giải của bộ ADC được xác định
(6) Như vậy giá trị điện áp đọc về từ biến trở sẽ nằm trong khoảng 0-1023. Độ
phân giải điện áp hay số bước giá trị điện áp nhỏ nhất mà bộ ADC có thể đọc
được xác định theo công thức:
(7)
Trong đó là giá trị điện áp tham chiếu của bộ ADC, đối với board mạch
Arduino Due, giá trị điện áp này là 3,3V.
2.4.3 UART
UART (Universal Asynchronous Receiver/Transmitter) là bộ truyền nhận nối tiếp không đồng bộ. UART là thiết bị phần cứng, không phải là chuẩn giao tiếp. UART muốn tạo ra một chuẩn giao tiếp cần phải được kết hợp với một thiết bị chuyển đổi mức điện áp. Chuẩn RS232 (COM) trên các máy tính là sự kết hợp của chip UART và chip chuyển đổi mức điện áp. Tín hiệu từ chip UART thường có mức điện áp chuẩn TTL, mức logic cao là 5V, mức thấp là 0V. Trong khi đó, tín hiệu theo chuẩn RS232 trên máy tính cá nhân thường là -12V cho mức logic cao và +12 cho mức thấp. 12 V -12 V 5 V 3 V 0 V -3 V t
start data parity Stop
LSB Idle MSB RS232 UART Idle 0 1 1 0 1 1 1 0 1 0 1 1
Để việc truyền và nhận không đồng bộ xảy ra thành công thì các thiết bị tham gia phải “thống nhất” với nhau về khoảng thời gian truyền đi 1 bit, tốc độ truyền phải được cài đặt giống nhau, tốc độ này gọi là tốc độ Baud. Hay nói cách khác tốc độ Baud là tốc độ truyền dữ liệu trong vòng một giây.
Truyền thông nối tiếp không đồng bộ rất dễ mất hoặc sai lệch dữ liệu, quá trình truyền thông theo kiểu này phải tuân theo một số quy tắc nhất định. Bên cạnh tốc độ baud, khung truyền là một yếu tố quan trọng tạo nên sự thành công khi truyền và nhận. Khung truyền bao gồm số bit mỗi lần truyền và bit thông báo như bit Start, Stop hay bit kiểm tra Parity.
Start bit là bit đầu tiên được truyền trong một khung, chức năng của bit này là báo cho thiết bị nhận biết rằng có một gói dữ liệu sắp được truyền tới.
Data là tất cả dữ liệu cần truyền. Data không nhất thiết phải là gói 8 bit mà có thể là 5, 6, 7... do người dùng cài đặt.
Parity bit dung để kiểm tra dữ liệu truyền (chỉ một cách tương đối). Có 2 loại parity là parity lẻ (odd parity) và parity chẵn (even parity). Parity chẵn nghĩa là số lượng bit 1 trong dữ liệu bao gồm cả bit parity luôn là số chẵn. Ngược lại tổng số lượng các bit 1 trong parity lẻ luôn là số lẻ.
Stop bit báo cho thiết bị nhận biết rằng một gói dữ liệu đã được gởi xong. Sau khi nhận được bit stop, thiết bị nhận sẽ tiến hành kiểm tra khung truyền để đảm bảo tính chính xác của dữ liệu.
UART được sử dụng trong đề tài này để thu thập dữ liệu và đánh giá kết quả thực nghiệm của việc xây dựng bộ lọc Kalman cho cảm biến IMU, giải thuật cân bằng và điều khiển di chuyển sử dụng thuật toán PID.
2.4.4 PWM
PWM (Pulse-width modulation) là kỹ thuật điều chế độ rộng xung. PWM sử dụng để kiểm soát mức điện áp cấp cho thiết bị, đặc biệt thường dùng để điều khiển tốc độ động cơ. Giá trị điện áp trung bình cấp cho tải được điều khiển với tốc độ rất nhanh. Tần số làm việc tùy thuộc vào đặc tính của thiết bị cần điều khiển mà có thể
giao động vài Hz đến vài trăm kHz. Hình 2.16 mô tả điều chế độ rộng xung thông qua việc điều khiển độ sáng của một con LED với mức điện áp từ 0-5V
.
Hình 2.17 Mô tả dạng xung PWM
Ưu điểm chính của PWM là tổn thất điện năng trong các thiết bị chuyển mạch
là rất thấp, tổn thất điện năng gần như bằng không.PWM được sử dụng trong đề tài
này để điều khiển tốc độ động cơ của xe, giúp xe có thể giữ thăng bằng, di chuyển nhanh chậm cũng như thay đổi hướng di chuyển.
Chương 3
GIẢI THUẬT ĐIỀU KHIỂN CÂN BẰNG VÀ DI CHUYỂN
3.1 Nguyên lý điều khiển cân bằng và di chuyển
Xe hai bánh tự cân bằng là một loại xe có khả năng di chuyển linh hoạt và cơ chế giữ cân bằng độc đáo, an toàn khi vận hành. Xe sẽ tự giữ thăng bằng khi người vận hành đứng lên xe cho tới khi người vận hành điều khiển cho xe di chuyển.Việc điều khiển của xe rất đơn giản, người vận hành có thể sử dụng và học cách điều khiển xe trong thời gian ngắn giống như các phương tiện giao thông khác.
Nguyên lý cân bằng của xe, khi đang ở vị trí cân bằng do tác động của trọng lực xe sẽ bị ngã về phía trước hoặc phía sau. Để có thể cân bằng hai bánh xe được điều khiển cùng di chuyển theo hướng ngã của xe để có thể đưa trọng tâm xe rơi trên hai trục bánh xe giúp xe cân bằng được.
Khi muốn di chuyển tới người điều khiển chỉ việc ngã người nhẹ về phía trước khi đó bộ phận cảm biến của xe sẽ cảm nhận được góc nghiêng và điều khiển cho xe chạy về phía trước. Tốc độ di chuyển của xe phụ thuộc vào góc nghiêng của xe so với vị trí cân bằng. Khi góc nghiêng nhỏ xe sẽ di chuyển chậm và ngược lại khi góc nghiêng lớn xe di chuyển nhanh hơn. Theo nguyên lý như trên thì người điều khiển chỉ việc ngã người về phía trước nhiều hay ít phụ thuộc vào tốc độ họ mong muốn.
Hình 3.1 (a) Điều khiển xe di chuyển về phía trước, (b) Điều khiển xe di chuyển về phía sau
Điều khiển chạy lùi (chạy về phía sau), tương tự với việc chạy tới khi muốn chạy lùi người lái cũng ngã người về phía sau thì xe sẽ di chuyển về phía sau.
Khi người lái muốn rẽ trái hay rẽ phải thì công việc điều khiển sẽ có thay đổi, khác với di chuyển tới, lùi việc rẽ hướng được điều khiển bằng cần điều khiển. Khi muốn rẽ trái thì người lái chỉ việc gạt nhẹ cần điều khiển sang bên hướng mình mong muốn là xe sẽ di chuyển theo [1],[3].
Tốc độ khi rẽ trái, phải phụ thuộc vào việc người điều khiển nghiêng cần điều khiển sang trái, phải nhiều hay ít. Khi nghiêng cần điều khiển nhiều tốc độ rẽ sẽ nhanh lên và ngược lại.
Hình 3.2 (a) xe rẽ trái, (b) xe rẽ phải
Hình 3.3 Giới hạn độ dốc của đường
Xe có thể di chuyển tốt trên mặt đường phẳng, không quá nhiều ổ gà và độ dốc
của đường không quá 15 như trên Hình 3.3.
3.2 Bộ lọc Kalman
Bộ lọc Kalman là một thuật toán sử dụng chuỗi các phép đo theo thời gian, trong trường hợp này các phép đo chính là giá trị thu được từ cảm biến gia tốc và cảm biến con quay hồi chuyển. Những giá trị đo này chứa nhiễu gây ra sai số cho việc đo đạc. Bộ lọc Kalman sẽ ước lượng trạng thái của hệ thống dựa trên trạng thái
hiện tại và trạng thái trước đó của hệ thống nhằm mục đích tăng độ chính xác hơn so với việc đo đạc độc lập.
Đối với cảm biến gia tốc thì vấn đề đặt ra là cảm biến này rất dễ bị nhiễu khi sử dụng để đo gia tốc trong khi robot đang di chuyển. Đối với cảm con quay hồi chuyển thì vấn đề lại là việc giá trị đo sẽ bị trôi theo thời gian, giống như một chiếc bánh xe đang quay, cảm biến con quay hồi chuyển sẽ ngã khi giảm dần tốc độ quay. Theo một cách ngắn gọn cảm biến con quay hồi chuyển được dùng để tham chiếu về góc trong khoảng thời gian tức thời trong khi đó cảm biến gia tốc lại được dùng để tham chiếu trong khoảng thời gian dài.
Thực ra có một cách rất đơn giản để giải quyết vấn đề này đó chính là sử dụng bộ lọc Complimentary, về cơ bản đây là bộ lọc bao gồm bộ lọc dạng số thông thấp đối với cảm biến gia tốc và lọc thông cao với cảm biến con quay hồi chuyển. Nhưng bộ lọc này cho kết quả không chính xác bằng bộ lọc Kalman.
Bộ lọc Kalman hoạt động bằng cách tạo ra giá trị ước lượng tối ưu thống kê trạng thái của hệ thống dựa trên một chuỗi các phép đo. Để có thể thực hiện được điều này bộ lọc cần biết nhiễu ngõ vào của bộ lọc, nhiễu này thường được gọi là nhiễu đo đạc và nhiễu do chính hệ thống tạo ra gọi là nhiễu xử lý. Để thực thi được bộ lọc thì các nhiễu phải có phân bố Gaussian.
Phương trình của bộ lọc Kalman được chia thành hai nhóm: phương trình cập nhật thời gian và phương trình cập nhật giá trị đo. Phương trình cập nhật thời gian chịu trách nhiệm dự đoán trước (theo thời gian) sử dụng giá trị hiện tại và hiệp biến số ước lượng để dự đoán ước lượng tiền nghiệm cho thời điểm kế tiếp. Phương trình cập nhật giá trị đo chịu trách nhiệm đối với sự phản hồi nghĩa là kết hợp giá trị mới