🌱 Sensor - Cảm biến gia tốc con quay hồi chuyển MPU6050
Bài viết này mình sẽ giới thiệu với các bạn về một cảm biến khá thông dụng trong thực tế, đó là cảm biến dùng để đo gia tốc, trục góc quay. Nếu các bạn nào có hứng thú với các ứng dụng như xe tự cân bằng, drone, ... thì cảm biến này sẽ là một lựa chọn tuyệt vời.
👉 Cảm biến MPU6050
Như tiêu đề bài viết thì mình gọi tên cảm biến MPU6050 là cảm biến gia tốc thì vẫn chưa hoàn toàn chính xác, bởi vì cảm biến này thực chất là tổ hợp của 3 cảm biến khác nhau:
Gyroscope + Accelerometer + Temperature
Tức là cảm biến này có thể đo được 3 yếu tố, đó là: 3 trục góc quay (Gyroscope), 3 trục gia tốc hướng (Accelermeter) và nhiệt độ (Temperature). Tuy nhiên yếu tốc nhiệt độ thường ít được nhắc đến hơn so với 2 yếu tố ở phía trước.
Tham khảo Tài liệu MPU6050 Datasheet để xem toàn bộ cấu tạo và chức năng của cảm biến.
Trên đây là hình ảnh của cảm biến MPU6050, có thể thấy nó bao gồm các chân SCL/SDA phục vụ giao tiếp I2C.
💬 Nguyên lý hoạt động
Để biết được nguyên lý hoạt động của cảm biến MPU6050, chúng ta cần tham khảo Block Diagram của cảm biến trong tài liệu Datasheet.
Cảm biến bao gồm 7 bộ ADC nội dùng để đo các yếu tố như đã giới thiệu:
- 3 bộ ADC để đó 3 trục góc quay (Gyro),
- 3 bộ ADC dùng để đo 3 trục gia tốc hướng,
- 1 bộ ADC dùng để đo nhiệt độ sử dụng bộ cảm biến nhiệt độ nội.
Đầu ra của các bộ ADC này sẽ được nạp xuống các thanh ghi của cảm biến (Sensor Registers), sau đó Vi điều khiển có thể đọc giá trị của các thanh ghi này thông qua giao tiếp I2C.
👉 3-Axis Gyroscope
Con quay hồi chuyển 3 trục trên cảm biến được thiết kế với công nghệ MEMS (Micro Electro Mechanical System). Nó được sử dụng để phát hiện vận tốc quay dọc theo các trục X, Y, Z như trong hình dưới.
Con quay hồi chuyển hoạt động theo hiệu ứng Coriolis, gây ra rung động và được phát hiện bởi phần cứng MEMS bên trong cảm biến.
Tín hiệu ra được khuếch đại, giải điều chế và lọc để tạo ra một điện áp tỷ lệ thuận với tốc độ góc. Điện áp này được số hóa bởi các bộ ADC 16-bits trên từng trục.
👉 3-Axis Accelerometer
Giống như con quay hồi chuyển, cảm biến gia tốc cũng được thiết kế với công nghệ MEMS (Micro Electro Mechanical System). Nó được sử dụng để phát hiện góc nghiêng theo các trục X, Y, Z như trong hình dưới.
Sự dịch chuyển của cảm biến (Gia tốc thay đổi) sẽ làm cho góc nghiêng của các khối bên trong cảm biến bị lệch đi. Điều này làm giá trị tụ điện vi sai trong cảm biến thay đổi, và điện áp đầu ra cũng sẽ thay đổi theo. Điện áp này sau đó được mã hóa bằng các bộ ADC 16-bits.
Đơn vị đo: g (gravity force). Ở trạng thái đặt trên bề mặt phẳng, cảm biến đo được 0g trên trục X và Y, và 1g trên trục Z.
👉 DMP (Digital Motion Processor)
Bên trong cảm biến có tích hợp một bộ xử lý kỹ thuật số sử dụng để tính toán các thuật toán xử lý chuyển động.
Nó lấy dữ liệu từ Gyroscope, Accelometer và có thể là một cảm biến thứ 3 nào đó được tích hợp bên trong cảm biến (như Magnetometer) để xử lý dữ liệu.
Bộ DMP này hỗ trợ các thanh ghi lưu trữ dữ liệu sau khi xử lý, với mục đích là giảm thiểu việc tính toán của các thiết bị khác khi đọc dữ liệu (như Vi điều khiển).
👉 On-chip Temperature Sensor
Như đã nói thì trên cảm biến MPU6050 có tích hợp một cảm biến nhiệt độ, cảm biến này cũng được số hóa dữ liệu qua một bộ ADC và lưu dữ liệu trên thanh ghi của cảm biến.
💬 MPU6050 Pinout
Module cảm biến MPU6050 bao gồm 8 chân:
- INT: Interrupt Digital Output Pin.
- AD0: I2C Slave Address LSB Pin. Chân này đại diện cho bit số 0 trong 7-bit slave address của thiết bị.
Địa chỉ của cảm biến khi mà AD0 = 0: - Slave Write Address (SLA+W) = 0xD0.
- Slave Read Address (SLA + R) = 0xD1.
- XCL: Auxiliary Serial Clock Pin. Tương tự như chân SCL nhưng dùng để kết nối tới Vi điều khiển khác khi mà chân SCL đã được sử dụng.
- XDA: Auxiliary Serial Data Pin. Tương tự như chân XCL.
- SCL: Serial Clock Pin. Chân Clock của giao tiếp I2C.
- SDA: Serial Data Pin. Chân Data của giao tiếp I2C.
- VCC/GND: Là 2 chân cấp nguồn cho cảm biến.
👉 Tính toán Dữ liệu Cảm biến
Dữ liệu đầu ra của cảm biến là các dữ liệu thô, vì vậy chúng ta cần tính toán, chuẩn hóa, lọc nhiễu đối với các tín hiệu này. Để tính được giá trị gia tốc và tốc độ góc bằng cách chia dữ liệu thô đo được cho hệ số tỷ lệ độ nhạy (sensitivity scale factor).
💬 Accelerometer values - Đơn vị: g (g force)
- Acceleration X axis = (Accelerometer X axis raw data/16384) g.
- Acceleration Y axis = (Accelerometer Y axis raw data/16384) g.
- Acceleration Z axis = (Accelerometer Z axis raw data/16384) g.
💬 Gyroscope values - Đơn vị: °/s (degree per second)
- Angular velocity along the X axis = (Gyroscope X axis raw data/131) °/s.
- Angular velocity along the Y axis = (Gyroscope Y axis raw data/131) °/s.
- Angular velocity along the Z axis = (Gyroscope Z axis raw data/131) °/s.
💬 Temperature value - Đơn vị: °/c (degree per Celsius)
- Temperature (°c) = ((temperature sensor data)/340 + 36.53) °/c.
👉 Giao tiếp với Vi điều khiển
💬 Hardware
Kết nối phần cứng, các bạn có thể kết nối theo sơ đồ dưới đây:
- Kết nối I2C giữa Vi điều khiển với cảm biến MPU6050, kết nối chân SCL và SDA.
- Có thể kết nối thêm một bộ USB-to-UART để truyền data về máy tính.
Về phần mềm, để giao tiếp với MPU6050, chúng ta cần xem tài liệu MPU6050 Datasheet để define được các thanh ghi bên trong cảm biến.
Tiếp đó, chúng ta có thể khởi tạo giá trị cảm biến bằng cách khởi tạo các tham số:
- Device Address
- Sample Rate
- Power Management
- Gyroscope Reference Frequency
- Temperature Range
- Interrupt Enable
Bước cuối cùng chính là chuyển Raw Data qua giá trị thực bằng các công thức ở trên.
👉 Các bạn có thể tham khảo thư viện cho MPU6050 mà mình triển khai, có thể apply cho mọi Vi điều khiển. Chỉ cần sửa file inc/MPU6050_I2C_SpecificConfig.h, thay đổi với các API của I2C tương ứng.
>>>= Follow ngay =<<<
Để nhận được những bài học miễn phí mới nhất nhé 😊
Chúc các bạn học tập tốt 😊