零基础学会制作 基于STM32/51单片机的两轮平衡车设计/两轮车/平衡车/PID/直流电机

项目介绍

本文提出并实现了一种基于STM32单片机的两轮自平衡车设计方案。该平衡车集成了多种传感器,如陀螺仪和加速度计,用于实时监测车体状态,并通过精密的控制算法来调整车轮的转速,实现动态平衡。文中首先详细介绍了两轮平衡车的控制理论,包括系统建模、状态反馈及PID控制等,并分析了在设计自平衡系统时面临的主要挑战。系统的控制算法采用了经典的PID控制方法,并结合了现代滤波技术来提高系统的响应速度与稳定性。通过综合应用传感器数据融合技术和精确的控制策略,平衡车能够在各种环境下保持稳定。

功能介绍

基于STM32单片机的两轮平衡车设计项目,正是这一趋势下的一个创新实例。此设计利用STM32的强大处理能力和高效性能,通过精细的硬件模块设计和先进的软件编程,实现对平衡车动态稳定性的精确控制。项目的核心在于采用MPU6050六轴陀螺仪模块,它能实时监测并调整平衡车的姿态,确保其在各种环境下的稳定运行。加之蓝牙模块的集成,使得平衡车可以通过智能手机APP远程操控,提供了更为便捷的交互方式。此外,运用PID控制算法进一步优化平衡车的性能,使其在保持平衡的同时,还能实现复杂的移动控制。此项设计不仅具有重要的教育意义和实践价值,其在智能交通、个人移动助力设备等领域的应用前景广阔。

所用模块

基于STM32单片机,通过综合硬件电路设计和软件程序开发,实现一套完整的两轮平衡车系统。硬件模块设计包括主控模块、陀螺仪模块、蓝牙模块、按键模块、驱动模块等,其中采用MPU6050六轴陀螺仪实现对小车的姿态平衡调整。通过蓝牙模块,实现与手机APP的连接,使用户能够通过手机APP对小车进行前后左右的远程控制。为了实现小车的平衡运动,将采用PID等算法进行控制。研究的重点将放在硬件模块的详细设计与优化,陀螺仪数据的处理算法,以及蓝牙通信协议和手机APP的开发上。
在这里插入图片描述

系统原理图

在这里插入图片描述
在这里插入图片描述

实物图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

部分代码

#include “sys.h”

u8 Flag_Qian,Flag_Hou,Flag_Left,Flag_Right,Flag_sudu=2; //蓝牙遥控相关的变量
u8 Flag_Stop=1,Flag_Show=1;
int Encoder_Left,Encoder_Right; //左右编码器的脉冲计数
int Moto1,Moto2; //电机PWM变量
int Temperature; //显示温度
int Voltage; //电池电压采样相关的变量
float Angle_Balance,Gyro_Balance,Gyro_Turn; //平衡倾角 平衡陀螺仪 转向陀螺仪
u32 Distance; //超声波测距

int main(void)
{
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
JTAG_Set(JTAG_SWD_DISABLE); //=====关闭JTAG接口
JTAG_Set(SWD_ENABLE); //=====打开SWD接口 可以利用主板的SWD接口调试
LED_Init(); //初始化与 LED 连接的硬件接口
LED=0;
KEY_Init(); //按键初始化
OLED_Init(); //OLED初始化
//uart_init(72,115200); //初始化串口1
uart3_init(9600); //串口3初始化
Adc_Init(); //ADC初始化
MiniBalance_PWM_Init(7199,0); //=====初始化PWM 10KHZ 高频可以防止电机低频时的尖叫声
Encoder_Init_TIM2(); //初始化编码器1
Encoder_Init_TIM4(); //初始化编码器2
IIC_Init(); //模拟IIC初始化
MPU6050_initialize(); //=====MPU6050初始化
DMP_Init(); //初始化DMP
Timer1_Init(49,7199); //=====5MS进一次中断服务函数,中断服务函数在control.c
while(1)
{
//===============整个姿态控制都要在定时中断服务函数中进行,while循环只执行一些不重要的工作,oled显示。

				delay_ms(500);//延时减缓数据传输频率,确保通信的稳定
				//Temperature=Read_Temperature();  //===读取MPU6050内置温度传感器数据,近似表示主板温度。	
				oled_show(); //===显示屏打开
				delay_ms(100);	//延时减缓数据传输频率,确保通信的稳定			
	}

}

#include “motor.h”

void MiniBalance_Motor_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PB端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; //端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //50M
GPIO_Init(GPIOB, &GPIO_InitStructure); //根据设定参数初始化GPIOB
}
void MiniBalance_PWM_Init(u16 arr,u16 psc)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
MiniBalance_Motor_Init();
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);//
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能GPIO外设时钟使能

资料下载链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值