一、简介
续上文,电机驱动部分完成,接下来我们给他加上一个OLED的显示功能和MPU6050的姿态检测功能
二、姿态角显示开发
2.1 MPU6050简介
MPU6050是一种集成了3轴陀螺仪和3轴加速度计的数字运动处理器。它由英飞凌公司开发,可用于测量物体的角速度、加速度和方向,广泛应用于机器人、无人机、游戏手柄、智能手机和运动监测等领域。MPU6050采用I2C接口进行通信,具有低功耗、高精度、小尺寸等特点,是一款非常优秀的运动传感器。
2.2 OLED简介
OLED(Organic Light Emitting Diode)是有机发光二极管,是一种新型的显示技术。与传统的液晶显示屏相比,OLED显示屏具有更高的对比度、更快的响应速度、更广的视角、更薄的厚度和更低的功耗。
OLED显示屏是由一系列有机材料制成的薄膜堆叠而成,其中包括发光材料、电子传输材料和电极材料等。当电流通过这些材料时,它们会发出光,形成图像。OLED显示屏可以实现高分辨率、真实的颜色和高亮度。
2.3 驱动开发
OLED、MPU6050都是采用的IIC通信方式,我们简单介绍一下IIC通信的原理
2.3.1 IIC 通信
2.3.1.1 概念
IIC(Inter-Integrated Circuit)总线是一种由NXP(原PHILIPS)公司开发的两线式串行总线,用于连接微控制器及其外围设备。多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。
2.3.1.2 实践—代码编写
我们通过SDA、SCL两条总线来进行数据传输通信,首先我们要确定OLED、MPU6050的设备地址,我们通过查看数据手册可得到,他们的地址分别为0x78、0X68,由此可写出他们的IIC驱动代码
/***********************0.96OLED********************************
void OLED_Write_IIC_Command(unsigned char IIC_Command)
{
OLED_IIC_Start();
OLED_Write_IIC_Byte(0x78); //Slave address,SA0=0
OLED_IIC_Wait_Ack();
OLED_Write_IIC_Byte(0x00); //write command
OLED_IIC_Wait_Ack();
OLED_Write_IIC_Byte(IIC_Command);
OLED_IIC_Wait_Ack();
OLED_IIC_Stop();
}
***********************************************************/
/*************************MPU6050****************************
u8 MPU_Write_Byte(u8 reg,u8 data)
{
MPU_IIC_Start();
MPU_IIC_Send_Byte((MPU_ADDR<<1)|0);//发送器件地址+写命令
if(MPU_IIC_Wait_Ack()) //等待应答
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Send_Byte(reg); //写寄存器地址
MPU_IIC_Wait_Ack(); //等待应答
MPU_IIC_Send_Byte(data);//发送数据
if(MPU_IIC_Wait_Ack()) //等待ACK
{
MPU_IIC_Stop();
return 1;
}
MPU_IIC_Stop();
return 0;
}
***********************************************************/
2.4 效果演示