MPU-6050 tích hợp 6 trục cảm biến bao gồm:
+ 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, MPU-6050 còn có 1 đơn vị tăng tốc phần cứng chuyên xử lý tín hiệu (Digital Motion Processor - DSP) 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, cải thiện tốc độ xử lý và cho ra phản hồi nhanh hơn. Đây chính là 1 điểm khác biệt đáng kể của MPU-6050 so với các cảm biến gia tốc và gyro khác.
MPU-6050 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.
Các cảm biến bên trong MPU-6050 sử dụng bộ chuyển đổi tương tự - số (Anolog to Digital Converter - ADC) 16-bit cho ra kết quả chi tiết về góc quay, tọa độ... Với 16-bit bạn sẽ có 2^16 = 65536 giá trị cho 1 cảm biến.
Tùy thuộc vào yêu cầu của bạn, cảm biến MPU-6050 có thể hoạt động ở chế độ tốc độ xử lý cao hoặc chế độ đo góc quay chính xác (chậm hơn). MPU-6050 có khả năng đo ở phạm vi:
+ con quay hồi chuyển: ± 250 500 1000 2000 dps
+ gia tốc: ± 2 ± 4 ± 8 ± 16g
Hơn nữa, MPU-6050 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 về dữ liệu sau khi MPU-6050 tính toán xong.
- Cách lấy dữ liệu từ cảm biến.
MPU6050 chỉ hỗ trợ chuẩn giao tiếp I2C để xuất giá trị đo sang thiết bị khác (Master) hoặc chính nó lại là nơi xử lý, lưu trữ tín hiệu từ các thiết bị khác kết nối vào.
Đầu tiên ta cần nắm được Protocol của chuẩn I2C
![[IMG]](http://linhkien69.vn/uploads/images/cam%20bien/cam%20bien%20goc%20gia%20toc/1.png)
Slaver Address của MPU6050 mặc định là 0x68 = 0b1101000
Quá trình truyền hoặc nhận dữ liệu được bắt đầu khi có tín hiệu “Start” và kết thúc bởi tín hiệu “Stop
i2c_start();
i2c_stop();
Một khi đã có điều kiện “start” thì Master phải truyền địa chỉ của thanh ghi cần tác động và hành động tương ứng(read/write )
Đối với MPU6050 quy luật truyền do nhà sản xuất đưa ra:
Quá trình đưa dữ liệu từ vi điều khiển xuống cảm biến (chính là việc cài đặt cấu hình cho cảm biến) Write:
![[IMG]](http://linhkien69.vn/uploads/images/cam%20bien/cam%20bien%20goc%20gia%20toc/2.png)
Hàm ghi dữ liệu đến một thanh ghi của MPU6050.
void MPU6050_I2C_ByteWrite(u8* pBuffer, u8 writeAddr)
{
//Gửi bit start
I2C_GenerateSTART(MPU6050_I2C, ENABLE);
while(!I2C_CheckEvent(MPU6050_I2C,I2C_EVENT_MASTER_MODE_SELECT));
//Gửi địa chỉ của MPU6050
I2C_Send7bitAddress(MPU6050_I2C, MPU6050_ADDR,I2C_Direction_Transmitter);
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
//Truy cập đến 1 thanh ghi MPU6050
I2C_SendData(MPU6050_I2C, writeAddr);
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
//Gửi dữ liệu đến thanh ghi vừa truy cập
I2C_SendData(MPU6050_I2C, *pBuffer);
/* Test on EV8 and clear it */
while(!I2C_CheckEvent(MPU6050_I2C, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
//Gửi bit STOP
I2C_GenerateSTOP(MPU6050_I2C, ENABLE);
}
Hàm đọc dữ liệu từ một thanh ghi của MPU6050 rồi ghi vào mảng pBuffer
void MPU6050_I2C_BufferRead(uint8_t* pBuffer, u8 readAddr, u16 NumByteToRead)
Hàm cấu hình cho MPU6050.
void MPU6050_init()
{
w_data[0]=0x80;
MPU6050_I2C_ByteWrite(w_data, PWR_MGMT_1); //Reset Cam Bien
delay_us(5);
w_data[0]=0x00;
MPU6050_I2C_ByteWrite(w_data, PWR_MGMT_1);// Cam bien hoat dong
delay_us(5);
w_data[0]=0x00;
MPU6050_I2C_ByteWrite(w_data, SMPLRT_DIV);
delay_us(5);
w_data[0]=0x07;
MPU6050_I2C_ByteWrite(w_data, CONFIG_MPU);
delay_us(5);
w_data[0]=0x18;
MPU6050_I2C_ByteWrite(w_data, GYRO_CONFIG); // Do phan giai GYRO la +-2000 do/s
delay_us(5);
w_data[0]=0x10;
MPU6050_I2C_ByteWrite(w_data, ACCEL_CONFIG);
delay_us(5);
}
Hàm void MPU6050_get_gyro_acc(int16_t* AccelGyro) lưu lại dữ liệu vào mảng mới theo đúng giá trị bank cao, bank thấp
Hàm void MPU6050_get_value() lấy mẫu cho các giá trị góc đọc được.
Theo http://thegioiic.com/
Bạn có đam mê ngành thiết kế vi mạch và bạn muốn có mức lương 1000 usd cùng lúc bạn
đang muốn tìm một Trung tâm để học vậy hãy đến với ngành vi mạch tại SEMICON
HotLine: 0972 800 931 Ms Duyên