60v5g无刷电机矢量控制器_完成一个最小FOC矢量控制系统所需的基本模块和功能配置...
当我们读懂 FOC 矢量控制的基本原理之后,便迫不及待的想动手尝试,去实现一个矢量控制系统,让电机先转起来,有一个直观的感受。
因此,我们需要设计实现一个矢量控制的最小系统,具备矢量控制的基本功能,满足电机矢量运行的基本条件。
首先,看一下矢量控制的基本架构:
如上图所描述,矢量控制系统包括实时电流的采集、clarke 变换、park 变换、SVPWM 、实时角度的反馈和计算以及电流环和速度环等。满足最小条件的矢量控制运行,可以不加速度环,只实现电流环,当电流环调试成功之后,再加速度环,以及后期的位置环。
因此一个最小的 FOC 矢量控制系统包含以下必要的几部分功能模块:
- ADC 电流采集
- 坐标变换与 SVPWM
- 位置估算,霍尔、编码器或者状态观测器
- 电流环PI控制
ADC 模块用于电流的采样,因为要根据合成矢量所在扇区,灵活的配置采样通道与采样点,所以 ADC 通常配置为注入通道模式,它可以打断规则通道的采样,优先采集注入通道。
以常用芯片意法半导体的 STM32 为例,ADC 的触发模式常常设置为 PWM 定时器的 CH4 触发,再根据桥臂的打开状态,配合电流的上升和稳定时间,准确的计算采样点的时刻,进行有效的采样。
坐标变换可以采用全浮点实现,也可以采用标幺化处理,以 Q15 格式进行运算,三角函数可以采用查表实现,减少运算复杂度,节省运算时间。
SVPWM 的实现一般涉及到硬件 PWM 模块的配置,矢量合成扇区的判断以及作用时间的计算等,常采用 STM32 的两个高级定时器 TIM1 和 TIM8 实现。高级定时器相对于通用定时器添加了可编程死区、重复计数器以及刹车等功能。
因为要产生互补对称的方波, PWM 定时器一般设置为中央对齐模式,且需要加入一定时间的死区,防止同一桥臂上的上下两个 MOS 管同时导通,造成系统短路。
位置估算可以采用有感实现,常见的霍尔传感器与光电编码器,当然也可以不采用传感器,使用状态观测器估计系统的位置以及速度计算等。本着由简到难的原则,建议先从有感入手,先使用带霍尔或者编码器的无刷电机,实现位置的反馈和计算。
霍尔接口可以使用 STM32 的 TIM2-TIM5 通用定时器实现,三路霍尔接口接入定时器的三个通道,并打开定时器的异或功能,选择双边沿触发模式,这样,可以细分到 60° 扇区,只要有霍尔变化,就会触发定时器。
之后根据霍尔的状态去判断旋转的方向,计算霍尔转过 60° 扇区的时间得出角速度,并在 FOC 核心算法中执行细分角度的插值计算,得到实时估算的转子位置。
STM32 也支持常见的增量式正交编码器,采用编码器代替霍尔的区间位置估算,计算更准确。速度的计算可以采用常见的 M/T 法实现。
电机启动时,可以通过霍尔传感器获得转子的位置信息,虽然这个误差为±30°,直接给电流启动是没有问题的。也有的方案中,先给方波,再切到FOC。如果是编码器,可以给一个角度为 -90° 的电压矢量进行预定位即 d 轴为 0,q轴给一个值;或者给一个角度为0的电压矢量,q轴给0,d轴给一个值,由于磁场力的作用,转子最终会转到与给定矢量相同的位置。
实现电流环的PI控制器,给定 q轴电流,经过PI控制器调节,输出调节量,经过坐标变换后,送到 SVPWM 模块,驱动电机的三相。
最后实现 FOC 矢量控制两个大的任务模块,一个是 FOC 核心算法,这个核心算法需要在每个 FOC 执行周期中执行一次,一般放到 ADC 中断中执行;另外一个任务模块负责状态机的轮询和系统保护,这个模块通常放在系统滴答定时器中断中。
完成以上模块基本上可以实现一个 FOC 的最小控制系统,当然为了调试方便,可以配置 DAC 功能、USART 功能、CAN 功能等等。
60v5g无刷电机矢量控制器_完成一个最小FOC矢量控制系统所需的基本模块和功能配置...相关推荐
- laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?
安全,应该说是人们生活中最"硬核"的刚需.很多安全设备平日里几乎是"透明"的,大家感觉不到它们的存在,而一旦遇到事儿,它们却必须能够派上用场,颇有些" ...
- python把文字矢量化_如何将点阵汉字矢量化 | indienova
那么是不是点阵汉字就已经退出历史舞台了呢?并没有.现在街上能常常见到的简易 LED 屏,很多都还是用的点阵汉字.很多工控或者简易屏幕上,也都还在使用点阵汉字,这是因为同矢量字体相比,点阵汉字占用的空间 ...
- gossip 区块链_源代码: 一个最小化的区块链系统
近期有个国内著名技术协会的约稿,正好向技术圈分享一下我对区块链系统的拙见.我发现一件有趣的事情,即使是有计算机背景,懂编程的同学,都也不怎么清楚区块链到底是怎么回事.今天这里,我打算用计算机语言和大家 ...
- python数据统计 矢量图_用python中的矢量化解决方案计算max draw down
Maximum Drawdown是量化金融中常用的一种风险度量,用于评估所经历的最大负收益. 最近,我变得不耐烦的时间来计算最大下降使用我的循环方法.def max_dd_loop(returns): ...
- mysql触发器中访问mssql数据表_[数据库]一个利用触发器(trigger)实现数据库表的审计功能(audit)的例子--针对ms sql实现...
首先建立数据库Test,建立两个表,我们命名为grades和audit,利用audit实现对grades的审计功能,其中grades用于存放学生的成绩,包括"sdudentID,course ...
- 一个控制器怎么转发到另外一个控制器_【科普】整车控制器硬件篇
特别鸣谢!电器系统总监Z工为本文审稿并提出宝贵的修改建议!! 最近一起做仿真的同事[沈小光]有一个好消息,由于电控部门人手紧缺,需要调用优秀的[沈小光]过去帮忙.一听到这个消息的[沈小光]开心得想起飞 ...
- 新月音标_又一个新月?
新月音标 I seriously have no idea where the time goes, I want it to slow down- I want to slow down, and ...
- 安装 PyTorch C++ API libtorch 及一个最小例子
安装 PyTorch C++ API libtorch 及一个最小例子 翻译自:https://pytorch.org/cppdocs/installing.html 我们提供依赖 PyTorch 所 ...
- 矢量归一化_关于LRL矢量的一点分析
[1].Laplace-Runge-lenz矢量 最早接触LRL矢量是在高中的物竞课上,在学习天体物理时老师提到过一个Kepler问题一般有三个守恒量:能量,角动量和LRL(Laplace-Runge ...
最新文章
- 实施工程师常用linux命令,009Linux管理日常使用的基本命令
- redis——通过redis实现服务器崩溃等数据恢复
- Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
- 利用Delphi编写Socket通信程序
- 天壤联合创始人韩定一:大模型+小样本数据,AI驱动金融数字化转型新范式|量子位·视点分享回顾...
- spring-jpa中mappedby的作用
- DP 动态规划(一) ——背包问题 学习总结(闫氏DP分析法)
- 微信小程序富文本解析点击图片放大_小程序富文本提取图片可放大缩小
- 安徽大学本科毕业论文答辩和论文选题PPT模板
- Towards Multi-Modal Intention Interfaces for Human-Robot Co-Manipulation
- 制作简单大气的倒计时时钟(带源码)js+css+html
- php解包封包,PHP解包数组
- 如何把m4v转换成mp4?
- 烧钱买来的CDN营收,真的能换来云计算的未来吗?
- 求问Windows10适配的SPSS版本
- python查找图片区域_python批量识别图片指定区域文字内容
- VUE 2.0 父子组件之间的通信
- Unity Visual Scripting 常见操作
- 技术员如何开发一个DAPP区块链应用(以宠物商店为例)
- wps表格应用技巧(一)