当我们读懂 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矢量控制系统所需的基本模块和功能配置...相关推荐

  1. laravel8找不到控制器_找一个“靠谱儿”的烟雾探测器方案,难不难?

    安全,应该说是人们生活中最"硬核"的刚需.很多安全设备平日里几乎是"透明"的,大家感觉不到它们的存在,而一旦遇到事儿,它们却必须能够派上用场,颇有些" ...

  2. python把文字矢量化_如何将点阵汉字矢量化 | indienova

    那么是不是点阵汉字就已经退出历史舞台了呢?并没有.现在街上能常常见到的简易 LED 屏,很多都还是用的点阵汉字.很多工控或者简易屏幕上,也都还在使用点阵汉字,这是因为同矢量字体相比,点阵汉字占用的空间 ...

  3. gossip 区块链_源代码: 一个最小化的区块链系统

    近期有个国内著名技术协会的约稿,正好向技术圈分享一下我对区块链系统的拙见.我发现一件有趣的事情,即使是有计算机背景,懂编程的同学,都也不怎么清楚区块链到底是怎么回事.今天这里,我打算用计算机语言和大家 ...

  4. python数据统计 矢量图_用python中的矢量化解决方案计算max draw down

    Maximum Drawdown是量化金融中常用的一种风险度量,用于评估所经历的最大负收益. 最近,我变得不耐烦的时间来计算最大下降使用我的循环方法.def max_dd_loop(returns): ...

  5. mysql触发器中访问mssql数据表_[数据库]一个利用触发器(trigger)实现数据库表的审计功能(audit)的例子--针对ms sql实现...

    首先建立数据库Test,建立两个表,我们命名为grades和audit,利用audit实现对grades的审计功能,其中grades用于存放学生的成绩,包括"sdudentID,course ...

  6. 一个控制器怎么转发到另外一个控制器_【科普】整车控制器硬件篇

    特别鸣谢!电器系统总监Z工为本文审稿并提出宝贵的修改建议!! 最近一起做仿真的同事[沈小光]有一个好消息,由于电控部门人手紧缺,需要调用优秀的[沈小光]过去帮忙.一听到这个消息的[沈小光]开心得想起飞 ...

  7. 新月音标_又一个新月?

    新月音标 I seriously have no idea where the time goes, I want it to slow down- I want to slow down, and ...

  8. 安装 PyTorch C++ API libtorch 及一个最小例子

    安装 PyTorch C++ API libtorch 及一个最小例子 翻译自:https://pytorch.org/cppdocs/installing.html 我们提供依赖 PyTorch 所 ...

  9. 矢量归一化_关于LRL矢量的一点分析

    [1].Laplace-Runge-lenz矢量 最早接触LRL矢量是在高中的物竞课上,在学习天体物理时老师提到过一个Kepler问题一般有三个守恒量:能量,角动量和LRL(Laplace-Runge ...

最新文章

  1. 实施工程师常用linux命令,009Linux管理日常使用的基本命令
  2. redis——通过redis实现服务器崩溃等数据恢复
  3. Spring AOP源码分析(二)JDK动态代理和CGLIB介绍
  4. 利用Delphi编写Socket通信程序
  5. 天壤联合创始人韩定一:大模型+小样本数据,AI驱动金融数字化转型新范式|量子位·视点分享回顾...
  6. spring-jpa中mappedby的作用
  7. DP 动态规划(一) ——背包问题 学习总结(闫氏DP分析法)
  8. 微信小程序富文本解析点击图片放大_小程序富文本提取图片可放大缩小
  9. 安徽大学本科毕业论文答辩和论文选题PPT模板
  10. Towards Multi-Modal Intention Interfaces for Human-Robot Co-Manipulation
  11. 制作简单大气的倒计时时钟(带源码)js+css+html
  12. php解包封包,PHP解包数组
  13. 如何把m4v转换成mp4?
  14. 烧钱买来的CDN营收,真的能换来云计算的未来吗?
  15. 求问Windows10适配的SPSS版本
  16. python查找图片区域_python批量识别图片指定区域文字内容
  17. VUE 2.0 父子组件之间的通信
  18. Unity Visual Scripting 常见操作
  19. 技术员如何开发一个DAPP区块链应用(以宠物商店为例)
  20. wps表格应用技巧(一)

热门文章

  1. C语言技巧之长度为0的数组
  2. 20个优秀的移动(iPhone)网站设计案例
  3. 团购、定时抢购倒计时js版
  4. 重载VerifyRenderingInServerForm
  5. opcache开启和关闭
  6. Laravel安装步骤
  7. php获取日期中的月份,年份
  8. 小程序支付 PHP
  9. 服务器win2008修复安装,Win2008 R2迁移实战之迁移工具安装
  10. linux中vi大括号enter缩进,格式 – 如何在vi中对齐代码(大括号,括号等)?