基于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/10/25 2:57:24 阅读更多 →
Unity 2D游戏深度排序:自定义轴排序模式原理与实战配置

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

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

2026/10/25 12:53:15 阅读更多 →
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/10/25 10:42:03 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/25 11:19:54 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/24 17:47:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/24 18:34:36 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/25 10:02:42 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/25 3:12:30 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/24 21:09:59 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 10:02:43 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/24 11:09:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 7:47:32 阅读更多 →