描述
<div>
<h3 style="line-height:1.8;">* 1、项目功能介绍</h3>
<hr>
<p>本项目旨在设计并实现一个能够自主保持动态平衡的两轮小车。该小车以意法半导体的STM32F103C8T6微控制器为核心,通过MPU6050传感器感知自身的姿态角速度和角度,采用经典的PID控制算法计算出维持平衡所需的电机控制量,并通过TB6612电机驱动模块驱动两个带编码器的直流电机,从而形成一个闭环反馈系统,实现小车的直立平衡。</p>
<p>核心功能:</p>
<p>通过MPU6050实时采集小车姿态数据。</p>
<p>利用STM32进行传感器数据融合(如互补滤波)和PID控制计算。</p>
<p>通过TB6612驱动电机,产生平衡所需的扭矩。</p>
<p>实现小车在静止状态下的自主平衡。</p>
<p>(可选扩展)通过手机蓝牙控制器实现小车的前进、后退和转向控制。</p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*2、项目属性</h3>
<hr>
<p><strong>首次公开状态</strong>:本项目为首次公开</p>
<p><strong>是否原创:</strong>原创</p>
<p><strong>获奖情况</strong>:项目尚未参与任何正式比赛或评奖活动</p>
<p style="line-height:1.8;"> </p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">* 3、开源协议</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">GPL3.0</span></p>
<p style="line-height:1.8;"> </p>
<h3 style="line-height:1.8;">*4、硬件部分</h3>
<hr>
<p>本项目的硬件系统设计如下:</p>
<p>1. 核心控制单元<br>主控制器:采用STM32F103C8T6最小系统板</p>
<p>通过20针排母(H1, H2)与主板连接,便于调试和更换</p>
<p>承担所有核心计算任务:MPU6050数据处理、PID算法运算、PWM生成、编码器计数等</p>
<p>丰富的GPIO和定时器资源完美支持多路PWM输出和编码器接口</p>
<p>2 .电源管理系统<br>采用两级降压架构,确保系统稳定供电:</p>
<p>主电源输入:XT60PW M接口(U3)</p>
<p>连接大容量锂电池(推荐7.4V-12V)</p>
<p>XT60接口支持大电流传输,满足电机瞬时大电流需求</p>
<p>一级降压:专用降压模块(电源一1)</p>
<p>输出3.3V/3A,为系统数字部分供电</p>
<p>3A大电流容量确保STM32、传感器、显示模块稳定工作</p>
<p>二级稳压:AMS1117-3.3(U2)</p>
<p>作为辅助稳压,可能用于对噪声敏感的数字电路</p>
<p>提供更加纯净的3.3V电源</p>
<p>电源滤波:</p>
<p>10μF(C1, C4)和100nF(C2, C3)电容组合</p>
<p>实现高频和低频噪声滤波,提高系统抗干扰能力</p>
<p>3. 姿态感知系统<br>核心传感器:GY-521模块(MPU6050)</p>
<p>通过I2C接口与STM32通信</p>
<p>提供三轴加速度和三轴角速度数据</p>
<p>模块化设计便于安装和更换</p>
<p>4. 电机驱动系统<br>驱动芯片:TB6612FNG(U4)</p>
<p>驱动两个520编码电机</p>
<p>相比L298N效率更高、发热更小</p>
<p>支持1.2A持续电流,满足520电机需求</p>
<p>电机接口:XH-6AW连接器(CN2, CN3)</p>
<p>每个接口连接一个520编码电机</p>
<p>包含电机电源线和编码器信号线</p>
<p>5. 人机交互接口<br>显示模块:0.96英寸OLED(OLED1)</p>
<p>4针接口,采用I2C通信</p>
<p>实时显示小车状态:角度、速度、PID参数等</p>
<p>状态指示:绿色0805 LED(LED1)</p>
<p>用于系统状态指示</p>
<p>调试接口:4针排母(H9)</p>
<p>可能用于SWD调试或串口通信</p>
<p>6. 通信模块<br>蓝牙模块:HC-05(BLUE1)</p>
<p>通过6针排母连接</p>
<p>实现无线通信,支持手机APP遥控或参数调整</p>
<p>7. 扩展与测试接口<br>多种测试点:3.3V、 5V、12V、 G</p>
<p>便于电压测量和信号调试</p>
<p>支持外接扩展模块</p>
<p>8. 硬件设计特点分析<br>优势:</p>
<ul>
<li>模块化设计:各功能模块独立,便于调试和维修</li>
<li>电源冗余:多级电源设计,提高系统稳定性</li>
<li>接口丰富:预留多种调试接口,方便开发测试</li>
<li>抗干扰设计:合理的电容配置,增强系统可靠性</li>
</ul>
<p>注意事项:</p>
<ul>
<li>电源布线:电机电源线与信号线应分开布线,减少干扰</li>
<li>接地设计:建议采用星型接地或单点接地</li>
<li>散热考虑:TB6612和AMS1117需要适当散热</li>
<li>接口防反:电机接口建议做防反插设计</li>
</ul>
<p>9、 预期性能指标<br>供电电压:7.4V-12V锂电池</p>
<p>控制频率:基于STM32的72MHz主频,预计控制循环可达500Hz-1kHz</p>
<p>通信接口:I2C(MPU6050, OLED)、UART(蓝牙)、PWM(电机控制)</p>
<p>扩展能力:预留多个测试点,支持功能扩展</p>
<p>该硬件设计为软件算法提供了稳定可靠的平台,能够满足二轮平衡小车对实时性、稳定性和精度的要求。</p>
<p style="line-height:1.8;">10.原理图</p>
<p style="line-height:1.8;"><img src="//image.lceda.cn/pullimage/LdlgzTybqYOT0YLUnmJdVOvrkls8uW7m9pNqiQQv.png" alt="LdlgzTybqYOT0YLUnmJdVOvrkls8uW7m9pNqiQQv.png"></p>
<h3 style="line-height:1.8;">*5、软件部分</h3>
<hr>
<p style="line-height:1.8;"><span style="color:#95a5a6;font-size:14px;">本系统采用<strong>模块化分层架构</strong>,基于STM32CubeMX生成初始化代码,在Keil MDK-ARM环境下开发。软件系统分为驱动层、算法层、应用层三个主要层次。</span></p>
<pre> </pre>
<p>应用控制层</p>
<ul>
<li>主控制循环管理模块:负责协调整个系统的运行节奏和任务调度</li>
<li>系统状态机管理模块:实现多状态切换逻辑,包括初始化、就绪、运行、保护、校准等状态</li>
<li>人机交互逻辑模块:处理用户输入和系统信息输出的协调工作</li>
<li>高级任务调度器:管理不同优先级任务的执行顺序和时间分配</li>
</ul>
<p>算法处理层</p>
<ul>
<li>串级PID控制算法模块:实现角度环、速度环、转向环的三环控制结构</li>
<li>多传感器数据融合模块:负责MPU6050和编码器数据的协同处理</li>
<li>自适应滤波算法模块:包括互补滤波、卡尔曼滤波等多种滤波算法</li>
<li>系统安全保护算法:倾角限制、速度限制、故障检测等安全机制</li>
</ul>
<p>硬件驱动层</p>
<ul>
<li>外设抽象接口模块:统一各类外设的操作接口</li>
<li>传感器驱动模块:MPU6050、编码器的底层驱动和通信协议</li>
<li>执行器驱动模块:TB6612电机驱动的PWM生成和方向控制</li>
<li>通信接口模块:I2C、UART、SPI等通信协议的实现</li>
</ul>
<p><strong>平衡小车软件系统核心模块</strong></p>
<p><strong>姿态传感器数据处理:</strong><br>MPU6050陀螺仪和加速度计数据通过DMP运动处理库进行实时传感器融合,输出稳定的欧拉角姿态数据。系统以100Hz频率读取三轴角速度和加速度原始值,通过四元数解算获得精确的俯仰角(pitch)、滚转角(roll)和偏航角(yaw),为平衡控制提供准确的姿态反馈。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 姿态数据获取与处理</span>
<span>void</span> <span>Attitude_Data_Processing</span><span>(</span><span>void</span><span>)</span> <span>{</span>
<span>mpu_dmp_get_data</span><span>(</span><span>&</span>pitch<span>,</span> <span>&</span>roll<span>,</span> <span>&</span>yaw<span>)</span><span>;</span> <span>// DMP姿态解算</span>
<span>MPU_Get_Gyroscope</span><span>(</span><span>&</span>gyrox<span>,</span> <span>&</span>gyroy<span>,</span> <span>&</span>gyroz<span>)</span><span>;</span> <span>// 原始角速度</span>
<span>MPU_Get_Accelerometer</span><span>(</span><span>&</span>aacx<span>,</span> <span>&</span>aacy<span>,</span> <span>&</span>aacz<span>)</span><span>;</span> <span>// 原始加速度</span>
<span>}</span></pre>
</div>
<p><strong>编码器速度反馈:</strong><br>左右电机编码器通过STM32定时器编码器接口实时捕获脉冲信号,计算电机实际转速。编码器计数方向经过校准补偿,确保两轮速度反馈的一致性,为速度环控制提供精确的速度反馈量。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 编码器速度读取</span>
<span>void</span> <span>Encoder_Speed_Reading</span><span>(</span><span>void</span><span>)</span> <span>{</span>
Encoder_L <span>=</span> <span>Read_Speed</span><span>(</span><span>&</span>htim2<span>)</span><span>;</span> <span>// 左编码器正方向</span>
Encoder_R <span>=</span> <span>-</span><span>Read_Speed</span><span>(</span><span>&</span>htim4<span>)</span><span>;</span> <span>// 右编码器方向补偿</span>
<span>}</span></pre>
</div>
<p><strong>三环串级PID控制架构:</strong><br>系统采用速度环→直立环→转向环的串级控制结构。速度环作为外环抑制小车位置漂移,直立环作为核心环维持平衡状态,转向环辅助消除偏航误差,实现稳定的自平衡控制。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 串级PID控制器</span>
<span>void</span> <span>Cascade_PID_Control</span><span>(</span><span>void</span><span>)</span> <span>{</span>
<span>// 速度环PI控制 - 抑制位置漂移</span>
Velocity_out <span>=</span> <span>Velocity</span><span>(</span>Target_Speed<span>,</span> Encoder_L<span>,</span> Encoder_R<span>)</span><span>;</span>
<span>// 直立环PD控制 - 核心平衡控制 </span>
Vertical_out <span>=</span> <span>Vertical</span><span>(</span>Velocity_out <span>+</span> Med_Angle<span>,</span> roll<span>,</span> gyrox<span>)</span><span>;</span>
<span>// 转向环PD控制 - 消除偏航误差</span>
Turn_out <span>=</span> <span>Turn</span><span>(</span>gyroz<span>,</span> Target_Turn<span>)</span><span>;</span>
<span>}</span></pre>
</div>
<p><strong>直立环平衡控制:</strong><br>直立环采用PD控制算法,以融合后的滚转角(roll)作为主反馈量,角速度(gyrox)作为微分项输入。比例项提供恢复力矩,微分项抑制振荡,共同维持小车的动态平衡。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 直立环PD控制器</span>
<span>int</span> <span>Vertical</span><span>(</span><span>float</span> Med<span>,</span> <span>float</span> Angle<span>,</span> <span>float</span> gyro_Y<span>)</span> <span>{</span>
<span>int</span> temp<span>;</span>
temp <span>=</span> Vertical_Kp <span>*</span> <span>(</span>Angle <span>-</span> Med<span>)</span> <span>+</span> Vertical_Kd <span>*</span> gyro_Y<span>;</span>
<span>return</span> temp<span>;</span>
<span>}</span></pre>
</div>
<p><strong>速度环抗漂移控制:</strong><br>速度环采用带低通滤波的PI控制器,对编码器速度数据进行平滑处理。积分项配备抗饱和机制,急停时自动清零积分累积,防止积分饱和导致控制失效。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 速度环PI控制器</span>
<span>int</span> <span>Velocity</span><span>(</span><span>int</span> Target<span>,</span> <span>int</span> encoder_L<span>,</span> <span>int</span> encoder_R<span>)</span> <span>{</span>
<span>static</span> <span>float</span> a <span>=</span> <span>0.7</span><span>;</span> <span>// 低通滤波系数</span>
<span>static</span> <span>int</span> Err_LowOut_Last<span>,</span> Encoder_S<span>;</span>
Err <span>=</span> <span>(</span>encoder_L <span>+</span> encoder_R<span>)</span> <span>-</span> Target<span>;</span> <span>// 速度偏差</span>
Err_LowOut <span>=</span> <span>(</span><span>1</span><span>-</span>a<span>)</span><span>*</span>Err <span>+</span> a<span>*</span>Err_LowOut_Last<span>;</span> <span>// 低通滤波</span>
Encoder_S <span>+=</span> Err_LowOut<span>;</span> <span>// 积分累积</span>
<span>// 积分限幅与急停清零</span>
Encoder_S <span>=</span> Encoder_S <span>></span> <span>20000</span> <span>?</span> <span>20000</span> <span>:</span> Encoder_S</pre>
<div>
<pre><span>}</span></pre>
</div>
<p><strong>电机差速转向控制:</strong><br>转向环基于偏航角速度(gyroz)计算转向补偿量,通过调整左右电机PWM输出差值实现精确转向控制。转向输出与直立输出合成后,分别驱动左右电机。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 转向控制与电机输出</span>
<span>void</span> <span>Motor_Output_Control</span><span>(</span><span>void</span><span>)</span> <span>{</span>
PWM_out <span>=</span> Vertical_out<span>;</span> <span>// 基础平衡输出</span>
MOTOR1 <span>=</span> PWM_out <span>-</span> Turn_out<span>;</span> <span>// 左电机合成</span>
MOTOR2 <span>=</span> PWM_out <span>+</span> Turn_out<span>;</span> <span>// 右电机合成</span>
<span>Limit</span><span>(</span><span>&</span>MOTOR1<span>,</span> <span>&</span>MOTOR2<span>)</span><span>;</span> <span>// PWM限幅保护</span>
<span>Load</span><span>(</span>MOTOR1<span>,</span> MOTOR2<span>)</span><span>;</span> <span>// 电机驱动输出</span>
<span>}</span></pre>
</div>
<p><strong>实时控制调度:</strong><br>控制系统通过外部中断实现严格的10ms定时控制,确保100Hz的控制频率。每个控制周期内顺序执行传感器读取、数据处理、PID计算和电机输出,保证控制的实时性和稳定性。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 10ms控制中断服务函数</span>
<span>void</span> <span>HAL_GPIO_EXTI_Callback</span><span>(</span><span>uint16_t</span> GPIO_Pin<span>)</span> <span>{</span>
<span>if</span><span>(</span>GPIO_Pin <span>==</span> GPIO_PIN_5<span>)</span> <span>{</span>
<span>control</span><span>(</span><span>)</span><span>;</span> <span>// 执行完整控制流程</span>
<span>}</span>
<span>}</span></pre>
</div>
<p><strong>安全保护机制:</strong><br>系统通过软件限幅保护电机驱动,PWM输出限制在安全范围内。急停标志触发时立即清零速度环积分项,快速响应紧急停止指令,确保系统安全。</p>
<div>
<div>
<div>
<div>
<div><span>c</span></div>
</div>
</div>
</div>
<pre><span>// 电机安全保护</span>
<span>void</span> <span>Motor_Safety_Protection</span><span>(</span><span>void</span><span>)</span> <span>{</span>
<span>Limit</span><span>(</span><span>&</span>MOTOR1<span>,</span> <span>&</span>MOTOR2<span>)</span><span>;</span> <span>// PWM输出限幅</span>
<span>if</span><span>(</span>stop <span>==</span> <span>1</span><span>)</span> <span>{</span> <span>// 急停处理</span>
Encoder_S <span>=</span> <span>0</span><span>;</span> <span>// 积分项清零</span>
stop <span>=</span> <span>0</span><span>;</span>
<span>}</span>
<span>}</span></pre>
</div>
<p><strong>参数整定核心:</strong></p>
<ul>
<li>
<p>直立环参数:Vertical_Kp=300(快速响应),Vertical_Kd=2.2(抑制振荡)</p>
</li>
<li>
<p>速度环参数:Velocity_Kp=-0.44(速度跟踪),Velocity_Ki=-0.0022(消除静差)</p>
</li>
<li>
<p>平衡点偏移:Med_Angle=-0.5(机械平衡点校准)</p>
</li>
</ul>
<p><strong>*6.BOM清单</strong></p>
<p><strong><img src="//image.lceda.cn/pullimage/KX19r7eFVd8WTi5tQOrIna6v5BW1zHkFeMI3nDXR.png" alt="KX19r7eFVd8WTi5tQOrIna6v5BW1zHkFeMI3nDXR.png"></strong></p>
<p> </p>
<p><strong>*7、大赛logo验证</strong></p>
<p><strong><br><br></strong></p>
<p><strong><img src="//image.lceda.cn/pullimage/ditpF7CF3VawygqMles13rRL12xxsoa8ywQcWwDz.jpeg" alt="ditpF7CF3VawygqMles13rRL12xxsoa8ywQcWwDz.jpeg"></strong></p>
<p> </p>
<p><strong><img src="//image.lceda.cn/pullimage/MYghY5U4JXVBZuhXja04MG9Ynu5XplRw0yt23vth.png" alt="MYghY5U4JXVBZuhXja04MG9Ynu5XplRw0yt23vth.png"></strong></p>
</div>
</div>
评论(0)