Các phương thức giao tiếp

Một phần của tài liệu Luân văn cơ điện tử Thiết kế và chế tạo mô hình xe hai bánh tự cân bằng (Trang 32)

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 với ước lượng tiền nghiệm nhằm hiệu chỉnh ước lượng hậu nghiệm [5].

Hình 3.4 Quy trình của bộ lọc Kalman

Bộ lọc Kalman được thực hiện gồm 5 bước theo các công thức như sau:

̂ ̂ (8) (9) (10) ̂ ̂ ̂ (11) (12) Trong đó:

̂ : trạng thái tương lai của hệ thống

: ma trận hiệp phương sai số trạng thái

: ma trận độ lợi Kalman

̂ : trạng thái ước lượng của hệ thống

: ma trận hiệp phương sai số ước lượng trạng thái cập nhật

là ma trận đơn vị, là ma trận hệ thống, là ma trận ngõ vào và là ma

trận đo đạc.

Sau mỗi bước cập nhật thời gian và cập nhật phép đo, quá trình được lặp lại với ước lượng hậu nghiệm trước đó để dự đoán một ước lượng tiền nghiệm mới.

3.3 Giải thuật điều khiển PID

PID (Proportional Integral Derivative) là một cơ chế phản hồi vòng điều khiển tổng quát được sử dụng rộng rãi trong cáchệ thống điều khiển nhất là trong robot và công nghiệp. Bộ điều khiển PID tính toán giá trị sai số là hiệu số giữa giá trị đo

thông số biến đổi và giá trị đặt mong muốn. Bộ điều khiển sẽ thực hiện làm giảm tối đa sai số bằng cách điều chỉnh giá trị điều khiển các giá trị đầu vào. Muốn đạt được kết quả tốt nhất thì các thông số PID sử dụng trong tính toán phải điều chỉnh phù hợp với tính chất của hệ thống cần điều các thông số phải phụ thuộc vào đặc thù riêng của hệ thống.

Hình 3.5 Sơ đồ hệ thống PID

Thuật toán PID có thể được diễn tả theo nhiều cách khác nhau nhưng thông thường được mô tả theo biểu thức như sau:

∑ (13) Trong đó:

là sự sai lệch giữa giá trị đo hiện tại của hệ thống và giá trị cài đặt mong muốn.

∑ là tổng các sai số trước đó.

là khoảng thời gian thay đổi biến điều khiển.

là thành phần tỉ lệ có tác dụng làm tăng tốc độ đáp ứng của hệ thống và làm giảm, chứ không triệt tiêu sai số xác lập của hệ.

là thành phần tích phân có tác dụng triệt tiêu sai số xác lập nhưng có thể làm giảm tốc độ đáp ứng của hệ.

là thành phần vi phân làm tăng độ ổn định hệ thống, giảm độ vọt lố và cải thiện tốc độ đáp ứng của hệ.

Vấn đề khó khăn đặt ra khi xây dựng thuật toán PID trên mô hình thực tế đó

chính là chọn lựa các giá trị , và . Để có thể tìm ba hệ số này nhanh nhất

phương pháp Ziegler-Nichols thường được sử dụng. Độ lợi và lúc đầu được

gán bằng 0 và độ lợi được tăng cho đến khi tiến tới độ lợi tới hạn ở đầu ra

của vòng điều khiển bắt đầu dao động. và thời gian dao động được dùng để

gán độ lợi như sau:

Dạng điều khiển KP KI KD

P 0.50Ku

PI 0.45Ku 1.2 KP/ Pu

PID 0.60Ku 2 KP/ Pu KP Pu/8

Bảng 3.1 Phương pháp Ziegler–Nichols

3.4 Giải thuật cân bằng và điều khiển di chuyển

Dựa trên nền tảng của thuật toán điều khiển PID và các công cụ cần thiết giải thuật cân bằng và điều khiển di chuyển trên mô hình xe được xây dựng theo lưu đồ sau:

START

Đọc dữ liệu góc nghiêng từ cảm biến

Tính toán sai số góc nghiêng của xe so với góc nghiêng tại vị trí cân bằng

175 < góc nghiêng hiện tại <185 ?

Chuyển hướng ? Yes

VR > 0 ? Yes

Điều khiển DC trái quay thuận và DC phải quay

nghịch để rẽ phải Yes

Điều khiển DC phải quay thuận và DC trái quay

nghịch để rẽ trái No Điều khiển hướng và

tốc độ để xe cân bằng No

Chuyển hướng ?

No Điều khiển DC trái và phải chạy tới hoặc chạy lui No

VR > 0 ? Yes

Điều khiển DC trái giữ nguyên tốc độ và DC phải

giảm tốc độ để rẽ phải Yes

Điều khiển DC phải giữ nguyên tốc độ và DC trái

giảm tốc độ để rẽ trái No

Hình 3.6 Lưu đồ thuật giải cân bằng và điều khiển di chuyển

Dữ liệu cảm biến được đưa qua bộ lọc Kalman để thu được giá trị chính xác về góc nghiêng của xe. Thuật toán dựa trên sự sai số giữa góc nghiêng của xe với

góc nghiêng tại vị trí cân bằng (1800), khi góc nghiêng của xe thay đổi lớn hoặc nhỏ

hơn góc tại vị trí cân bằng thì điều khiển hai bánh xe di chuyển theo hướng tương ứng sao cho trọng tâm của người điều khiển và xe luôn đặt lên trục của hai bánh xe. Việc điều khiển chiều quay cũng như tốc độ động cơ dựa vào thuật toán PID với các

thông số: = 6, với điện áp điều khiển động cơ dao động trong

khoảng 0V đến 33.2V tương ứng với tỷ lệ từ 0% đến 90% tốc độ tối đa. Giá trị điện

Một phần của tài liệu Luân văn cơ điện tử Thiết kế và chế tạo mô hình xe hai bánh tự cân bằng (Trang 32)

Tải bản đầy đủ (PDF)

(50 trang)