You are on page 1of 35

MPU-6050 Sensor

Sinh viên: Phan Đình Tuấn 20205459


Võ Minh Vương 20205518

Giáo viên: PGS.TS Phạm Đức An

2
Introduction

•Inertial Measurement Unit (đơn vị đo quán tính - IMU) là một cảm biến thông
dụng trong việc đo chuyển động của vật thể. IMU có thể đo được nhiều thông
số khác nhau như vận tốc, hướng, gia tốc, lực, tốc độ góc hoặc từ trường tùy
thuộc vào số lượng cảm biến trên IMU. Trên IMU có thể có các cảm biến sau:
•◮ Accelerometer: đo gia tốc chuyển động theo 3 trục XYZ.
•◮ Gyroscope: đo vận tốc xoay quanh trục XYZ.
•◮ Magnetometer: đo từ trường theo 3 trục XYZ.
• ◮ Barometer: đo áp suất không khí.
•Degree of Freedom (DOF) là bậc tự do. Ví dụ một IMU gồm cảm biến accel và
gyro thì người ta gọi là 6-DOF IMU, một IMU gồm accel + gyro + mag thì được
gọi là 9-DOF IMU,. . .

3
Introduction

• MPU6050 là một IMU với sáu bậc tự do (6 DoF), bởi vì nó bao gồm một gia
tốc kế 3 trục và một máy đo tốc độ góc 3 trục. Cảm biến này thường được sử
dụng cho việc cân bằng, điều hướng và đo góc quay.

Thông số kỹ thuật

Operating Voltage 5V (typical)


Accelerometer Range ±2g, ±4g, ±8g, ±16g
±250°/s, ±500°/s, ±1000°/s,
Gyroscope Range
±2000°/s
Temperature Range -40 to +85°C
Absolute Maximum
Up to 10,000g
Acceleration

4
Đặc điểm
• Kết hợp giá trị gia tốc 3 trục và tốc độ góc 3
trục từ MEMS
• Điện áp hoạt động: 3-5V
• Giao tiếp: Giao thức I2C
• Được tích hợp bộ chuyển đổi ADC 16 bit cho
độ chính xác cao
• Có sẵn DMP tích hợp giúp tính toán mạnh
mẽ
• Có thể sử dụng để giao tiếp với các thiết bị
I2C khác như cảm biến từ trường
• Địa chỉ I2C có thể được cấu hình

5
How Does a MEMS Accelerometer Work?

Cảm biến xử lý sự thay đổi trong điện dung này và chuyển


nó thành một điện áp đầu ra tương tự.

Phạm vi đo của cảm biến nằm trong dải : ±2g, ±4g, ±8g và
±16g.

Khi cảm biến đặt yên trên mặt phẳng, kết quả trả về
trục X, Y là 0(g) và trục Z là: +1 g.

6
How Does a MEMS Gyroscope Work?

MPU6050 còn có một bộ cảm biến máy đo tốc


độ góc tích hợp trên chip có khả năng đo tốc độ
quay góc trên bốn khoảng toàn phạm có thể lập
trình là ±250°/s, ±500°/s, ±1000°/s và ±2000°/s.
Roll Pitch Yaw
MPU6050 được trang bị ba bộ chuyển đổi từ tín
hiệu analog sang kỹ thuật số 16 bit khác nữa,
đồng thời mẫu ba trục quay góc (theo các trục
X, Y và Z). Tốc độ lấy mẫu có thể được điều
chỉnh từ 3.9 đến 8000 mẫu mỗi giây.

7
DMP in MPU-6050

MPU6050 có một đơn vị xử lý DMP(Digital Motion Processor) riêng biệt được tích hợp,
giúp giảm tải xử lý cho vi điều khiển chính và cung cấp dữ liệu chuyển động đã được xử lý.
DMP thực hiện một số chức năng quan trọng trong MPU6050:
• 1. **Sensor Fusion (Hợp nhất cảm biến)**: DMP kết hợp dữ liệu từ cảm biến gia tốc
và máy đo tốc độ góc để tính toán một hình ảnh chính xác về chuyển động và hướng
của thiết bị hoặc vật thể. Điều này giúp giảm sai số và nhiễu trong dữ liệu, cung cấp
thông tin chuyển động ổn định hơn.
• 2. **Orientation Estimation (Ước tính hướng)**: DMP có khả năng tính toán hướng
hoặc góc quay của thiết bị trong không gian dựa trên dữ liệu từ cảm biến. Điều này
giúp xác định hướng của thiết bị hoặc đối tượng một cách chính xác.
• 3. **Motion Processing (Xử lý chuyển động)**: DMP có khả năng theo dõi và phân
tích chuyển động của thiết bị hoặc vật thể, cung cấp thông tin về vận tốc, gia tốc và
góc quay.
DMP giúp đơn giản hóa việc lấy dữ liệu và tích hợp cảm biến MPU6050 vào các ứng dụng
như điều khiển bay, robotics, thực tế ảo và nhiều ứng dụng khác đòi hỏi thông tin chuyển
động chính xác và ổn định.

8
Pinouts

• Pinouts
Pin Number Pin Name Description

Cung cấp nguồn cho module, có thể là


1 Vcc + 3V đến + 5V. Thông thường + 5V
được sử dụng

2 Ground Kết nối với mặt đất của hệ thống


Được sử dụng để truyền dữ liệu thông
3 Đồng hồ nối tiếp (SCL)
qua giao tiếp I2C

Có thể được sử dụng để giao tiếp các


4 Dữ liệu nối tiếp (SDA) mô-đun I2C khác với MPU6050. Nó là
tùy chọn

Có thể được sử dụng để giao tiếp các


5 Dữ liệu nối tiếp phụ trợ (XDA) mô-đun I2C khác với MPU6050. Nó là
tùy chọn

Có thể được sử dụng để giao tiếp các


6 Đồng hồ nối tiếp phụ (XCL) mô-đun I2C khác với MPU6050. Nó là
tùy chọn

Nếu nhiều hơn một MPU6050 được


7 AD0 sử dụng một MCU, thì chân này có thể
được sử dụng để thay đổi địa chỉ

Chân ngắt để chỉ ra rằng dữ liệu có


8 Ngắt (INT)
sẵn cho MCU để đọ

9
Connect to Arduino

10
Read Raw Values

11
Understanding MPU6050 Raw Values

Độ nhạy:
•Điện áp tương tự đọc từ cảm biến điện dung được chuyển đổi thành tín
hiệu kỹ thuật số trong khoảng từ 0 đến 32750 giá trị.
•MPU6050 phân bổ các đơn vị đo của nó bằng cách tạo bốn cấp độ độ
nhạy, như được thể hiện trong slide dưới đây. Cấp độ độ nhạy mà bạn
chọn phụ thuộc vào cách bạn sử dụng IMU.
•Điều này có nghĩa 131 đơn vị đo mỗi giây mỗi độ, cung cấp một mức độ
chính xác rất cao.

•Cài đặt mặc định cho gia tốc kế là 2g.


•Cài đặt mặc định cho gia tốc góc là 250độ/sec.

Acc_X Acc_Y Acc_Z Gyro_X Gyro_Y Gyro_Z


Raw Values
1200 -200 15560 23 78 -45
Readable Values 0.073 g -0.012 g 0.95 g 0.17 độ/s 0.56 độ/s -0.34độ/s

12
• Set- up MPU6050

• Configure Accel & Gyro

Wire.beginTransmission(MPU6050_addr);
Wire.write(0x1C);
Wire.write(0);
Wire.endTransmission(true);

13
14
Read Raw Values

Wire.beginTransmission(MPU6050_addr);
Wire.write(0x3B); // Start with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU6050_addr,14,true); // Read 14 registers total, each axis value is stored in 2
registers
AccX=Wire.read()<<8|Wire.read();
AccY=Wire.read()<<8|Wire.read();
AccZ=Wire.read()<<8|Wire.read();
Temp=Wire.read()<<8|Wire.read();
GyroX=Wire.read()<<8|Wire.read();
GyroY=Wire.read()<<8|Wire.read();
GyroZ=Wire.read()<<8|Wire.read();

15
Read Raw Values

Wire.beginTransmission(MPU6050_addr);
Wire.write(0x3B);
Wire.endTransmission(false);

Thanh ghi 0x3B, 0x3C lưu trữ giá trị Gia tốc theo trục X,
Tương tự với Gia tốc các trục Y, Z và Gia tốc góc X, Y, Z.

16
Read Raw Values

Wire.requestFrom(MPU6050_addr,14,true);

Yêu cầu 14 bytes dữ liệu từ cảm biến.

AccX=Wire.read()<<8|Wire.read();
AccY=Wire.read()<<8|Wire.read();
AccZ=Wire.read()<<8|Wire.read();
Temp=Wire.read()<<8|Wire.read();
GyroX=Wire.read()<<8|Wire.read();
GyroY=Wire.read()<<8|Wire.read();
GyroZ=Wire.read()<<8|Wire.read();

Variable of int datatype

17
Read Raw Values

Kết quả:

Biểu đồ dữ liệu theo thời gian

18
Calibrate Sensor

Find Offset Find Target Value

Gia tri offset cua cam bien gyroscope:


Gyro X: 79
Gyro Y: -18
Gyro Z: 71
Gia tri offset cua cam bien accelerometer:
Accel X: 2234
Accel Y: -5737
Accel Z: 1336

19
Readable Values

Values after calibrating

20
Complementary filter vs Kalman filter

Vì IMU khá là nhạy với nhiễu hoặc bị trôi theo


thời gian, nên ta có thể kết hợp nhiều cảm biến
lại với nhau để cho một kết quả tốt hơn (gọi là
sensor fusion).

Bộ lọc bù (Complementary filter) sử dụng


bộ lọc thông thấp (Low-pas filter) và bộ lọc
thông cao (High-pass filter) với các giá trị
vận tốc góc và gia tốc để cho ra kết quả là
góc quay.
Trong khi đó, bộ lọc Kalman (Kalman filter)
hiện tại và dữ liệu thu nhận được để dự
đoán góc nghiêng.

21
Using the Digital Motion Processor (DMP)

Using the Digital Motion Processor (DMP)

Sử dụng DMP, tính toán và


trả về giá trị các góc Roll –
Pitch - Yaw
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
Yaw = (ypr[0] * 180/M_PI);
Pitch = (ypr[1] * 180/M_PI);
Roll = (ypr[2] * 180/M_PI);

22
Roll Pitch Yaw Values using DMP

23
Calibrating the Sensors

Results

24
25
26
27
28
Simulator
Using Processing

29
30
Matlab

31
32
33
34
THANK YOU !

35

You might also like