华南赛区一等奖项目技术说明与全国总决赛特邀申请

📅 2026/8/11 18:39:55
华南赛区一等奖项目技术说明与全国总决赛特邀申请
核心说明:主车完成了基于灰度视觉的赛道感知、双电机闭环速度控制、舵机转向及负压吸附控制并获得华南赛区一等奖。赛场因负压电源线脱落未能完成晋级另完成了基于磁编码器与 FOC 的无刷打靶备选方案探索但为保证赛期可靠性未装入最终比赛车。特邀申请陈述尊敬的卓老师及竞赛组委会您好我是国防科技大学第21届全国大学生智能汽车竞赛雁过留痕组参赛队员李夏阳。我们的队伍在华南赛区获得一等奖。比赛过程中负压电源线意外脱落关键执行功能失效最终未能取得进入全国总决赛的资格。这个结果让我非常遗憾也促使我重新审视整车工程中连接可靠性和故障闭环的重要性。作为军校学员我们每天需要完成较多训练、教育和课程任务。我主要利用晚间加班时间和休息时间完成竞赛研发包括视觉巡线、元素处理、双轮闭环、负压控制和整车调试。时间条件并不宽裕但我们仍完成了可参加正式比赛并获得赛区一等奖的整车方案。对军校学习训练安排的说明不是希望以客观困难代替技术评价而是希望组委会了解这套系统是在怎样的条件下完成以及我对这次比赛机会的珍惜。除最终比赛车方案外我还探索了区别于传统机构的无刷 FOC 打靶方案完成了包含磁编码器绝对位置反馈、位置 PID、三相 FOC 输出、保护逻辑以及支架、顶盖、激光笔支架在内的软硬件和机械设计。考虑到赛前集成时间与可靠性风险这一方案最终没有装入正式比赛车因此我不会把它表述为已经用于比赛或已取得命中成绩但它能够证明我们不仅在做参数调试也在尝试新的执行机构和控制方法。明年我们还将面临实习安排继续完整参加赛事的不确定性较大。我很不希望因为一次可明确复盘、可以彻底整改的突发连接故障错过本届全国总决赛的证明机会。恳请卓老师和组委会结合赛区一等奖成绩、现有代码与设计材料考虑给予我们特邀参赛或进一步技术核验的机会。我们愿意提交成绩证明、比赛视频、车辆与线束整改照片、完整工程代码及无刷方案台架材料并接受现场检查。若能获得机会我们将以整改后的可靠性方案和可核验的技术状态参赛用实际赛道表现证明车辆具备进入全国赛场的水平。感谢您审阅本报告。申请人李夏阳国防科技大学2026年8月摘要本报告面向第21届全国大学生智能汽车竞赛全国总决赛特邀评审系统说明国防科技大学雁过留痕组参赛车的总体设计、硬件组成、视觉算法、运动控制、赛道元素处理、负压执行机构、调试方法与赛场故障复盘并呈现一套最终未用于正式比赛但具有明确工程实现基础的无刷 FOC 打靶创新方案。报告中的技术参数均优先取自现有工程代码与设计文件缺少计时、命中率等原始记录的部分不作虚构。主车以 STC32G144K246 为核心系统时钟 96 MHz利用 MT9V03X 灰度摄像头采集 120×188 赛道图像通过环境灰度自适应阈值、最长白列与边界递推搜索获得左右边界及中心线结合前瞻点形成横向误差。转向采用位置式 PD驱动轮采用双路增量式 PI/PID依据舵机偏角估计转弯半径并进行左右轮差速分配同时融合编码器、IMU963RA 与 DL1B 测距信息对环岛、十字、斑马线、坡道及出界状态进行分层处理。负压执行机构采用两路 PWM 缓升控制并在停车或出界时回落至安全占空比。赛区比赛中车辆获得华南赛区一等奖说明整车方案已具备较强的完赛与竞争能力。未能晋级全国总决赛的直接原因并非算法无法完成赛道任务而是比赛过程中负压电源线脱落导致关键吸附功能失效。该问题暴露出连接器锁止、线束应力释放和赛前故障注入检查不足。报告据此提出电气、机械和流程三层整改方案。关键词智能汽车雁过留痕灰度视觉边界搜索差速控制负压吸附FOC磁编码器可靠性设计1 项目背景与特邀申请1.1 参赛背景本项目参加第21届全国大学生智能汽车竞赛雁过留痕组。参赛队来自国防科技大学主车在华南赛区获得一等奖。项目开发覆盖机械安装、电气连接、嵌入式软件、视觉算法、闭环控制、特殊元素处理、调参界面和可靠性验证体现了从功能实现到整车联调的完整工程链路。作为军校学员参赛队员日常需要完成训练、教育和正常课程任务可连续用于竞赛研发的整块时间较少。主要开发工作安排在晚间加班时间与休息时间完成。该客观约束使项目更强调模块化、快速验证和参数在线调整也限制了赛前对连接器、线束和极端故障场景的充分覆盖。此处说明并非为技术问题开脱而是对项目资源条件和工程取舍作如实交代。1.2 申请全国总决赛特邀的理由• 竞技水平依据主车已获得华南赛区一等奖核心视觉与闭环控制链路在正式赛事环境中得到检验。• 失利性质未能晋级的直接诱因是负压电源线脱落这一突发硬件连接故障而非车辆不具备完成赛道任务的能力。• 技术完整度现有代码包含图像感知、边界搜索、误差计算、元素状态机、双轮速度闭环、差速分配、负压控制与调参界面。• 创新探索除正式比赛方案外还进行了磁编码器绝对位置反馈与 FOC 无刷驱动的打靶机构探索并形成电控工程、硬件设计和三维结构文件。• 机会窗口下一学年存在实习安排本届赛事是继续验证方案、完成技术闭环的重要机会。申请原则 希望通过全国总决赛的同场测试证明实际水平接受组委会对代码、车辆、视频、赛区成绩及无刷方案完成度进行核验。2 任务理解与总体方案2.1 任务分解雁过留痕组的整车任务并非单一循迹而是由稳定高速行驶、赛道元素判别、负压吸附/留痕执行及安全停车共同组成。系统必须在有限算力和严格实时性下将感知、决策、控制和执行组织为确定性闭环。2.2 总体数据流摄像头完成一帧采集后置位完成标志主循环进入图像处理。依据底部参考区域计算环境亮度形成白区上、下阈值搜索最长白列并确定递推起点。逐行搜索左右边界统计丢线、拐点和直线性按元素状态执行补线再生成中心线。在前瞻区域计算位置误差按误差、坡道、环岛等状态选择目标速度。5 ms 周期中断读取编码器和陀螺仪执行转向 PD、双轮速度闭环和差速分配。输出电机、舵机和负压 PWM斑马线达到设定次数或检测到出界时令目标速度清零并降低负压输出。3 硬件系统设计3.1 主控与传感器3.2 驱动与执行驱动轮采用双路直流电机方案方向由 GPIO 控制PWM 频率配置为 17 kHz。转向采用舵机 PWM控制输出经最小值、最大值限幅。负压部分由两路 PWM 输出驱动软件设置初始/安全占空比并在启动一段时间后按固定步长缓升以减小电源冲击。从代码可见直行、弯道、环岛和坡道分别设置目标脉冲/速度参数说明电机、电源与车体吸附能力之间经过场地调试。值得注意的是最终比赛故障发生在负压电源线连接处表明功能设计已完成但系统可靠性设计没有与算法复杂度同步提升。3.3 电气可靠性要求• 所有高电流与关键电源连接采用带锁扣连接器禁止仅靠摩擦力或裸插针保持。• 负压电源线在连接器后设置线夹与应力释放保证振动和转向时拉力不直接作用于焊点/插头。• 主控采集负压母线电压或风机电流建立开路、掉线、欠压与堵转诊断。• 关键供电使用颜色、标签和防呆接口赛前按清单进行拉力、振动、满功率和急停检查。4 软件架构与实时任务4.1 主循环主循环以摄像头帧完成标志为触发条件。每帧依次执行 image_process() 与 Determine_Error()根据坡道、斑马线计数、出界、环岛和横向误差选择目标速度。调试开关打开时叠加 IPS200 菜单显示不改变核心处理顺序。负压控制在主循环中依据独立开关和启动时序执行缓升。4.2 5 ms 控制中断周期中断读取左右编码器必要时读取陀螺仪并积分随后调用 Normal_Control()。该函数依次完成转向误差控制、差速目标计算、左右速度闭环、PWM 限幅、电机输出和舵机输出。DL1B 测距以两个中断周期更新一次即约 10 ms坡道计时等状态也在同一确定性时基上推进。对应的编码器采样、IMU 积分与控制调用代码见附录D.2。5 赛道视觉感知算法5.1 环境自适应阈值系统并未使用单一固定二值化阈值而是在图像底部若干参考行内统计平均灰度 reference_point再分别乘以 WHITEMAXVALUE 与 WHITEMINVALUE 系数并限制在 BLACKPOINT 至 255 范围内形成白区判断的上、下参考值。这种方法可随场地照明、相机曝光和赛道反光发生整体变化降低固定阈值在明暗区域切换时造成的边界断裂。5.2 起点选择与边界递推图像宽度方向每隔约 5 列向上扫描寻找连续白区长度记录最长白列作为赛道内部的可靠种子。随后从底部向上逐行在上一行边界附近的 SEARCHRANGE 范围内搜索亮度突变分别得到 leftside[] 与 rightside[]。递推搜索将二维全图扫描转化为局部一维搜索适合资源受限的 8/16 位 MCU。5.3 丢线、拐点与中心线算法对每行左右边界有效性编码统计 lost_leftline、lost_rightline、null_left、null_right并检测左上、右上、左下、右下拐点。正常区段以左右边界中点生成中心线单边丢失时使用标准赛道宽度或斜率补线环岛和十字状态则调用专用补线模型。中心线经过前瞻选择后形成 poserror上一周期误差保存在 poserror_pre用于转向微分项。5.4 前瞻与误差代码中 look_ahead 初值为 30并设置一组非均匀 offset_weight。近处点对瞬时横向位置更敏感远处点反映道路趋势通过权重和前瞻点组合可在直道保持稳定、弯道提前转向。当前实现仍以离散参数为主后续可根据曲率、可信边界行数和速度在线调整前瞻距离。图像流水线与前瞻误差计算的关键实现见附录D.1。6 运动控制与速度规划6.1 转向控制转向采用位置式 PD 为主并保留非线性比例项和陀螺仪阻尼扩展u Kp·e Kp2·e·|e| Kd·(e-e_prev) - Kg·gyro_y。现用代码中 Kp 约为 7.5、Kd 约为 25非线性比例与陀螺仪项当前设为 0。输出由舵机中值减去控制量得到并在 DuojiMin 与 DuojiMax 之间限幅。该结构简洁、计算量小便于赛场快速调参。6.2 双轮速度闭环左右轮速度由编码器计数按轮周、编码器等效脉冲数和 8 ms 标定时间换算。控制器采用增量式 PIDΔu(k)Kp[e(k)-e(k-1)]Ki·e(k)Kd[e(k)-2e(k-1)e(k-2)]。当前参数 Kp10、Ki5.5、Kd0PWM 最终限制在 ±9000。增量式结构有利于在占空比基值上平滑修正并减少直接位置式积分项过大的风险。6.3 基于转弯半径的差速系统不是简单地给两轮相同目标速度而是根据舵机偏离中值的 duty_diff 估计转弯半径 R再结合轴距/轮距相关系数 kd1 对内、外轮目标进行非对称修正。直观上外轮目标速度高于内轮可减小轮胎横向滑移和推头使视觉误差与底盘实际转弯响应更一致。转向 PD、半径差速和双轮增量式 PID 代码见附录D.3、D.4。6.4 分状态速度规划7 特殊元素与安全状态处理7.1 环岛与十字环岛识别综合边界丢失、拐点、直线性和状态计时分别维护左环、右环及入环/出环补线参数。代码中 ring_flag、ring_clock、BigRing_flag 等变量用于推进环岛状态补线结构保存斜率 k、截距 b、历史参数和限幅避免单帧特征抖动直接改变路径。十字识别则通过四类拐点和丢线组合判断在交叉区域重建左右边界。7.2 斑马线与停车斑马线检测记录 zebra_flag 与 zebracount。达到设定通过次数 zebra_stop_count 后主循环将目标速度清零并把两路负压 PWM 回落到安全值。该逻辑把竞赛任务完成条件与动力/吸附安全状态联动避免停车后仍维持高功率。7.3 坡道、出界与盲区坡道状态结合距离/姿态与计时进行处理进入坡道后切换专用速度并在一定时间后推进状态。out_track_flag 触发时立即令目标速度为零同时降低负压输出。工程中还保留盲盒/目标、激光识别和出界计数等变量为进一步完善打靶和容错策略提供接口。8 负压吸附与执行机构8.1 软件控制策略负压模块使用两路 PWM 同步控制。系统设置 fuyaduty 目标值、fuyaduty_now 当前值和弯道目标值等参数启动达到一定时序后当前占空比按 50 的步长逐级增加并用蜂鸣器提示。关闭负压开关、斑马线停车或出界时两路 PWM 均回落至 500。缓升策略可以减小风机启动电流和电源压降避免主控复位。速度分状态、停车联动和负压缓升代码见附录D.5。8.2 赛场故障暴露的系统短板尽管软件具备缓升和安全回落比赛现场的负压电源线脱落仍使执行链路中断。这说明系统只对“控制命令”进行了管理却没有对“命令是否真正执行”进行闭环确认。负压系统应从开环 PWM 输出升级为带母线电压、风机电流或负压传感器反馈的状态闭环并把线束固定视为关键结构件而非装配细节。关键结论: 本次失利的技术价值在于明确了整车可靠性的最短板算法正确并不等于任务闭环执行机构的电气连接、反馈诊断和机械固定必须纳入系统设计。9 无刷 FOC 打靶创新探索9.1 方案定位与完成边界该方案是区别于传统执行机构的一套备选打靶设计目标是利用无刷电机的高响应、低磨损与精确位置控制能力实现快速瞄准或击发动作。现有材料包括 STC32G12K128 FOC 驱动工程、硬件设计文件 ProDoc_FOC_2026-04-19.epro2、驱动板资料以及支架、顶盖和激光笔支架的 STEP/SLDPRT 三维模型。因此它不是纯概念设想而是已经推进到电控、固件和机械接口并行设计阶段。为保证表述真实本报告不宣称该方案已经在正式比赛中完成命中也不将其写成最终比赛车配置。赛前基于整车可靠性、调试时间和系统集成风险团队最终未选用该方案其价值体现在技术探索深度、后续可验证性及相对传统方案的创新方向。9.2 控制原理驱动工程采用磁编码器 MENC15A 获取绝对转子位置并在高频中断中读取位置、计算位置误差、执行位置 PID再调用 foc_fast_output_stc() 计算三相输出。根据电机速度生成超前角 preact_angle_count用于转速相关的相位提前/弱磁控制最后通过中心对齐 PWM 更新三相桥臂占空比。若保护状态异常则将三相输出清零。上电读取零位参数若为默认值则执行电机相位检测和零位校准并将结果写入 Flash。磁编码器输出绝对机械角经极对数/偏置关系映射为电角度。位置目标与实际角度形成误差位置 PID 输出转矩/电压幅值指令。FOC 模块按电角度与幅值生成三相正弦调制量中心对齐 PWM 驱动逆变桥。根据速度调节超前角持续计算速度并执行堵转、编码器故障、过载或低电压保护。磁编码器位置误差、位置 PID、FOC 三相输出与保护逻辑见附录D.6。9.3 与传统打靶方案的差异9.4 工程创新点• 将通常用于连续旋转驱动的 FOC 与打靶位置任务结合以绝对磁编码器建立可重复的角度基准。• 位置环直接生成 FOC 幅值与方向减少传统多级机械传动带来的回差并支持主动制动。• 通过中心对齐三相 PWM 和转速相关超前角兼顾低速定位与高速响应。• 设计独立驱动板与 PWM 命令接口可与主车控制器解耦降低主控实时负担。• 同步设计支架、顶盖和激光笔支架使算法、电控与机械安装形成可落地的系统方案。9.5 未选用原因与后续验证FOC 打靶方案增加了三相功率级、磁编码器安装同轴度、零位校准、控制参数整定和电磁兼容等风险。在军校训练与教育安排占用大量时间、赛前集成窗口有限的情况下继续将其装车可能影响主车完赛可靠性因此最终选择成熟度更高的比赛方案。这一取舍符合赛事工程中的风险管理原则也说明创新方案尚需独立台架验证。10 系统调试、验证与结果说明10.1 调参体系工程包含 IPS200 菜单、按键输入、串口/Wi-Fi 波形接口以及摄像头图像叠线显示。菜单可观察编码器、元素标志、边界丢失、拐点、速度和 PID 参数并调整直道/弯道/环岛速度、转向 PD、负压占空比及图像阈值。该体系显著缩短了晚间有限调试时间内的“修改-烧录-观察”周期。10.2 建议的分层验证方法静态视觉固定车辆覆盖正常道、弯道、十字、环岛和斑马线图像检查边界与补线。单执行器悬空测试左右电机方向、编码器正负号、舵机中值/限位与负压缓升。低速闭环先只启用速度环再加入转向验证误差符号和 PWM 限幅。元素联调逐个开放状态机记录触发位置、状态迁移和退出条件。全程压力连续运行、电池低电量、线束振动、急停重启和多次发车。10.3 已知结果与未量化项能够确认的赛事结果是华南赛区一等奖能够从代码确认的是各核心模块已集成进主车工程。由于当前材料未提供正式计时表、完整录像、连续完赛次数、斑马线停车误差或打靶命中率本报告不填造数值。提交前宜补充赛区成绩证明、车辆照片、比赛视频、调试曲线和无刷台架视频以使特邀评审能够独立判断。\11 赛场故障复盘与整改11.1 事件描述在华南赛区比赛过程中负压电源线脱落导致负压执行系统失去正常供电车辆因此失去完成既定任务并争取全国总决赛资格的机会。该事件具有突发性但从工程责任看连接可靠性、状态反馈和赛前检查均应纳入系统设计不能仅归因于偶然。11.2 根因分析11.3 整改闭环• 结构整改插头锁止、线束应力释放、关键线缆柔性余量、与运动件保持安全距离。• 电气整改负压支路保险与电压/电流采样主控可识别掉线、堵转和欠压。• 软件整改负压建立超时、运行中压差消失、功率异常均触发蜂鸣/显示与限速策略。• 流程整改上场前执行目视、手拉、满功率、振动、急停、重启六项检查并签字复核。• 证据整改保存每次故障与修复后的台架数据、车辆视频和连接器照片。12 创新点、工程价值与后续计划12.1 主要创新与特点12.2 后续计划完成负压线束、反馈传感与故障诊断整改形成可验证的可靠性闭环。采集不同场地灰度分布优化阈值、前瞻和元素状态机的置信度判定。建立标准赛道测试表记录圈速、完赛率、停车误差和故障类型。独立完成无刷 FOC 打靶台架量化重复定位误差、动作周期、命中率和热稳定性。在不影响主车完赛率的前提下评估无刷方案重新集成。【附录】附录A 关键参数附录B 代码与设计证据索引附录C 关键代码摘录本附录摘录与报告技术论述直接对应的核心代码。为控制篇幅初始化、显示调试、注释块和重复分支以 /* … */ 标记省略变量名、函数名、控制公式与调用关系保持原工程写法。完整工程以随申请提交的源代码为准。C.1 图像处理流水线与前瞻误差来源project/mdk/image.cimage_process、Determine_Errorvoid image_process(void){get_white_reference_value();find_longest_white_col();search_boundary();find_inflection_point();lost_line();JUST_POINT(leftside,rightside);Left_justLINE_JUST(leftside,rightside,1);Right_justLINE_JUST(leftside,rightside,2);slope_recognize();if(slope_flag0){out_track_judge();zebra_crossing();laser_recognize();laser_process();ring_recognize();cross_recognize();}adding_line_process();How_lin();if(judge_lin0)line_follow(0);elseif(judge_lin%2!0)line_follow(1);elseline_follow(2);}void Determine_Error(void){uint8 i,count0;intsum0;for(ilook_ahead;ilook_ahead15;i){sumcenterline[i];count;}if(count0)ersum/count;if(angle_integral_flag1)ercenterline[40];poserror_preposerror;poserrorer-mid_line;}D.25ms 编码器与姿态控制任务 来源project/user/isr.cpit_handler1 void pit_handler1(void){encoder_data_dir_1encoder_get_count(ENCODER_DIR_1);encoder_data_dir_2-encoder_get_count(ENCODER_DIR_2);if(angle_integral_flag1){imu963ra_get_gyro();raw_gyro_yimu963ra_gyro_y;angle_integral_Y(float)raw_gyro_y/14.37f*0.005f;}Normal_Control();if(ring_clock1)ringtimes;elseringtimes0;/*DL1B 测距和坡道计时等周期任务省略*/}C.3转向 PD 与半径差速 来源project/mdk/control.cNormal_Control turn_outposerror*in_Pposerror*abs((float)poserror)*in_P2(poserror-poserror_pre)*in_D-raw_gyro_y*gyro_D;DuojiDutyDuojiMid-(int)turn_out;if(DuojiDutyDuojiMin)DuojiDutyDuojiMin;if(DuojiDutyDuojiMax)DuojiDutyDuojiMax;duty_diffDuojiMid-DuojiDuty;if(duty_diff!0){R0.15/(duty_diff*0.00125);kd10.14;if(duty_diff0){Goal_RGoal_Pulse*(1.0-kd1/R);Goal_LGoal_Pulse*(1.0diffxishu*kd1/R);}else{Goal_RGoal_Pulse*(1.0-diffxishu*kd1/R);Goal_LGoal_Pulse*(1.0kd1/R);}}Speed_Pid_L(Goal_L);Speed_Pid_R(Goal_R);Pwm_Limit();Go_motor(Pwm_L,Pwm_R);pwm_set_duty(Duoji,DuojiDuty);C.4双轮增量式 PID 与限幅 来源project/mdk/speed.cSpeed_Pid_L、Speed_Pid_R、Pwm_Limit void Speed_Pid_L(floatGoal_L){floatP,I,D;Error_LGoal_L-V_L;Pkp*(Error_L-Error_Lpre);Iki*Error_L;Dkd*(Error_L-2*Error_LpreError_LPpre);Pwm_L(int)(PID);Error_LPpreError_Lpre;Error_LpreError_L;}void Speed_Pid_R(floatGoal_R){floatP,I,D;Error_RGoal_R-V_R;Pkp*(Error_R-Error_Rpre);Iki*Error_R;Dkd*(Error_R-2*Error_RpreError_RPpre);PIDoutPID;if(PIDout9999)PIDout9999;if(PIDout-9999)PIDout-9999;Pwm_RPIDout;Error_RPpreError_Rpre;Error_RpreError_R;}void Pwm_Limit(void){if(Pwm_Lpwmmax)Pwm_Lpwmmax;if(Pwm_L-pwmmax)Pwm_L-pwmmax;if(Pwm_Rpwmmax)Pwm_Rpwmmax;if(Pwm_R-pwmmax)Pwm_R-pwmmax;}C.5分状态速度、停车与负压缓升 来源project/user/main.c主循环 image_process();Determine_Error();if(slope_flag1Goal_Pulse!0){Goal_PulseGoal_Pulse_slope;}elseif(zebracountzebra_stop_countGoal_Pulse!0){Goal_Pulse0;pwm_set_duty(fuya_1,500);pwm_set_duty(fuya_2,500);}elseif(out_track_flag1){Goal_Pulse0;pwm_set_duty(fuya_1,500);pwm_set_duty(fuya_2,500);}elseif(BigRing_flag1Goal_Pulse!0){Goal_PulseGoal_Pulse_huan;}elseif(abs(poserror)error_thresholdGoal_Pulse!0){Goal_PulseGoal_Pulse_wan;}elseif(Goal_Pulse!0){Goal_PulseGoal_Pulse_zhi;}if(gpio_get_level(SWITCH3_fuya)1clock2000){if(fuyaduty_nowfuyaduty)fuyaduty_now50;pwm_set_duty(fuya_1,fuyaduty_now);pwm_set_duty(fuya_2,fuyaduty_now);}C.6磁编码器位置环与 FOC 三相输出 来源FOC Project/user/isr.cProject/code/motor_control.c menc15a_get_absolute_data();error_raw(int16)(menc15a_absolute_data-target_raw);if(error_raw8192)error_raw-16384;elseif(error_raw-8192)error_raw16384;preact_angle_count90(((signedlong)func_abs(motor_speed_filter)*FOC_PREACT_ANGLE)13);Pid_Position(set_raw,error_raw,Pos_Pid);foc_fast_output_stc(menc15a_absolute_data,Pos_Pid.Out0? Pos_Pid.Out:-Pos_Pid.Out,Pos_Pid.Out0? preact_angle_count:-preact_angle_count);if(motor_protect_stateNO_PROTECT){pwm_center_duty_update(foc_output_data[0],foc_output_data[1],foc_output_data[2]);}else{foc_output_data[0]foc_output_data[1]foc_output_data[2]0;pwm_center_duty_update(0,0,0);}void Pid_Position(floatTarget,floatFeedback,PID*Pid){Pid-ErrTarget-Feedback;Pid-Err_IntPid-Err;Pid-OutPid-Kp*Pid-ErrPid-Ki*Pid-Err_IntPid-Kd*(Pid-Err-Pid-Err_last);Pid-Err_lastPid-Err;if(Pid-OutPid-Out_lim)Pid-OutPid-Out_lim;elseif(Pid-Out-Pid-Out_lim)Pid-Out-Pid-Out_lim;}