STM32 Foc开源算法,包括观测器和Foc method STM32F0系列FOC 源代码

STM32 Foc开源算法,包括观测器和Foc method STM32F0系列FOC 源代码

STM32 Foc开源算法,包括观测器和Foc method STM32F0系列FOC 源代码, 有单电阻采样和三电阻采样两种代码。 都是ST很经典算法,代码学习,无感算法观测器是开源代码,Foc method也是开源,不是库。

深夜调完电机准备收工,突然发现实验室角落积灰的STM32F0开发板。这玩意儿当年可是玩FOC的初代神器,今天咱们就扒一扒ST官方藏在GitHub暗处的FOC开源遗产——不带库的纯裸代码,单电阻三电阻玩法都有,观测器源码直接摊开给你看。

电流采样:单电阻的骚操作

单电阻方案最让人头秃的就是电流重构,ST的代码里藏着这样的玄机:

void ADC_Handler(void) { if(ADC_GetFlagStatus(ADC_FLAG_EOC)) { // 捕获三个PWM周期内的不同采样点 switch(sampling_phase) { case 0: currA = ADC_GetValue() * voltage_scale; break; case 1: currB = (ADC_GetValue() - currA) * voltage_scale; break; // ...其他相位处理 } // 相位计数器滚起来 sampling_phase = (sampling_phase + 1) % 6; } }

这段代码老司机一看就懂——通过PWM周期内不同时刻的采样拼凑电流波形。重点在case1里那个currB = ADC值减currA的操作,这其实是在做基尔霍夫电流定律的硬件级实现(Ia + Ib + Ic = 0)。注意这里的voltage_scale系数,实际调参时得拿着万用表校准,不然测出来的电流能飘到姥姥家。

三电阻的暴力美学

切到三电阻分支代码,画风突变:

void TIM1_UP_IRQHandler(void) { // PWM中点对齐模式触发三重采样 ADC_StartConversion(); while(!ADC_GetFlagStatus(ADC_FLAG_EOC)); // 死等ADC完成 currA_raw = ADC_GetValue(ADC_Channel_1); currB_raw = ADC_GetValue(ADC_Channel_2); currC_raw = ADC_GetValue(ADC_Channel_3); // 直接三相全采,就是这么豪横 Clarke_Transform(currA_raw, currB_raw, currC_raw, &Ialpha, &Ibeta); }

三电阻方案简单粗暴,但ADC时序要跟PWM严格同步。注意那个while死等——在F030这种低端芯片上敢这么玩,说明ST的工程师对中断响应时间掐得贼准。实测下来这个循环最多吃3个时钟周期,刚好卡在ADC转换完成后的时间窗里。

观测器里的黑魔法

开源观测器代码里有段神仙操作:

void Observer_Update(float Ialpha, float Ibeta, float speed_est) { // 反向电动势估算 float Ealpha = -Lq * Ibeta * speed_est; float Ebeta = Ld * Ialpha * speed_est; // 滑动模式观测器 float Zalpha = Kslide * sign(Ialpha_est - Ialpha); float Zbeta = Kslide * sign(Ibeta_est - Ibeta); // 角度估算 theta_est = atan2f(Ebeta - Zbeta, Ealpha - Zalpha); }

这里混合了滑模观测器和反电动势估算,Kslide参数调大了电机啸叫,调小了角度抖成帕金森。当年在实验室调这个参数,电机转起来像在跳踢踏舞。特别要注意atan2f的象限处理,ST用了C库函数而不是查表法,说明在F0系列上FPU性能够用。

FOC主循环的节奏感

核心控制代码出乎意料地简洁:

void FOC_Loop(void) { static uint32_t last_tick = 0; if(HAL_GetTick() - last_tick >= 100) { // 10kHz控制频率 Get_Phase_Currents(); Clarke_Park_Transform(); PI_Regulator_Update(); Inverse_Park_Transform(); SVM_Generate(); last_tick = HAL_GetTick(); } }

这个100微妙定时看起来人畜无害,实则暗藏杀机。实测发现用HAL_GetTick()做高精度定时就是个坑,后来我们全改成TIM6硬件定时触发。Park变换里有个细节:ST把角度补偿值硬编码为PI调节器输出量的1/4,这招在突加载时能防角度跑飞,但文档里压根没提。

这套代码最骚的是svm_generate.c里的死区补偿算法:

void DeadTime_Compensation(float *Ualpha, float *Ubeta) { float deadtime_voltage = DEADTIME_US * BUS_VOLTAGE / PWM_PERIOD; if(*Ualpha > 0) *Ualpha -= deadtime_voltage; else *Ualpha += deadtime_voltage; // Beta轴同理... }

用BUS电压直接算死区压降,比那些查表法高到不知哪里去了。但DEADTIME_US这个参数得拿示波器抓波形实测,手册给的推荐值就是个笑话——不同型号MOS管差异能到200ns以上。

这堆代码现在看可能有点过时,但作为FOC入门教材依然能打。GitHub仓库里还有份2014年的pdf文档,第23页有个电机参数填写表格,其中"Rs"标着"0.5Ω",结果我们实测0.38Ω的电机填进去照样跑,ST的鲁棒性设计确实有点东西。最后说句良心话,这套开源方案比现在CubeMX生成的FOC库有意思多了,至少你能看见PID参数是怎么把电机玩出花的。

Read more

【配置后的使用】Git从 0 到 1 全指南【万字保姆级教程】

【配置后的使用】Git从 0 到 1 全指南【万字保姆级教程】

🌈 个人主页:十二月的猫-ZEEKLOG博客 🔥 系列专栏: 🏀各种软件安装与配置_十二月的猫的博客-ZEEKLOG博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光  目录 1. 前言 2. 获取本地仓库 3.Git的基本指令 3.1 git log查看提交日志 3.2 git reset 版本回退 3.3 添加文件至忽略列表 3.4 必记的Git指令 4. Git中的分支 4.1 分支的基本指令 4.2 如何解决分支冲突 4.3 不同分支的作用和使用原则 5. Git的远程仓库 5.1 进入Gitee并新建仓库 5.2 填入仓库基本信息 5.3

By Ne0inhk
【开源】多平台自媒体发布工具MediaPublishPlatform:一键发布到小红书、抖音、Tiktok等9大平台

【开源】多平台自媒体发布工具MediaPublishPlatform:一键发布到小红书、抖音、Tiktok等9大平台

🚀 解放双手!开源多平台自媒体发布工具MediaPublishPlatform:一键发布到小红书、抖音、Tiktok等9大平台 * ✨ 前言 * 🔥 项目简介 * 🎯 核心功能亮点 * 1. 📱 九大平台全覆盖 * 2. ⚡ 一键批量发布 * 3. ⏰ 智能定时发布 * 4. 🔐 统一账号管理 * 5. 📊 发布记录追踪 * 🎨 功能演示 * 管理界面 * 平台发布效果展示 * 🛠️ 技术栈解析 * 后端技术 * 前端技术 * 为什么选择Playwright? * 🚀 快速开始 * 环境要求 * 5分钟快速部署 * 💡 技术实现亮点 * 1. 统一登录与验证系统 * 2. 多平台统一上传架构 * 3. 灵活的配置系统 * 📈 项目优势对比 * 🎯 适用场景 * 1. 个人自媒体创作者 * 2. 短视频团队 * 3. 跨境电商运营 * 4. 开发者学习 * 🔧 API接口丰富 * 🚢 部署方案 * 方案一:本地开发(推

By Ne0inhk
如何将代码轻松上传到 Gitee?Git 使用全攻略!

如何将代码轻松上传到 Gitee?Git 使用全攻略!

在开发过程中,代码托管平台是每个开发者的必备工具。无论你是刚接触版本控制的新手,还是已经拥有多项目管理经验的程序员,掌握如何将代码上传到 Gitee 或 GitHub 都是必不可少的技能。 今天,我将带你一步步了解 如何将项目上传到 Gitee,并且在过程中顺便深入解析 Git、Gitee 和 GitHub 的关系,让你在使用这些工具时不再迷茫。 一、准备工作:Git 基础知识 首先,我们需要知道 Git 是什么,它是如何与 Gitee 和 GitHub 配合使用的。 1.1 什么是 Git? Git 是一款开源的分布式版本控制工具,旨在帮助程序员管理代码历史、团队协作以及代码合并。无论你是一个人开发项目,还是和团队一起协作,Git 都能帮助你: * 跟踪代码的更改 * 回退到任何历史版本 * 合并团队成员的修改 1.2

By Ne0inhk
开源C2框架AdaptixC2安装与使用教程

开源C2框架AdaptixC2安装与使用教程

⚠️ 重要声明 法律与道德准则 1. 授权测试原则:本文所述技术仅可在拥有明确书面授权且完全控制的网络环境中使用。 2. 严禁违法行为:未经授权对任何计算机系统进行扫描、渗透或控制均属违法行为。 3. 推荐使用场景:建议仅在隔离的实验室环境中用于安全研究与教学目的。 4. 责任界定:任何技术滥用行为所产生的全部法律及道德后果,均由使用者自行承担。 软件安全规范 * 源码安全原则:为保障透明与安全,本文不提供任何预编译二进制文件。所有程序必须从项目官方源码仓库自行编译。 * 官方获取渠道:请仅从项目GitHub官方仓库获取源码。 * 第三方风险警示:任何非官方渠道提供的"免编译版"、“一键安装包”、"破解版"均可能被植入恶意代码,请勿下载使用。 文章目录 * ⚠️ 重要声明 * 法律与道德准则 * 软件安全规范 * 一、安装与配置 * 1、下载项目源代码 * 2、安装与编译 * 方法一:使用官方脚本进行安装 * 方法二:手动安装 * 1.安装依赖

By Ne0inhk