Cảm biến gia tốc góc/ la bàn MPU6050

Một phần của tài liệu (LUẬN văn THẠC sĩ) thiết kế hệ thống điều khiển mô phỏng chuyển động cánh tay (Trang 32)

MPU6050 là cảm biến của hãng InvenSense. MPU6050 là một trong những giải pháp cảm biến chuyển động đầu tiên trên thế giới có tới 6 (mở rộng tới 9) trục vảm biến tích hợp trong 1 chip duy nhất. Với kích thước nhỏ gọn thích hợp với việc gắn cố định lên cánh tay. Đây là một lựa chọn hợp lý cho hệ thống mô phỏng

MPU6050 sử dụng công nghệ độc quyền MotionFusion của InvenSense có thể chạy trên các thiết bị di động, tay điều khiển,... Nó được điều hành bằng một nguồn cung cấp 3.3V/5V và gia tiếp thông qua I2C với tốc độ tối đa 400kHz. Chip o

này cũng có sẵn một gói SPI được gọi là MPU6000 cho tốc độ giao tiếp lên tới

10Mbs.

Thông số truyền động:

Có th lể ựa chọn ±2/4/8/16g ph m vi gia t ạ ốc.

Có thể ự l a chọn ±250/500/1000/2000 độ /s ph m vi con quay h i chuy n. ạ ồ ể

Con quay nh y c m c a gia t c tuyạ ả ủ ố ến tính 0.1 độ/s, m t c i ti n l n so vộ ả ế ớ ới con quay h i chuy n trồ ể ục tri của các công ty khác.

Chị ảnh hưởu ng c a nhi u th p trên c hai k t qu u ra (xem thông s k ủ ễ ấ ả ế ả đầ ố ỹ

thuật).

T l sỷ ệ ản lượng d ữ liệu lên đến 1000Hz, mặc dù được xây d ng b ng k ự ằ ỹ

thuật sốthấp vượt qua b l c có t n s góc tộ ọ ầ ố ối đa là 256Hz.

Con quay h i chuy n 3 trồ ể ục (3-axis MEMS gyroscope). C m bi n gia t c 3 chi u (3-axis MEMS ả ế ố ề accelerometer).

Ngoài ra, MPU6050 còn có 1 đơn vị tang tốc phần cứng chuyên xử lý chuyển động số (Digital Motion Processor – DMP) do cảm biến thu thập và thực hiện các tính toán cần thiết. Điều này giúp giảm bớt đáng kể phần xử lý tính toán của vi điều khiển, giảm độ trễ của tốc độ đáp ứng, cải thiện tốc độ xử lý; và kết quả là tốc độ phản hồi của khối cảm biến sẽ được cải thiện đáng kể. Đó chính là ưu điểm lớn của MPU6050 so với khá nhiều cảm biến gia tốc khác.

-

Các cảm biến bên trong MPU6050 sử dụng bộ chuyển đổi tương tự số

( Analog to Digital Converter ADC) 16-– bit cho ra kết quả chi tiết về góc quay với độ phân giải cao. Với 16 bit, chúng ta có giải giá trị thu được lên tới 65536 mức, tất -

cả chỉ cần 1 cảm biến

Một tính năng của chip này là bộ xử lý chuyển động kỹ thuật số trên máy bay (DMP). Trong lý thuyết này có thể được sử dụng để sản xuất trực tiếp các góc Euler, Quaternions, hoặc một hướng cosin ma trận, và thậm chí thực hiện lọc cùng với việc tích hợp dữ liệu một la bàn I2C bên ngoài.

MPU6050 có thể kết hợp với cảm biến từ trường (bên ngoài) để tạo thành bộ cảm biến 9 góc đầy đủ thông qua giao tiếp I2C.

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 dữ liệu sau khi MPU6050 tính toán xong.

Chân giao tiếp MPU6050.

Hình 3-6. Module cảm biến MPU6050 VCC 2.375V 3.46V–

SCL Chân SCL trong giao tiếp I2C

SDA Chân SDA trong giao tiếp I2C

XDA Chân dữ liệu (kết nối với cảm biến khác)

XCL Chân xung (kết nối với cảm biến khác)

AD0 Bito của địa chỉ I2C

INT Chân ngắt

MPU-6050 sẽ giúp ta xác định được góc nghiêng của thiết bị với phương nằm ngang mặt đất (Accelerometer) cũng như xác định được vận tốc góc theo các trục tọa độ( Gyro) Việc tích hợp 2 bộ cảm biến trên vào trong con MPU 6050 sẽ . -

tận dụng ưu điểm và hạn chế nhược điểm của 2 bộ cảm biến gia tốc và cảm biến

góc.

Cảm biến gia tốc giúp ta đo được chính xác góc nghiêng, nhưng lại bị ảnh hưởng rất mạnh bởi nhiễu,rung động của thết bị, còn cảm biến góc thì giúp ta xác

định được vận tốc góc, từ đó suy ra được góc nghiêng, và không bị ảnh hưởng bởi rung lắc của thiết bị, nhưng lại bị trôi điểm 0, và hoạt động sau một thời gian thì tích lũy sai số rất lớn. Cho nên việc kết hợp 2 bộ trên là rất hợp lý.

MPU-6050 có rất nhiều thanh ghi, có những thanh ghi là để thiết lập chế độ hoạt động cho nó, và có những thanh ghi chứa các dữ liệu cảm biến mà ta cần phải đọc được giá trị của nó qua I2C để từ đó tính toán được góc nghiêng.

- -

Việc giao tiếp I2C với MPU 6050 được nói đến trong datasheet của MPU 6050 như sau:

Để đọ c nhi u byte m t lúc: ề ộ

Tương tự đó là việc ghi 1 hay nhiều byte vào các thanh ghi của MPU-6050:

Trong đó:

S: bit Start

AD :địa ch c a MPU-6050 ỉ ủ W: bit xác định là đọc ghi li u ệ R: bit xác địnhlà đọc d li u ữ ệ

ACK: bit Acknowledge N-ACK :№t-Acknowledge

RA: địa ch thanh ghi mà ta muỉ ốn đọc DATA: d u truy n di hoữliệ ề ặc đọc được

Rõ ràng là để giao tiếp I2C với các chip khác nhau thì cách thức là khác nhau, nhưng đều dựa trên chuân I2C, ở đây ta thấy là có thể phải gửi 2 lần bit Start, trong một phiên giao tiếp phải gửi cả bit Write đầu tiên sau đó lại lại bit Read.

Ta chỉ có thể biết rõ điều này khi th m khảo datasheets.a

3.3 Khối xử lý- duino Uno Ar

Một mạch Arduino bao gồm một vi điều khiển AVR với nhiều linh kiện bổ sung giúp dễ dàng lập trình và có thể mở rộng với các mạch khác. Một khía cạnh quan trọng của Arduino là các kết nối tiêu chuẩn của nó, cho phép người dùng kết nối với CPU của board với các module thêm vào có thể dễ dàng chuyển đổi, được gọi làshield. Vài shield truyền thông với board Arduino trực tiếp thông qua các chân khách nhau, nhưng nhiều shield được định địa chỉ thông qua hệ thống bus nối tiếp I2C-nhiều shield có thể được xếp chồng và sử dụng dưới dạng song song. Arduino chính thức thường sử dụng các dòng chip megaAVR, đặc biệt là ATmega8, ATmega168, ATmega328, ATmega1280, và ATmega2560. Một vài các bộ vi xử lý khác cũng được sử dụng bởi các mạch Aquino tương thích. Hầu hết các mạch gồm một bộ điều chỉnh tuyến tính 5V và một thạch anh dao động 16 MHz (hoặc bộ cộng hưởng ceramic trong một vài biến thể), mặc dù một vài thiết kế như LilyPad chạy tại 8 MHz và bỏ qua bộ điều chỉnh điện áp onboard do hạn chế về kích cỡ thiết bị.

Một vi điều khiển Arduino cũng có thể được lập trình sẵn với một boot loader cho phép đơn giản là upload chương trình vào bộ nhớ flash on chip, so với các thiết bị -

khác thường phải cần một bộ nạp bên ngoài. Điều này giúp cho việc sử dụng Arduino được trực tiếp hơn bằng cách cho phép sử dụng 1 máy tính gốc như là một bộ nạp chương trình.

Theo nguyên tắc, khi sử dụng ngăn xếp phần mềm Arduino, tất cả các board được lập trình thông qua một kết nối RS 232, nhưng cách thức thực hiện lại tùy -

USB, thực hiện thông qua chip chuyển đổi USB- -to serial như là FTDI FT232. Vài

biến thể, như Arduino Mini và Boarduino không chính thức, sử dụng một board adapter hoặc cáp nối USB- -to serial có thể tháo rời được, Bluetooth hoặc các phương thức khác. (Khi sử dụng một công cụ lập trình vi điều khiển truyền thống thay vì ArduinoIDE, công cụ lập trình AVR ISP tiêu chuẩn sẽ đượcsử dụng.)

Nhắc tới dòng mạch Arduino dùng để lập trình, cái đầu tiên mà người ta thường nói tới chính là dòng Arduino UNO. Hiện dòng mạch này đã phát triển tới thế hệ thứ 3 (R3).

3.3.1 Thông số của Arduino UNO R3

Vi điều khiển ATmega328 (họ 8bit)

Điện áp hoạt động 5V – DC (chỉ được cấp qua cổng USB)

Tần số hoạt động 16 MHz

Dòng tiêu thụ 30mA

Điện áp vào khuyên dùng 7-12V –DC

Điện áp vào giới hạn 6-20V –DC

Số chân Digital I/O 14 (6 chân PWM)

Số chân Analog 6 (độ phân giải 10bit) Dòng tối đa trên mỗi chân I/O 30 mA

Dòng ra tối đa (3.3V) 50 mA

Bộ nhớ flash

32 KB (ATmega328) với 0.5KB dùng bởi

bootloader

SRAM 2 KB (ATmega328) EEPROM 1 KB (ATmega328)

Vi điều khiển

Hinh 3-7. Vi điều khiển ATMEGA328

Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là ATmega8, ATmega168, ATmega328. Bộ não này có thể xử lí những tác vụ đơn giản như điều khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, làm một trạm đo nhiệt độ độ ẩm và hiển thị lên màn hình LCD,… Thiết kế tiêu chuẩn của Arduino -

UNO sử dụng vi điều khiển ATmega328. Tuy nhiên nếu yêu cầu phần cứng không cao, có thể sử dụng các loại vi điều khiển khác có chức năng tương đương như ATmega8 (bộ nhớ flash 8KB) hoặc ATmega168 (bộ nhớ flash 16KB):

Chế tạo thủ công Sử dụng mạch in Năng lượng

Arduino UNO có thể được cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7 12V DC và giới hạn là 6 20V. Thường - -

thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu không có sẵn nguồn từ cổng USB. Nếu cấp nguồn vượt quá ngưỡng giới hạn trên sẽ làm hỏng Arduino UNO.

Các chân năng lượng

GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau.

5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA.

3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA.

Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND.

IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân này. Lưu ý hạn chế lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn.

RESET: việc nhấn nút Reset trên board để reset vi điều khiển tương đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ.

Lưu ý:

Arduino UNO không có bảo vệ cắm ngược nguồn vào. Do đó phải hết sức cẩn thận, kiểm tra các cực âm – dương của nguồn trước khi cấp cho Arduino UNO. Việc làm chập mạch nguồn vào của Arduino UNO sẽ biến nó thành một miếng nhựa chặn giấy. Nên dùng nguồn từ cổng USB nếu có thể.

Các chân 3.3V và 5V trên Arduino là các chân dùng để cấp nguồn ra cho các thiết bị khác, không phải là các chân cấp nguồn vào. Việc cấp nguồn sai vị trí

có thể làm hỏng board. Điều này không được nhà sản xuất khuyến khích. Cấp nguồn ngoài không qua cổng USB cho Arduino UNO với điện áp dưới 6V có thể làm hỏng board.

Cấp điện áp trên 13V vào chân RESET trên board có thể làm hỏng vi điều khiển ATmega328.

Cường độ dòng điện vào/ra ở tất cả các chân Digital và Analog của Arduino UNO nếu vượt quá 200mA sẽ làm hỏng vi điều khiển.

Cấp điệp áp trên 5.5V vào các chân Digital hoặc Analog của Arduino UNO sẽ làm hỏng vi điều khiển.

Cường độ dòng điện qua một chân Digital hoặc Analog bất kì của Arduino UNO vượt quá 40mA sẽ làm hỏng vi điều khiển. Do đó nếu không dùng để truyền nhận dữ liệu, nên sử dụngmột điện trở hạn dòng.

Bộ nhớ

32KB bộ nhớ Flash: những đoạn lệnh lập trình sẽ được lưu trữ trong bộ nhớ

Flash của vi điều khiển. Thường thì sẽ có khoảng vài KB trong số này sẽ được dùng cho bootloader và bộ nhớ này là đủ cho các ứng dụng điều khiển thông thường.

2KB cho SRAM S ( tatic andom ccess emorR A M y): giá trị các biến khai báo khi lập trình sẽ lưu ở đây. hai báo càng nhiều biến thì càng cần nhiều bộ K

nhớ RAM. Tuy nhiên 2KB là đủ đối với các ứng dụng sử dụng trong nghiên cứu này.

1KB cho

EFROM E( lectrically raseble rogrammable ead nly emory): E P R O M đây

giống như một chiếc ổ cứng mini, nơi có thể đọc và ghi dữ liệu của mình vào đây mà không phải lo bị mất khi cúp điện giống như dữ liệu trên SRAM.

Các cổng vào/ra

Hình 3-8. Các cổng vào của Arduino Uno.

Arduino UNO có 14 chân digital dùng để đọc hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp là 0V và 5V với dòng vào/ra tối đa trên mỗi chân là 40mA. Ở mỗi

chân đều có các điện trở pull up từ được cài đặt ngay trong vi điều khiển -

ATmega328 (mặc định thì các điện trở này không được kết nối). Một số chân digital có các chức năng đặc biệt như sau:

2 chân nối tiếp Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và

nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na

chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, không nên sử dụng 2 chân này nếu không cần thiết

Chân PWM (~): 3, 5, 6, 9, 10, và 11: cho phép xuất ra xung PWM với độ phân giải 8bit (giá trị từ 0 → 28-1 tương ứng với 0V → 5V) bằng hàm analogWrite(). Nói một cách đơn giản, có thể điều chỉnh được điện áp ra ở chân này từ mức 0V đến 5V thay vì chỉ cố định ở mức 0V và 5V như những chân khác. Các chân PWM phù hợp với yêu cầu điều khiển

Chân giao tiếp SPI: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các

chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác.

LED 13: trên Arduino UNO có 1 đèn led màu cam (kí hiệu chữ L). Khi bấm nút Reset, sẽ thấy đèn này nhấp nháy để báo hiệu. Nó được nối với chân số 13. Khi chân này được người dùng sử dụng, LED sẽ sáng.

Arduino UNO có 6 chân analog (A0 → A5) cung cấp độ phân giải tín hiệu 10bit (0 → 210-1) để đọc giá trị điện áp trong khoảng 0V → 5V. Với

chân AREFtrên board, có thể để đưa vào điện áp tham chiếu khi sử dụng các chân analog. Tức là nếu cấp điện áp 2.5V vào chân này có thể dùng các chân analog đểta

Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác.

3.3.2. Chương trình điều khiển:

Các thiết bị dựa trên nền tảng Arduino được lập trình bằng ngôn riêng. Ngôn ngữ này dựa trên ngôn ngữ Wiring. Và Wiring lại là một biến thể của C/C++. Một số người gọi nó là Wiring, một số khác thì gọi là C hay C/C++. Nhưng thực tế, nhà sản xuất định danh ngôn ngữ này là ngôn ngữ Arduino. Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến hiện nay do đó rất dễ học, dễ hiểu. Nếu học tốt chương trình Tin học 11 thì việc lập trình Arduino là hoàn toàn khả thi.

Trong luận văn này, chúng ta sẽ đi vào chi tiết 3 vấn đề. Vấn đề thứ nhất là thiết lập giao tiếp I2C giữa cảm biến và vi điều khiển cũng như xác định giá trị tương đương của cảm biến biến trở, vấn đề thứ 2 là xử lý dữ liệu từ cảm biến MPU6050, vấn đề thứ 3 là xây dựng ma trận cử động tương ứng giữa cử động đầu vào và giá trị đầu ra. Sau đây, chúng ta sẽ đi vào chi tiết lần lượt từng vấn đề.

t l p giao ti p I2C v nh giá tr u vào c a bi

Thiế ậ ế ới MPU6050 và xác đị ị đầ ủ ến

trở.

I

Để thiết lập được giao tiếp I2C ( nterface Intergrated Circuit) giữa MPU6050 và Arduino, ta thực hiện kết nối giữa chân SCL của MPU6050 với chân SCL (chân

A5) của vi điều khiển Arduino và chân SDA của MPU6050 và chân SDA (chân A4) của vi điều khiển Arduino, đồng thời cấp nguồn cho MPU6050 ở ngưỡng 5V / 3.3V. Lúc này đã thực hiện xong việc thiết lập phần cứng cho giao thức I2C giữa

Hình 3-9. Kết nối giữa Arduino và MPU6050 theo giao thức I2C.

Lúc này MPU6050 sẽ đóng vai trò như một mạch cấp dưới ( Slave ) của Arduino và các giá trị của MPU6050 sẽ được gọi ra theo các hàm truyền đạt và sử

Một phần của tài liệu (LUẬN văn THẠC sĩ) thiết kế hệ thống điều khiển mô phỏng chuyển động cánh tay (Trang 32)

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

(74 trang)