
PID项目
简介
简易的PID练习项目,其中包含MPU6050基础的姿态结算,stm32f103c8t6针脚全部引出,方便日常学习,增加12v.5v3.3v供电外置(如果使用5v12v,必须外置供电)
简介:简易的PID练习项目,其中包含MPU6050基础的姿态结算,stm32f103c8t6针脚全部引出,方便日常学习,增加12v.5v3.3v供电外置(如果使用5v12v,必须外置供电)开源协议
:GPL 3.0
描述
基于 STM32F103C8T6 简易PID学习项目文档(兼有MPU6050)
[HuiSpec](GitHub - HuiSpec/PID)
1. 项目概述
本项目基于 STM32F103C8T6 最小系统板,结合 TB6612 电机驱动模块,实现对电机的 PID 控制。同时,通过 MPU6050 传感器采集六轴数据(加速度和角速度)并在 OLED 显示屏上显示。此外,按键模块移植了开源的 multi_button 库,用于提供丰富且灵活的按键功能,目前可用于设置 PID 参数、切换显示界面、控制电机启停等操作。
2. 硬件组成
2.1 核心控制器
- 型号:STM32F103C8T6 最小系统板
- 功能:作为系统核心,负责 PID 算法运算、电机驱动控制、MPU6050 数据采集、OLED 显示控制以及按键交互等所有逻辑处理。
2.2 传感器模块
- MPU6050:
- 功能:集成加速度计和陀螺仪,采集系统的加速度和角速度六轴数据,通过 I2C 传输给 STM32,仅用于数据读取与显示,暂未参与 PID 控制反馈。
2.3 电机驱动模块
- TB6612:
- 功能:接收 STM32 输出的控制信号(如 PWM 等),驱动电机运转,实现对电机转速、方向等的控制,是 PID 控制的执行端。
2.4 电源模块
- LDO 模块(2 个):
- 功能:将输入的 12V DC 电源分别转换为 5V 和 3.3V。5V 为 TB6612 等外设供电,3.3V 为 STM32 单片机、OLED 显示屏、MPU6050、五向按键模块等供电。
2.5 显示与交互模块
- OLED 显示屏:
- 功能:实时显示系统状态信息,包括 PID 控制相关参数(如设定值、实际值、输出值等)以及 MPU6050 采集的六轴数据。
- 五向按键模块:
- 功能:提供人机交互接口,可用于设置 PID 参数、切换显示界面、控制电机启停等操作。
3. 软件结构(基于提供的项目文件树)
3.1 目录结构说明
- Core:
Inc:存放头文件,包含系统各模块功能的声明,如 PID 控制、MPU6050 驱动、OLED 显示、电机驱动等。Src:存放源文件,是各功能模块的具体实现代码,如主程序、中断服务函数等。
- Drivers:
CMSIS:包含 ARM Cortex-M 系列内核的通用系统接口文件,为 STM32 芯片的内核操作提供支持。STM32F1xx_HAL_Driver:STM32F1 系列的 HAL(硬件抽象层)驱动库,封装了芯片各类外设(如 GPIO、I2C、TIM 等)的操作接口,方便开发者使用外设。
- User:
- 包含多个功能子模块目录:
BUTTON:五向按键模块的驱动与功能实现代码,用于处理按键输入。ENCODER:(若有编码器相关功能,此处为编码器驱动与处理代码,本项目暂未明确提及编码器,可根据实际情况补充或说明)。GUI:与 OLED 显示相关的图形界面处理代码,用于控制 OLED 显示内容与格式。LED:此处为 LED 驱动与控制代码。MPU6050:MPU6050 传感器的驱动代码,包括 I2C 通信、六轴数据读取与解析等功能。OLED:OLED 显示屏的驱动代码,实现显示初始化、字符与图形显示等功能。PID:PID 控制算法的实现代码,包含 PID 参数设置、误差计算、PID 输出计算等功能,用于电机控制。
- 包含多个功能子模块目录:
- 其他文件:
Makefile:用于构建项目的编译脚本,定义了编译规则、目标文件生成等。platformio.ini:PlatformIO 开发环境的配置文件,可配置开发板类型、框架、编译选项等。startup_stm32f103xb.s:STM32 芯片的启动文件,包含系统启动时的初始化代码,如堆栈设置、中断向量表等。STM32F103C8Tx_FLASH.ld:链接脚本,定义了程序在芯片内存(Flash、RAM 等)中的存储布局,如代码段、数据段的起始地址与大小等。STM32F103_PID-BUTTON.ioc:STM32CubeMX 生成的项目配置文件,记录了芯片外设的配置信息(如引脚分配、时钟设置等),可通过 STM32CubeMX 打开并修改配置。
3.2 主要功能流程
- 系统初始化:包括 STM32 外设初始化(如 GPIO 用于按键、电机驱动;I2C 用于与 MPU6050、OLED 通信;TIM 用于 PWM 输出等)、MPU6050 初始化、OLED 初始化、PID 参数初始化、TB6612 相关初始化等。
- 数据采集与显示:通过 I2C 接口从 MPU6050 读取六轴数据(加速度和角速度),并将这些数据实时显示在 OLED 显示屏上。
- PID 控制与电机驱动:根据设定的目标(如电机转速目标值),结合反馈(如实际电机转速反馈,可通过编码器等方式获取,本项目中若未用编码器,可基于控制逻辑的反馈等),计算误差值,代入 PID 算法计算出控制量,通过控制 TB6612 驱动电机运转。
- 交互处理:检测五向按键输入,根据按键操作调整 PID 参数、切换 OLED 显示内容(如在 MPU6050 数据显示界面和 PID 控制参数界面间切换)、控制电机启停等。
4. 使用说明
4.1 硬件连接
STM32F103_PID-BUTTON.ioc:STM32CubeMX 生成的项目配置文件,记录了芯片外设的配置信息(如引脚分配、时钟设置等),可通过 STM32CubeMX 打开并修改配置。
4.2 软件编译与下载
4.2.1 使用 PlatformIO
- 确保已安装 PlatformIO 开发环境。
- 将项目代码克隆到本地。
- 打开项目目录,在
platformio.ini中确认开发板等配置正确。 - 执行编译命令(如在 PlatformIO IDE 中点击编译按钮),生成可执行文件。
- 通过下载工具(如 ST-Link)将程序下载到 STM32F103C8T6 芯片中。
4.2.2 使用其他工具链
若使用 Keil 等其他开发工具,可根据 Makefile、STM32F103C8Tx_FLASH.ld 等文件中的信息,配置项目工程,添加相应的源文件和头文件,进行编译和下载。
设计图
未生成预览图,请在编辑器重新保存一次BOM
暂无BOM
克隆工程知识产权声明&复刻说明
本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。
请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。









