esp32直流电机版平衡小车
esp32无刷电机版平衡小车
1.发现IIC设备
为什么我每次都要运行这个程序呢?首先当我们接好线了以后,就是确保这些传感器接线正常并且是好的。如果你直接跑mpu6050采集数据的例程,那么一旦跑不通,就不知道是程序问题还是硬件问题或者是接线没接好呢?所以我们一步一步来,哪里有问题就非常清晰了。
2.读取mpu6050原始倾角数据
下面这个程序
#include "Wire.h" //I2C通讯库
#include "I2Cdev.h" //
#include "MPU6050.h" //mpu6050库
MPU6050 mympu; //定义mympu对象
float pi=3.1415926; //Π的值,用于单位转换
float AcceRatio=16384.0; //加速度计比例系数
float GyroRatio=131.0; //陀螺仪比例系数
//定义3个变量,用于存储倾角数据
float angle_x=0.0,angle_y=0.0,angle_z=0.0;
int16_t ax=0,ay=0,az=0,gx=0,gy=0,gz=0; //加速度计陀螺仪原始数据
float accx=0.0,accy=0.0,accz=0.0;
void setup(){
Wire.begin(19, 18, 400000);//开启iic通讯,mpu6050的数据传输协议为iic
Serial.begin(115200);//打开串口
mympu.initialize(); //初始化mpu6050
}
void loop() {
//通过调用该函数,一次性从mpu6050获取6轴数据
mympu.getMotion6(&ax,&ay,&az,&gx,&gy,&gz);
accx=ax/AcceRatio; //x轴加速度
accy=ay/AcceRatio; //y轴加速度
accz=az/AcceRatio; //z轴加速度
angle_x=(atan(accx/accz)*180/pi); //计算身体前后的倾角,绕y轴的转角
angle_y=(atan(accy/accz)*180/pi); //计算身体左右的倾角,绕x轴的转角
Serial.print(az);Serial.print(" ");//将z轴加速度原始数据输出
Serial.print(accx);Serial.print(" ");//将3轴加速度输出(单位:g)
Serial.print(accy);Serial.print(" ");//将两个转角从串口输出
Serial.print(accz);Serial.print(" ");//将两个转角从串口输出
Serial.print(angle_x);Serial.print(" ");//将两个转角从串口输出
Serial.print(angle_y);Serial.println(" ");
delay(100);
}
上传完成之后,我们从串口监视器看,看最后两列就是打印出来的两个倾角数据,这时我们可以手动让小车绕轮子旋转,看哪个倾角跟随着变化,这个倾角就是我们需要测的数据。
遇到的问题?
1.mpu6050失联
?
mpu6050接在灯哥foc3.0的iic接口上???偶尔会莫名其妙mpu6050断连??我要重新插拔一下电源接口才会恢复正常???请问这是什么原因
?
?2.mpu6050平放的时候显示40度倾角
3.电机一转mpu6050倾角变大
?一插电机mpu6050的角度就会变大,电机输出速度也变大。
一拔下电机mpu6050的角度就恢复正常,然后串口突然中断不输出了。
|