基于STM32平衡小车(PID+编码器+MPU6050+TB6612)

您所在的位置:网站首页 码盘和编码器是一个东西吗 基于STM32平衡小车(PID+编码器+MPU6050+TB6612)

基于STM32平衡小车(PID+编码器+MPU6050+TB6612)

2024-06-05 12:58| 来源: 网络整理| 查看: 265

目录

一、硬件设计

1、硬件选购

2、硬件使用方法及接线图

2.1、编码器

2.2、MPU6050

2.3TB6612电机驱动

二、PID算法

1、PID调参

 三、最终效果及开源资料

一、硬件设计 1、硬件选购 STM32C8T6最小系统板https://m.tb.cn/h.51Pnm8d?tk=wBIQdFnpzsXMPU6050https://m.tb.cn/h.5c3kq3L?tk=tYOGdFnqIW1编码器电机https://m.tb.cn/h.5c3mQmr?tk=sjlodFnrxxXTB6612电机驱动https://m.tb.cn/h.5X0oGxv?tk=TCtMdFnKjRD0.96OLED屏https://m.tb.cn/h.5YGUir5?tk=K6d8dFnI5lv电源模块https://m.tb.cn/h.5YGg4fm?tk=GshLdFnsk19电池https://m.tb.cn/h.5YGgNW6?tk=KfOWdFnHZds

这里建议大家买MPU6050时一定要看好质量,有些买来用一两次就坏了。

2、硬件使用方法及接线图 2.1、编码器

主要由编码器的A、B相接入到STM32定时器I\O口,编码器接口会自动控制定时器时基单元中的CNT计数器进行自增或自减,再通过OLED屏从而获取编码器的位置、旋转速度和方向

 具体接线方式

红线TB6612:AO2、BO1白线TB6612:AO1、BO2黄线(A相)MCU:PB6绿线(B相)MCU:PB7黑线GND蓝线电源模块5v 2.2、MPU6050

MPU6050是一个6轴姿态传感器 ,内有加速度和陀螺仪两种传感器可以分别测量X、Y、Z的加速度、角速度。综合多种数据的融合(互补滤波或卡尔曼滤波),可进一步获得准确的欧拉角(姿态角) ,内部有集成的DMP姿态解算主要目的是车身位置,从而保持平衡

主要代码如下

#include "mpu6050.h" #include "sys.h" #include "delay.h" #include "usart.h" //初始化MPU6050 //返回值:0,成功 //其他,错误代码 u8 MPU_Init(void) { u8 res; MPU_IIC_Init();//初始化IIC总线 MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X80); //复位MPU6050 delay_ms(100); MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X00); //唤醒MPU6050 MPU_Set_Gyro_Fsr(3); //陀螺仪传感器,±2000dps MPU_Set_Accel_Fsr(0); //加速度传感器,±2g MPU_Set_Rate(200); //设置采样率50Hz MPU_Write_Byte(MPU_INT_EN_REG,0X00); //关闭所有中断 MPU_Write_Byte(MPU_USER_CTRL_REG,0X00); //I2C主模式关闭 MPU_Write_Byte(MPU_FIFO_EN_REG,0X00); //关闭FIFO MPU_Write_Byte(MPU_INTBP_CFG_REG,0X80); //INT引脚低电平有效 res=MPU_Read_Byte(MPU_DEVICE_ID_REG); if(res==MPU_ADDR)//器件ID正确 { MPU_Write_Byte(MPU_PWR_MGMT1_REG,0X01); //设置CLKSEL,PLL X轴为参考 MPU_Write_Byte(MPU_PWR_MGMT2_REG,0X00); //加速度与陀螺仪都工作 MPU_Set_Rate(100); //设置采样率为50Hz }else return 1; return 0; } //设置MPU6050陀螺仪传感器满量程范围 //fsr:0,±250dps;1,±500dps;2,±1000dps;3,±2000dps //返回值:0,设置成功 // 其他,设置失败 u8 MPU_Set_Gyro_Fsr(u8 fsr) { return MPU_Write_Byte(MPU_GYRO_CFG_REG,fsr=20)data=4; else if(lpf>=10)data=5; else data=6; return MPU_Write_Byte(MPU_CFG_REG,data);//设置数字低通滤波器 } //设置MPU6050的采样率(假定Fs=1KHz) //rate:4~1000(Hz) //返回值:0,设置成功 // 其他,设置失败 u8 MPU_Set_Rate(u16 rate) { u8 data; if(rate>1000)rate=1000; if(rate


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3