基于STM32平衡小车(PID+编码器+MPU6050+TB6612) |
您所在的位置:网站首页 › 码盘和编码器是一个东西吗 › 基于STM32平衡小车(PID+编码器+MPU6050+TB6612) |
目录 一、硬件设计 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、MPU6050MPU6050是一个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 |