2022年电赛A题:基于立创·地正星MSPM0L1306与STM32G030的无线充电循迹小车全系统设计

news2026/3/17 14:50:54
手把手复刻2022年电赛A题无线充电循迹小车全系统设计最近有不少同学在准备电赛或者想自己动手做一个智能小车项目经常问我关于无线充电和循迹结合的实现方案。正好去年我带队做了一个2022年电赛A题的项目——无线充电循迹小车今天就来给大家详细拆解一下这个项目的完整设计思路和实现步骤。这个项目用到了三块主控芯片听起来有点复杂但其实思路很清晰一块板子负责让小车沿着黑线跑循迹一块板子负责发射无线电能还有一块板子负责接收电能并给小车供电。咱们一步步来看从硬件选型、电路设计到软件编程我会把当时踩过的坑和调试心得都分享出来希望能帮你少走弯路。1. 项目整体架构与硬件选型做项目第一步得先把“骨架”搭好。我们这个无线充电循迹小车可以分成三个核心部分就像人体的“大脑”、“心脏”和“能量站”。1.1 三大核心模块分工循迹控制大脑立创·地正星MSPM0L1306开发板。它负责小车的“眼睛”循迹传感器和“腿”电机。通过读取传感器数据判断小车是否偏离黑线然后计算出该给电机多大的速度来纠正方向。电能发射站STM32G030F6P6。它的任务是把直流电比如从电源适配器来的电转换成高频交流电并通过线圈发射出去。你可以把它想象成一个无线充电底座的控制核心。电能接收与管家另一块STM32G030F6P6。它安装在车上负责接收发射端传来的电能经过整流、降压后给超级电容充电。同时它还像个管家实时监测电容的电量并在电容充满后启动升压电路给小车主板供电并通知循迹大脑“电已备好可以发车了”1.2 为什么选这些芯片MSPM0L1306这是TI德州仪器的MSPM0系列MCU基于ARM Cortex-M0内核。它功耗低模拟外设ADC性能不错非常适合用来做传感器数据采集和简单的电机PWM控制。关键是嘉立创的“地正星”开发板性价比高资料也齐全。STM32G030F6P6ST的经典入门款MCUCortex-M0内核价格便宜性能足够。我们用它来做发射端的PWM信号生成和接收端的ADC采样、BUCK电路控制完全够用。两块板子用同款芯片还能减少我们熟悉不同芯片的时间成本。1.3 其他关键硬件清单为了让整个系统跑起来我们还需要以下“器官”模块核心器件作用循迹传感器红外对管模块改装小车的“眼睛”检测地面黑线电机驱动TB6612FNG模块小车的“肌肉”驱动两个直流电机小车底盘四轮小车底盘淘宝小车的“身体”承载所有部件无线充电发射CSD17570Q5B MOS管、LM5106驱动构建H桥产生高频交变磁场无线充电接收SB1045L肖特基二极管、MOS管、LM5106整流、BUCK降压、理想二极管防倒灌电源管理TPS62120, TPS61201, MT3608为各芯片提供稳定的3.3V、5V、12V电压能量存储超级电容组 BW6106保护芯片存储接收的电能并防止过充过放有了这个整体认识咱们接下来就深入每个模块看看具体是怎么做的。2. 硬件电路设计与实现硬件是项目的基石设计不好后面软件调起来会非常痛苦。我当时画PCB时就特别注意了电源隔离和信号走线。2.1 循迹控制主板设计这块板子是小车的“指挥中心”核心是让MSPM0L1306能稳定工作并连接所有外设。主控电路就是围绕MSPM0L1306的最小系统包括晶振、复位电路、调试接口SWD和滤波电容。这里有个细节数字电路和模拟电路的电源最好用磁珠或0欧电阻隔一下尤其是ADC参考电压要特别干净这样读取红外传感器的值才准。电机驱动接口我们直接引出了TB6612模块需要的控制信号线PWMA, AIN1, AIN2, PWMB, BIN1, BIN2和电源线。TB6612模块是现成的这样省去了自己画驱动电路的风险。传感器与通信接口预留了2路模拟输入接口接改装后的红外循迹模块。预留了2个GPIO口作为与无线接收板的通信线。一根用来接收“充电完成”信号一根用来回复“已收到准备启动”。设计了12V输入给TB6612、5V输入可能给其他外设和3.3V输出从板载LDO来的接口并且每个电源入口都加了独立的开关调试时非常方便。2.2 无线充电发射板设计这块板子的目标是把直流电变成特定频率的交流电并通过线圈发射出去。关键是LC谐振电路和H桥驱动。H桥与驱动用4颗CSD17570Q5BMOS管搭建全桥。为什么用全桥因为它比半桥效率更高能在线圈上产生更大的交变电压。MOS管需要驱动芯片我们选了LM5106它可以把MCU产生的3.3V PWM信号转换成能快速、有力地打开和关闭MOS管的电压。LC谐振电路这是能量传输效率的核心。线圈电感L和并联的高频贴片电容C一定要用NP0/C0G这类温漂小的组成谐振电路。当H桥输出的方波频率等于这个LC电路的谐振频率时线圈中的电流最大传输效率最高。这个频率需要后期调试确定。电流检测用INA180电流检测放大器监测输入电流可以让我们知道发射电路是否在工作以及负载情况。注意H桥的上下管驱动不能同时导通否则电源直接短路MOS管瞬间烧毁。所以MCU要配置为“互补输出带死区”的PWM模式确保有一小段时间上下管都是关闭的。2.3 无线充电接收板设计这是车上最复杂的一块板负责把磁能变回电能并安全高效地存储、使用。整流与滤波接收线圈感应到的是高频交流电先用4颗SB1045L肖特基二极管搭成全桥整流电路变成脉动直流再用电容滤波平滑。数控BUCK电路整流后的电压可能很高且不稳定不能直接给电容充电。我们用一个MOS管、电感和二极管搭建BUCK降压电路。关键是这个MOS管由STM32的PWM控制通过调节PWM的占空比就能精确控制输出电压或电流实现恒功率充电。理想二极管与保护为了防止超级电容的电倒灌回BUCK电路我们用LM7461加一颗MOS管搭了一个“理想二极管”导通压降比普通二极管小得多效率更高。超级电容组还用了BW6106保护芯片防止过充过放安全第一。多路电源管理电容电压变化范围大从0V到充满为了给STM32稳定供电先用一个降压芯片如TPS62120降到比3.3V稍低再用一个升压芯片如TPS61201稳到3.3V这样无论电容电压高低MCU都有电。小车主板需要12V我们用MT3608升压芯片来实现并且它的EN引脚受STM32控制充满电后才开启。3. 软件逻辑与核心代码解析硬件搭好了接下来就是给它注入“灵魂”。软件部分我们分三个模块来写。3.1 无线充电发射端程序发射端的任务很单纯产生一个固定频率的PWM波去驱动H桥。// 使用STM32CubeMX配置定时器产生互补PWM以TIM1为例 // 关键步骤 // 1. 选择时钟源设置预分频器和自动重载值得到需要的频率比如100kHz // 2. 配置通道1和通道2为“PWM Generation CHx”和“PWM Generation CHxN” // 3. 在“Parameter Settings”中设置“CH Polarity”和“CHN Polarity”并设置“Dead Time”死区时间非常重要 int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_TIM1_Init(); // 初始化PWM定时器 // 按键控制发射开始 while (1) { if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) GPIO_PIN_RESET) { HAL_Delay(50); // 消抖 if (HAL_GPIO_ReadPin(KEY_GPIO_Port, KEY_Pin) GPIO_PIN_RESET) { HAL_TIM_PWM_Start(htim1, TIM_CHANNEL_1); // 启动主通道PWM HAL_TIMEx_PWMN_Start(htim1, TIM_CHANNEL_1); // 启动互补通道PWM HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_SET); // 点亮LED指示 } } HAL_Delay(10); } }发射端程序相对简单核心是正确配置带死区的互补PWM。调试时可以用示波器测量H桥输出点的波形应该是幅值为电源电压、频率为你所设的方波。3.2 无线充电接收端程序接收端是软件的核心逻辑稍复杂主要实现恒功率充电和系统状态管理。// 主循环逻辑 int main(void) { // 初始化ADC、定时器、PWM、IO口等 System_Init(); while (1) { // 1. 实时采集数据 capacitor_voltage Get_Capacitor_Voltage(); // 通过ADC读取分压电阻电压 input_voltage Get_Input_Voltage(); // 读取整流后的电压 charging_current Get_Charging_Current(); // 通过INA180读取电流 // 2. 计算当前充电功率 current_power input_voltage * charging_current; // 3. 恒功率PID控制 // 目标功率是设定的值比如5W。将功率偏差送入PID控制器 pid_error target_power - current_power; buck_duty PID_Calculate(pid_error); // PID计算输出新的BUCK占空比 Set_Buck_Duty(buck_duty); // 调整BUCK电路的PWM占空比 // 4. 充电状态判断与通信 if (charging_current 1.0) { // 如果充电电流小于1mA认为充满 HAL_GPIO_WritePin(COMM_Pin_TO_Mainboard, GPIO_PIN_RESET); // 通知主板电已充满 if (HAL_GPIO_ReadPin(COMM_Pin_FROM_Mainboard) GPIO_PIN_SET) { // 收到主板反馈的高电平信号 Enable_12V_Output(); // 使能MT3608输出12V给主板 Enter_LowPower_Mode(); // 接收板自身进入低功耗模式 } } HAL_Delay(10); // 控制循环周期 } } // 一个简单的积分分离PID实现示例 float PID_Calculate(float error) { static float integral 0; float p_out, i_out, d_out, output; float kp 0.5, ki 0.01, kd 0.05; // PID参数需调试 p_out kp * error; // 积分分离误差大时不积分防止超调 if (fabs(error) 100) { integral error; } else { integral 0; } i_out ki * integral; // ... 微分项计算略 ... output p_out i_out d_out; // 限制输出在PWM占空比有效范围内比如0-1000 if (output 1000) output 1000; if (output 0) output 0; return output; }接收端的逻辑是一个典型的闭环控制采样-计算-PID调节-输出。调试重点在于PID参数的整定和充电状态判断的阈值设置。3.3 小车循迹控制程序小车控制程序跑在MSPM0L1306上核心是一个双环PID控制外环是位置环循迹偏差内环是速度环电机速度。// 定时器中断服务函数例如1ms中断一次 void TIM_IRQHandler(void) { // 1. 读取两个红外传感器的ADC值 sensor_left ADC_Read(LEFT_CHANNEL); sensor_right ADC_Read(RIGHT_CHANNEL); // 2. 计算循迹偏差 // 假设黑线在中间时左右传感器值相等偏差为0。 // 黑线偏左时左边传感器值变小偏差为负。 track_error sensor_right - sensor_left; // 3. 位置式PID计算转向控制量 turn_output Position_PID_Calculate(track_error); // 4. 设定电机基础速度并根据转向控制量调整左右轮速度 base_speed 500; // 基础PWM值 motor_left_target_speed base_speed turn_output; motor_right_target_speed base_speed - turn_output; // 5. 速度环PID这里简化实际需编码器反馈 // 根据目标速度与当前速度可设为固定值或编码器读取的偏差计算最终PWM pwm_left Incremental_PID_Calculate(motor_left_target_speed, current_speed_left); pwm_right Incremental_PID_Calculate(motor_right_target_speed, current_speed_right); // 6. 设置电机PWM和方向 Set_Motor_PWM(MOTOR_LEFT, pwm_left); Set_Motor_PWM(MOTOR_RIGHT, pwm_right); } // 主循环中检查无线接收板的信号 while (1) { // 等待接收板发来“充电完成”的低电平信号 if (HAL_GPIO_ReadPin(COMM_Pin_FROM_Receiver) GPIO_PIN_RESET) { HAL_Delay(100); // 延时去抖 if (HAL_GPIO_ReadPin(COMM_Pin_FROM_Receiver) GPIO_PIN_RESET) { // 确认信号有效回复高电平给接收板 HAL_GPIO_WritePin(COMM_Pin_TO_Receiver, GPIO_PIN_SET); // 开始执行循迹任务 Start_Tracking(); break; } } }循迹算法的关键是误差计算和PID参数调试。一开始可以只用P比例控制调一个合适的P值让小车能大致跟着线走再慢慢加入I积分和D微分来消除稳态误差和抑制震荡。4. 系统调试与组装心得代码写完、板子焊好最“激动人心”的调试环节就来了。按照以下步骤可以让你有条不紊地把系统调通。4.1 分模块调试无线充电系统单独调先别接小车主板。把发射板和接收板的线圈对准保持一定距离。用示波器或万用表交流档测量接收端整流桥前的线圈电压。关键步骤在代码里慢慢改变发射端PWM的频率比如从50kHz到200kHz步进观察接收端电压的变化。找到那个电压最大的频率点这就是LC电路的谐振频率在此频率下工作效率最高。把这个频率固定下来。接收板充电逻辑调接上超级电容注意极性。通过串口打印ADC采集到的电容电压、充电电流值确认采样电路和计算是否正确。调整PID参数让充电功率能稳定在你设定的值比如5W。观察电容电压上升是否平稳。小车循迹单独调先用电池或稳压电源直接给小车主板供电。把小车放在黑线上通过调试器或串口打印出两个红外传感器的ADC值确定黑线和白地的阈值。只调P参数先给一个较小的P值用手推着小车偏离黑线看它能不能自己回来。反应太慢就加大P来回震荡就减小P。调到一个快速且不震荡的值。我们的项目里P值最终用了3和-3对应左右轮。4.2 系统联调通信联调确保接收板在电容充满后能准确拉低通信线小车主板能检测到这个低电平并回复高电平接收板收到高电平后能开启12V输出。整体功能测试将小车放在发射线圈上上电。观察整个流程发射板工作-接收板充电-电容电压上升-充电电流变小-通信触发-小车启动并循迹。稳定性测试让小车多次重复运行观察有无偶尔跑偏、充电中断等情况。重点检查各连接线是否牢固电源电压是否稳定。4.3 机械组装与外壳调试成功后就可以组装了。我们把所有板子、电容都固定在小车底盘上。为了美观和安全还用Solidworks设计了一个简单的亚克力外壳把杂乱的线材盖住只露出传感器和线圈。外壳上记得给散热孔、走线孔预留位置。最后看着自己亲手打造的小车从无线充电座上“吃饱电”后稳稳地沿着黑线跑起来那种成就感是无与伦比的。这个项目涵盖了嵌入式系统设计的大部分环节MCU编程、电路设计、电源管理、闭环控制、通信协议是一个非常综合的学习案例。希望这篇详细的复盘能给你带来启发祝你也能做出自己满意的作品

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2415534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…