基于STM32+PID控制两轮智能自平衡小车设计
目录绪论 11.1 研究意义及背景 11.2 本文主要研究内容及任务 1系统概述 22.1 控制系统要求分析 22.2 平衡小车控制原理分析 22.3 自平衡小车PID控制器分析 42.3.1 PID控制原理 42.3.2 PID控制器设计 4系统硬件电路设计 53.1 硬件电路整体框架 53.2 电源供电部分 53.3 STM32F103C8T6最小系统 73.3.1 复位电路 83.3.2 Boot选择部分 83.3.3晶振部分 93.3.4 指示灯部分 93.3.5 st-link下载部分 93.4 九轴姿态角度传感器部分 103.4.1 九轴姿态角度传感器基本介绍 103.4.2 九轴姿态角度传感器性能 103.4.3 实物图 103.4.4 引脚说明 113.4.5 通信方式 113.5 电机驱动编码器部分 123.5.1电机编码器基本介绍 123.5.2 电机实物图 123.5.3 电机编码器引脚说明 123.5.4 电机驱动A4950 133.6 巡线避障部分 143.6.1 传感器介绍 143.7 蓝牙通信部份 15软件设计部分 164.1 操作系统RTOS(RtThread) 164.1.1简介RtThread 164.1.2 系统任务的划分 174.2 电机驱动 184.2.1 流程图 184.2.2 主要API函数 184.3 九轴姿态角度传感器数据读取 194.3.1 数据格式 194.3.2 程序流程 204.4 编码器数据读取 224.4.1 数据格式 224.4.2 程序流程 224.5 直立PID功能实现 234.5.1 控制策略 234.5.2 流程图 234.5.3 直立环 244.5.4 速度环 254.5.5 转向环 264.6 蓝牙遥控部分 264.6.1 数据协议 264.7 循迹避障部分 274.7.1 主要API解析 27系统PID调试部分 285.1 直立环 295.2 速度环 305.3 转向环 305.4 角度锁死 31总结 31参考文献 32致谢 32附录 33附录一 主要代码 33附录二 原理图 40附录三 实物图 41设计一款两轮自平衡小车通过对陀螺仪的数据的读取处理从而识别出车身姿态根据车身姿态计算PID通过对小车进行实时的PID控制使得小车可以按照要求实现自主平衡根据遥控可以实现平稳前进后退根据灰度传感器数据可以实现循迹和避障。具体内容分为以下几个部分1.平衡小车机械设计部分主要是机械重心调整电气设计部分。2.信号处理部分九轴陀螺仪数据的读取和处理灰度传感器的读取和处理电机编码器的数据读取和处理。3.控制算法PID根据输入的信息完成直立环速度环转向环的计算控制。4.遥控传输部分采用蓝牙无线模块接收手机的遥控数据。2.系统概述2.1 控制系统要求分析要使小车在干扰的情况下实现自平衡自恢复干扰并且能够在遥控下实现前进后退左转右转功能。结合系统分析可知自平衡小车需要维持原地不倒和运动运动的动力来自自平衡车的两轮两轮由两个直流电机驱动。因此自平衡小车可以作为被控制对象自平衡小车的两轮可以作为控制系统的控制量。整个系统划分为三个部分1.自平衡小车的站立控制直立环以小车的倾斜角度和角速度作为输入参数通过计算直立环的PD控制器得到电机的输出大小控制电机的速度来保持小车的自平衡。2.自平衡小车的速度控制速度环在站立环的基础上通过改变自平衡小车电机的编码器数值来调整车体的实际运动速度。通过计算PI通过调整电机的运行速度改变小车的实际运行速度。当速度环的速度设置为的时候小车可以实现在原地保持不动当人为干扰推动小车小车可以自动回到原地。设置为某一数值的时候可以实现前进后退。3.自平衡小车转向调整转向环通过调整自平衡小车两轮的速度利用差速转弯采用P控制器。可以实现左右转弯。#includemain.hu16 imuCorrectCount0,imuErrorCount0,readEncodeCount0,sendDataCount0,controlMotorCount0;//记录hz数 s32 leftEncoder0,rightEncoder0;/* 线 程readEncode 作 用读取左右电机编码器脉冲数 频 率100Hz */void readEncode(void* parameter){while(1){readEncodeCount;leftEncoder Read_Encoder(2);rightEncoder - Read_Encoder(4);rt_thread_delay(1);rt_timer_check();}}/* 线 程sendData 作 用使用printf通过串口3打印数据也可使用rt_kprintf,通过串口1打印数据 频 率10Hz */void sendData(void* parameter){//printf(d %.2f\r\n\r\n,m[2]);// rt_thread_delay(1000);//do something // rt_timer_check();}/* 线 程controlMotor 作 用控制电机 频 率1000Hz 日 期2019年1月26日 作 者meetwit */void controlMotor(void* parameter){float temp1,temp2,temp3;float get_angle,get_gyro;temp1 32768/180.0;//角度 temp2 32768/2000.0;//角速度 temp3 32768/16.0;//角加速度 int finalPwm 0,finalPwm2 0;u8 time0;while(1){time;controlMotorCount;finalPwm 0;get_angle stcAngle.Angle[0]/temp1;get_gyro stcGyro.w[0]/temp2;if(get_angle40||get_angle-40){//角度过大锁住 motor_run(0,0);stop_flag 1;}if(stop_flag){if(get_angle-5get_angle5){//角度适合解锁 rt_thread_delay(RT_TICK_PER_SECOND*2);//扶正后等待x秒 stop_flag 0;//解锁}velocity_mw();//执行一次清除积分 motor_run(0,0);}else{//10和300 进行PID控制 finalPwm balance_mw(get_angle,get_gyro);finalPwm velocity_mw();finalPwm2 finalPwmFlag_turn;if(finalPwm20){motor_run(3,finalPwm2);}else{motor_run(4,-finalPwm2);}if(finalPwm0){motor_run(2,finalPwm);}else{motor_run(1,-finalPwm);}if(time%200){Flag_v 0;Flag_turn 0;}}rt_thread_delay(5);rt_timer_check();}}void timer1_f(void* parameter){Rx_Tm3--;if(Rx_Tm31)Task_Pc3();}/* 线 程time_thread 作 用通过串口1打印系统时间 频 率1Hz 日 期2019年1月26日 作 者meetwit */void time_thread(void* parameter){rt_tick_t tick_temp;rt_uint8_t h0,m0,s0;while(1){tick_temp rt_tick_get();stick_temp/RT_TICK_PER_SECOND%60;mtick_temp/RT_TICK_PER_SECOND/60%60;htick_temp/RT_TICK_PER_SECOND/60/60%24;rt_kprintf(\r\nThe system runtime is %d:%d:%d.%d\r\n,h,m,s,tick_temp%RT_TICK_PER_SECOND);rt_kprintf(imuCorrectCount%d,imuErrorCount%d,readEncodeCount%d,sendDataCount%d,controlMotorCount%d\r\n,imuCorrectCount/3,imuErrorCount,readEncodeCount,sendDataCount,controlMotorCount);imuCorrectCount0;imuErrorCount0;readEncodeCount0;sendDataCount0;controlMotorCount0;rt_thread_delay(RT_TICK_PER_SECOND);}}

相关新闻

gateway-serve Zuul 网关

gateway-serve Zuul 网关

2026/8/11 16:36:14 阅读更多 →
Unity 2D游戏深度排序:自定义轴排序模式原理与实战配置

Unity 2D游戏深度排序:自定义轴排序模式原理与实战配置

1. 项目概述:为什么2D游戏需要自定义轴排序?在开发2D游戏时,一个最基础也最让人头疼的问题就是“谁该画在谁前面”。角色走到树后面,树却把角色挡住了;多个角色站在一起时,渲染顺序混乱,看起来像…

2026/8/12 19:57:17 阅读更多 →
windows安装 evo

windows安装 evo

1、widows先下载安装python 下载 ,安装, 设置系统环境变量 C:\Users\xxxx\AppData\Local\Python\bin 2、windows下安装pip 下载 ,安装,设置系统环境变量 python -m -pip install --upgrade pip 3、安装evo pip install --…

2026/8/11 16:36:14 阅读更多 →

最新新闻

构建现代AI Agent:从LLM到RAG的六大核心模块全解析

构建现代AI Agent:从LLM到RAG的六大核心模块全解析

1. 项目概述:一个现代AI Agent的完整拼图最近和几个做AI应用落地的朋友聊天,大家普遍有个感觉:单靠一个大语言模型(LLM)已经玩不转了。无论是做个简单的客服助手,还是想搞个能自动处理复杂流程的智能体&…

2026/8/12 21:01:53 阅读更多 →
Java生成Word文档实战指南:从Apache POI选型到性能优化

Java生成Word文档实战指南:从Apache POI选型到性能优化

1. 项目概述:为什么Java生成Word文档是个“技术活”?如果你是一名Java开发者,最近刚好接到一个需求,比如要批量生成合同、报告、或者带复杂格式的录取通知书,你的第一反应是什么?是去手动复制粘贴&#xff…

2026/8/12 21:01:53 阅读更多 →
AI语音合成项目部署指南:从环境配置到俄语TTS实战

AI语音合成项目部署指南:从环境配置到俄语TTS实战

这次我们来看一个名为“【雪松】【AI克劳迪娅】【俄语版本】死别”的项目。从标题来看,这很可能是一个涉及AI语音生成或数字人技术的项目,核心关键词指向“雪松”、“AI克劳迪娅”以及“俄语版本”。虽然没有详细的官方项目描述,但结合当前AI…

2026/8/12 21:01:53 阅读更多 →
Abaqus 2021安装全攻略:从许可证配置到环境变量详解

Abaqus 2021安装全攻略:从许可证配置到环境变量详解

1. 项目概述:为什么选择Abaqus 2021?如果你正在机械、土木、航空航天或者材料领域做仿真分析,那么Abaqus这个名字对你来说一定不陌生。作为达索系统旗下功能最强大的通用有限元分析软件之一,Abaqus以其在非线性分析方面的卓越能力…

2026/8/12 21:01:53 阅读更多 →
AI时代程序员转型:从编码到架构与质量守护

AI时代程序员转型:从编码到架构与质量守护

1. 从“编码者”到“架构师”:AI时代程序员的角色重塑最近和几个老同事吃饭,聊起现在的工作状态,大家不约而同地提到一个现象:以前一天到晚在IDE里敲代码,现在一天到晚在跟各种AI工具“对话”。GitHub Copilot、Cursor…

2026/8/12 21:01:53 阅读更多 →
麒麟系统安装察元 WPS AI 文档助手:免费、开源、离线部署说明

麒麟系统安装察元 WPS AI 文档助手:免费、开源、离线部署说明

要点速览 察元是运行在 WPS 文字中的 AI 文档助手类加载项,在 WPS 内提供对话、写作、翻译、审校与批量处理等能力,可作为 WPS 环境下的 AI 助手能力补充。软件可免费使用,源代码在 GitHub 公开,许可以仓库 LICENSE 为准。部署上…

2026/8/12 21:00:52 阅读更多 →

日新闻

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

Ubuntu 22.04安装与使用tree命令:高效管理Linux目录结构

1. 为什么需要一个“目录树”工具?在Linux世界里,尤其是Ubuntu这样的发行版,命令行是很多人的主战场。我们每天都要和文件、目录打交道。ls命令是查看目录内容的首选,它简洁、高效,能列出文件名、权限、大小等关键信息…

2026/8/12 9:33:34 阅读更多 →
博思AI智能体:意图识别、思考链与性能优化的工程实践

博思AI智能体:意图识别、思考链与性能优化的工程实践

在AI应用从“能用”走向“好用”的进程中,系统的响应速度、决策透明度与高并发稳定性是决定用户体验的关键。博思AI智能体近期完成了一次重要的专项优化,聚焦于意图识别、思考链展示与全链路压测三大核心领域,将系统从功能实现推向了工程卓越…

2026/8/12 9:33:34 阅读更多 →
子代理架构:AI智能体任务分解与协同执行的核心原理与实践

子代理架构:AI智能体任务分解与协同执行的核心原理与实践

1. 项目概述:为什么我们需要“子代理”?最近在折腾各种AI应用和自动化流程时,我越来越频繁地遇到一个瓶颈:单个AI智能体(Agent)的能力边界。无论是处理复杂的多步骤任务,还是需要同时调用多个专…

2026/8/12 9:33:34 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/12 1:11:09 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/12 1:11:09 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/12 1:11:08 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/11 17:09:45 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/12 1:11:10 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/11 17:09:45 阅读更多 →