基于STM32的平衡小车设计过程分享(2)

描述

一、简介

续上文,电机驱动部分完成,接下来我们给他加上一个OLED的显示功能和MPU6050的姿态检测功能

二、姿态角显示开发

2.1 MPU6050简介

MPU6050是一种集成了3轴陀螺仪和3轴加速度计的数字运动处理器。它由英飞凌公司开发,可用于测量物体的角速度、加速度和方向,广泛应用于机器人、无人机、游戏手柄、智能手机和运动监测等领域。MPU6050采用I2C接口进行通信,具有低功耗、高精度、小尺寸等特点,是一款非常优秀的运动传感器。

STM32

2.2 OLED简介

OLED(Organic Light Emitting Diode)是有机发光二极管,是一种新型的显示技术。与传统的液晶显示屏相比,OLED显示屏具有更高的对比度、更快的响应速度、更广的视角、更薄的厚度和更低的功耗。
OLED显示屏是由一系列有机材料制成的薄膜堆叠而成,其中包括发光材料、电子传输材料和电极材料等。当电流通过这些材料时,它们会发出光,形成图像。OLED显示屏可以实现高分辨率、真实的颜色和高亮度。

STM32

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 效果演示

STM32


审核编辑:汤梓红
 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分