当前位置: 首页 > article >正文

FOC开环速度控制

DengFOC开环无刷电机控制代码完整解读这是灯哥开源的纯手写ESP32无刷电机开环FOC控制代码不依赖任何第三方FOC库仅使用ESP32原生LED PWM外设实现三相PWM输出是学习FOC原理的绝佳入门代码。一、完整IO配置清单核心问题代码中总共使用了4个GPIO引脚全部配置为输出模式具体如下引脚号功能定义工作模式详细配置GPIO12电机驱动使能引脚数字输出初始电平HIGH高电平使能V4版本电机驱动板GPIO32PWM A相输出LED PWM输出绑定通道0频率30kHz8位分辨率0-255GPIO33PWM B相输出LED PWM输出绑定通道1频率30kHz8位分辨率0-255GPIO25PWM C相输出LED PWM输出绑定通道2频率30kHz8位分辨率0-255IO配置关键说明30kHz PWM频率选择这个频率是为了完全避开人耳听觉范围20Hz-20kHz消除电机运行时的高频啸叫声8位分辨率对应占空比范围0-255对于开环FOC控制已经足够同时能保证30kHz的高频率输出GPIO12使能逻辑DengFOC V4驱动板采用高电平使能低电平会切断电机电源ESP32 LED PWM特性最多支持16个独立PWM通道可任意映射到GPIO引脚非常适合多相电机控制二、代码整体结构与核心逻辑1. 全局变量与宏定义// 三相PWM输出引脚定义intpwmA32;intpwmB33;intpwmC25;// 数值约束宏替代Arduino原生constrain函数#define_constrain(amt,low,high)((amt)(low)?(low):((amt)(high)?(high):(amt)))// 系统参数floatvoltage_power_supply12.6;// 电源电压3S锂电池满电电压floatshaft_angle0;// 电机机械角度开环积分得到floatopen_loop_timestamp0;// 上一次循环的时间戳floatzero_electric_angle0;// 电角度零点偏移开环时无需校准2. 初始化函数setup()voidsetup(){Serial.begin(115200);// 串口初始化用于调试输出// 电机驱动使能pinMode(12,OUTPUT);digitalWrite(12,HIGH);// 开启电机驱动电源// PWM引脚模式设置pinMode(pwmA,OUTPUT);pinMode(pwmB,OUTPUT);pinMode(pwmC,OUTPUT);// LED PWM控制器配置ledcSetup(0,30000,8);// 通道030kHz8位分辨率ledcSetup(1,30000,8);// 通道130kHz8位分辨率ledcSetup(2,30000,8);// 通道230kHz8位分辨率// 将PWM引脚绑定到对应的LED PWM通道ledcAttachPin(pwmA,0);ledcAttachPin(pwmB,1);ledcAttachPin(pwmC,2);Serial.println(完成PWM初始化设置);delay(3000);// 3秒延时方便观察初始化完成}3. 核心数学辅助函数// 机械角度转换为电角度// 电角度 机械角度 × 极对数float_electricalAngle(floatshaft_angle,intpole_pairs){return(shaft_angle*pole_pairs);}// 将任意角度归一化到 [0, 2π] 范围// 解决角度溢出和负数问题float_normalizeAngle(floatangle){floatafmod(angle,2*PI);returna0?a:(a2*PI);}4. PWM输出设置函数voidsetPwm(floatUa,floatUb,floatUc){// 将三相电压转换为占空比0-1// 占空比 相电压 / 电源电压dc_a_constrain(Ua/voltage_power_supply,0.0f,1.0f);dc_b_constrain(Ub/voltage_power_supply,0.0f,1.0f);dc_c_constrain(Uc/voltage_power_supply,0.0f,1.0f);// 写入PWM寄存器8位分辨率对应0-255ledcWrite(0,dc_a*255);ledcWrite(1,dc_b*255);ledcWrite(2,dc_c*255);}5. FOC核心变换函数voidsetPhaseVoltage(floatUq,floatUd,floatangle_el){// 电角度归一化加上零点偏移angle_el_normalizeAngle(angle_elzero_electric_angle);// 帕克逆变换d-q坐标系 → α-β坐标系// 开环控制时Ud0只需要Uq分量Ualpha-Uq*sin(angle_el);UbetaUq*cos(angle_el);// 克拉克逆变换α-β坐标系 → 三相静止坐标系// 这里使用了中心对齐PWM的简化计算加上电源电压的一半作为直流偏置UaUalphavoltage_power_supply/2;Ub(sqrt(3)*Ubeta-Ualpha)/2voltage_power_supply/2;Uc(-Ualpha-sqrt(3)*Ubeta)/2voltage_power_supply/2;// 设置三相PWM输出setPwm(Ua,Ub,Uc);}6. 开环速度控制函数floatvelocityOpenloop(floattarget_velocity){// 获取当前系统时间微秒unsignedlongnow_usmicros();// 计算两次循环之间的时间间隔秒floatTs(now_us-open_loop_timestamp)*1e-6f;// 时间戳溢出保护micros()约70分钟溢出一次if(Ts0||Ts0.5f)Ts1e-3f;// 开环角度积分通过目标速度和时间间隔计算当前机械角度// 这是开环控制的核心没有编码器反馈纯靠时间积分估算角度shaft_angle_normalizeAngle(shaft_angletarget_velocity*Ts);// 设置q轴电压决定输出力矩// 最大安全值为 voltage_power_supply/2超过会导致电压限幅失真floatUqvoltage_power_supply/3;// 计算并输出三相电压// 极对数为7对应DengFOC配套的2208电机setPhaseVoltage(Uq,0,_electricalAngle(shaft_angle,7));// 更新时间戳open_loop_timestampnow_us;returnUq;}7. 主循环函数voidloop(){// 以5rad/s的角速度开环运行// 1rad/s ≈ 9.55rpm5rad/s ≈ 47.75rpm机械转速velocityOpenloop(5);}三、代码关键特性与注意事项纯手写无库依赖代码不依赖SimpleFOC等任何第三方库所有FOC算法都由基础数学运算实现非常适合学习原理开环控制特性不需要编码器或霍尔传感器低速力矩较小高速容易丢步适合入门学习和简单应用可修改参数voltage_power_supply根据实际电源电压修改如12V电源改为12.0pole_pairs根据电机极对数修改代码中为7对应2208电机Uq调整输出力矩最大不超过voltage_power_supply/2target_velocity修改电机目标转速单位rad/s硬件兼容性仅在DengFOC V4开发板上测试过其他ESP32开发板需要根据实际引脚定义修改需要我帮你把这段代码改成支持正反转切换和串口调速的版本吗

相关文章:

FOC开环速度控制

DengFOC开环无刷电机控制代码完整解读 这是灯哥开源的纯手写ESP32无刷电机开环FOC控制代码,不依赖任何第三方FOC库,仅使用ESP32原生LED PWM外设实现三相PWM输出,是学习FOC原理的绝佳入门代码。 一、完整IO配置清单(核心问题&#…...

解密WeChatMsg:如何重塑你的数字记忆管理方式

解密WeChatMsg:如何重塑你的数字记忆管理方式 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …...

如何高效实现视频超分辨率?Video2X实战深度解析

如何高效实现视频超分辨率?Video2X实战深度解析 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/video2x …...

实测 Taotoken 多模型聚合服务的响应延迟与稳定性观感

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 实测 Taotoken 多模型聚合服务的响应延迟与稳定性观感 作为一名需要频繁调用大模型 API 的开发者,服务的响应速度和稳定…...

Windows驱动管理终极指南:DriverStore Explorer让你的系统更流畅

Windows驱动管理终极指南:DriverStore Explorer让你的系统更流畅 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 在Windows系统使用过程中,你是否遇到过驱动安装…...

Windows Cleaner:5个简单步骤解决C盘爆满问题的免费工具

Windows Cleaner:5个简单步骤解决C盘爆满问题的免费工具 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 你是否曾因电脑C盘变红而焦虑?Win…...

Royal TSX中文汉化包:让远程管理工具说中文的完美解决方案

Royal TSX中文汉化包:让远程管理工具说中文的完美解决方案 【免费下载链接】Royal_TSX_Chinese_Language_Pack Royal_TSX的简体中文汉化包 项目地址: https://gitcode.com/gh_mirrors/ro/Royal_TSX_Chinese_Language_Pack 你是否曾因为Royal TSX的英文界面而…...

从一次失败的MS08-067攻击说起:深入理解Metasploit中Exploit、Payload与Session的协作机制

从一次失败的MS08-067攻击说起:深入理解Metasploit中Exploit、Payload与Session的协作机制 当你看到控制台输出"Exploit completed, but no session was created"时,是否曾感到困惑?这就像成功打开了保险箱却发现里面空空如也。本文…...

PremSQL:完全本地化部署的Text-to-SQL数据库RAG解决方案实战指南

1. PremSQL项目概述:一个完全本地的数据库RAG解决方案如果你正在寻找一个能够让你用自然语言直接与数据库对话,同时又对数据隐私和安全有极高要求的工具,那么PremSQL很可能就是你需要的那个答案。作为一个在数据工程和AI应用领域摸爬滚打了十…...

FreeRTOS项目踩坑实录:我的低功耗设计是如何被‘空闲任务’和‘Tickless模式’拯救的

FreeRTOS低功耗实战:从STOP模式异常到Tickless模式优化 记得第一次在STM32上尝试FreeRTOS低功耗设计时,我信心满满地启用了STOP模式,结果设备唤醒后直接卡死。屏幕上的日志仿佛在嘲笑我的无知——原来RTOS的低功耗远不是简单调用HAL_PWR_Ente…...

别再只盯着机械雷达了!聊聊MEMS、相控阵这些固态激光雷达到底强在哪

固态激光雷达技术革命:MEMS与相控阵如何重塑自动驾驶感知格局 当Waymo第五代自动驾驶系统将MEMS激光雷达成本压缩至7500美元时,行业终于意识到固态化浪潮已不可逆转。传统机械式激光雷达的旋转部件正如内燃机之于电动车,正在经历一场静默但彻…...

初创团队如何利用Taotoken的Token Plan有效控制AI开发成本

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创团队如何利用Taotoken的Token Plan有效控制AI开发成本 对于预算敏感的初创团队而言,将大模型能力集成到产品中是加…...

告别手绘低效:Draw.io Mermaid插件的代码驱动绘图革命

告别手绘低效:Draw.io Mermaid插件的代码驱动绘图革命 【免费下载链接】drawio_mermaid_plugin Mermaid plugin for drawio desktop 项目地址: https://gitcode.com/gh_mirrors/dr/drawio_mermaid_plugin 在技术文档创作中,绘图往往是效率瓶颈——…...

上海AI Lab:真实场景虚拟细胞模型基准评测

摘要 虚拟细胞模型旨在通过计算预测细胞对各类扰动的响应,已成为药物研发与精准医疗的前沿手段。但当前研究存在明显缺口:各类模型在标准基准测试中表现优异,但其预测结果在实际应用中的生物学意义尚不明确。这主要源于现有评估方案的缺陷——评估设置过度简化、流程不统一…...

告别手动配置!用vcpkg一键安装VTK到Visual Studio项目(C++包管理器实战)

现代C开发革命:用vcpkg极速部署VTK可视化项目 在C开发领域,可视化工具包VTK一直是医学影像、科学计算和工程仿真领域的黄金标准。但传统的手动编译配置过程堪称"开发者的噩梦"——需要处理数十个依赖项、解决版本冲突、配置复杂的编译选项。我…...

3分钟解锁网易云音乐灰色歌曲:UnblockNeteaseMusic实战指南

3分钟解锁网易云音乐灰色歌曲:UnblockNeteaseMusic实战指南 【免费下载链接】UnblockNeteaseMusic Revive unavailable songs for Netease Cloud Music 项目地址: https://gitcode.com/gh_mirrors/un/UnblockNeteaseMusic 还在为网易云音乐里那些灰色的、无法…...

网盘直链下载助手终极指南:免费解锁九大网盘高速下载

网盘直链下载助手终极指南:免费解锁九大网盘高速下载 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云…...

Windows平台Android开发终极指南:一站式ADB驱动智能安装解决方案

Windows平台Android开发终极指南:一站式ADB驱动智能安装解决方案 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitcode.com/gh_mir…...

douyin-downloader抖音下载器:5大核心功能解密与实战指南

douyin-downloader抖音下载器:5大核心功能解密与实战指南 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…...

SpringBoot项目里LocalDateTime传参总报错?一个配置搞定前后端日期格式统一(含表单提交场景)

SpringBoot项目中LocalDateTime传参的终极解决方案:一网打尽所有日期格式问题 当你信心满满地在SpringBoot项目中配置好Jackson的日期格式化,以为从此可以高枕无忧时,前端同事突然告诉你:"这个表单提交又报错了!&…...

别再只会用多边形了!Maya NURBS挤出命令的三种玩法,轻松搞定复杂曲面建模

解锁Maya NURBS挤出命令的隐藏潜力:从基础到高阶的曲面建模实战 在三维建模领域,NURBS(非均匀有理B样条)技术一直是创建精确曲面的黄金标准。许多设计师在掌握了多边形建模后,面对NURBS工具时却感到无从下手。实际上&a…...

对话引擎实战:基于状态机与规则引擎构建智能对话系统

1. 项目概述:一个对话引擎的诞生最近在社区里看到不少朋友在讨论如何构建自己的对话系统,从简单的客服机器人到复杂的多轮交互应用,需求五花八门。恰好,我前段时间深度研究并实践了Rubonnek/dialogue-engine这个项目,它…...

使用 Taotoken 后,在 Ubuntu 上开发 AI 应用的可观测性得到显著提升

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用 Taotoken 后,在 Ubuntu 上开发 AI 应用的可观测性得到显著提升 在 Ubuntu 环境下进行 AI 应用开发时,…...

golembot:在聊天平台集成AI编程助手的框架设计与实战

1. 项目概述与核心价值 如果你和我一样,经常在 Slack、Discord 或者飞书这些团队协作工具里讨论技术问题,或者希望有一个能随时调用的 AI 编程助手,那么 golembot 这个项目绝对值得你花时间研究一下。简单来说,它是一个能让你在…...

Go语言实现LLaMA推理:从零构建本地大模型引擎

1. 项目概述:用Go语言实现LLaMA推理的野心与实践如果你是一名Golang开发者,同时对大语言模型(LLM)的运行原理和本地部署充满好奇,那么你很可能和我一样,曾对那个用C写成的、性能卓越但门槛不低的llama.cpp项…...

Neovim集成GitHub Copilot:gp.nvim插件深度配置与实战指南

1. 项目概述:一个为Neovim量身打造的GitHub Copilot客户端如果你和我一样,是个重度Neovim用户,同时又对GitHub Copilot这类AI编程助手带来的效率提升欲罢不能,那你肯定也经历过一段纠结的时光。一边是VSCode里Copilot丝滑的代码补…...

免费解锁B站4K大会员视频下载:三步完成离线观看的终极指南

免费解锁B站4K大会员视频下载:三步完成离线观看的终极指南 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站大会员…...

3分钟完成Windows和Office激活的终极指南:KMS_VL_ALL_AIO智能脚本

3分钟完成Windows和Office激活的终极指南:KMS_VL_ALL_AIO智能脚本 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统激活而烦恼吗?KMS_VL_ALL_AIO是一款开…...

【Linux】从源码到应用:手把手编译部署 Tcl/Tk 8.6.10

1. 为什么需要手动编译Tcl/Tk? 很多Linux发行版自带了Tcl/Tk的软件包,但版本往往比较老旧。我在维护一个老项目时就遇到过这种情况——系统自带的Tcl 8.5缺少我们需要的几个关键特性,导致程序频繁崩溃。更麻烦的是,直接使用包管理…...

3分钟搞定编码难题:GBKtoUTF-8编码转换工具让文件乱码成为历史

3分钟搞定编码难题:GBKtoUTF-8编码转换工具让文件乱码成为历史 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 当你在Windows系统创建的文档,在Mac或Linux上打…...