永磁同步电机FOC调试记录(一)

永磁同步电机FOC调试记录(一)

  • 前言
  • 架构
    • 硬件架构
    • 软件架构
  • 调试过程
    • 元器件选型
    • 开环控制
    • 编码器调试
    • 速度采样
    • 电流检测
    • 中断优先级的确定
    • 电流环部分
    • 烧坏IPM
    • 速度-电流环
    • 位置-电流环
  • 结语

前言

这是我个人从零开始尝试永磁同步电机(PMSM)控制的记录,主要是调试过程中遇到的一些问题以及debug思路,欢迎各位前辈讨论交流。
本研究基于硬石电子的硬件开发板以及相关的FOC程序,但本人所有上传的代码除了ST的官方库并没有直接使用其他企业或团体的代码,如果遇到侵权,请联系删除。
代码:Gitee仓库

本文不涉及FOC基础原理的讲解,使用ST官方提供的电机控制库实现FOC计算
本文将按照时间顺序记录调试遇到的问题和解决方法

架构

硬件架构

最开始采用了硬石电子YS-F4Pro控制板和开发板,后期变为自己设计打板的控制板和驱动板。值得注意的是硬石提供的成品驱动板中,线电流采用的是下管分压的采集方式,在电流采样逻辑中需要格外注意。

控制板暂时选用STM32F407 相关例程使用的是正点原子的例程

软件架构

软件架构比较简单,几乎是按照最基础的面向过程的变成方式实现的
主要是由主函数、电流采样、速度采样、FOC计算几个模块组成
详细内容如果有时间会在后面的文章中记录,同样也是因为软件还在不断迭代中,等开发完全之后再进行介绍

调试过程

元器件选型

开始这个项目之前首先进行了相关的元器件选型,选用了杭州微光生产的一款永磁同步电机,以及硬石电子配套的永磁同步电机开发版,这里由于功率板的电流采样功能使用的是下管导通的形式,给后边进行电流采样的时候留下了一个大坑,暂时按下不表。
编码器选择的事多摩川的一款多圈绝对式编码器,单圈精度23bit,多圈13bit,使用485协议与控制板通信。

开环控制

首先要对电机进行开环控制,即生成三路互补的PWM波,本文采用了SPWM的方式(这部分也是由硬石电子提供的)对电机进行开环控制,值得注意的是,在使用硬石原装SVPWM代码进行开环调试时电机不能旋转,最后定位到的原因是MOS管驱动芯片的使能引脚没有设置。这是本次调试遇到的第一个问题,以后如果遇到这类问题的调试思路是在板子上一级一级地看信号状态,这样就能定位到信号时在哪里突然消失的,也就是哪部分出现了问题。

编码器调试

完成电机驱动部分程序的编写后进行反馈回路的调试,首先是调试编码器,也就是需要用485协议与编码器进行通信。遇到的主要问题是485协议本身就是串口的一种形式,只不过使用专用芯片将串口信号转化成了485协议的信号,这里同样有相应芯片使能的问题。
另外一个要注意的问题是通讯时的波特率,我用的编码器通讯波特率是固定的,2.5Mbps,意味着我的速度采样同样不能太快。这里遇到的主要问题是我之前使用的485通信例程中的接收函数主要针对的是和电脑进行通信,而这种与传感器之间的通信可能有许多问题。需要使用示波器观察波形定位具体问题。
发送0x02, 0x08
如上图所示,编码器在接收到单片机的查询指令后会立即返回数据,而此时单片机还没有准备好接收数据,就需要在具体的接受函数内部进行调试,增加或减少一些延时,让单片机能够收到相应的数据。
另外还要注意数据高低位的问题,下图分别是高低位设置错误和设置正常是编码器返回的结果。
高低位设置错误
高低位设置正确
最后一个问题是,读取数据过程中涉及到了IO操作,这样的操作应该在独立的中断中进行操作,不然有可能在读取或发送数据的过程中被别的中断服务函数打断,导致不能正常读取接收到的数据。
同时还遇到了串口中断需要清楚中断标志位的操作,这个可能是由于我在移植程序的时候漏掉了这行代码,导致程序移植卡在串口中断服务函数中不能出去。

速度采样

完成了编码器的通讯调试之后就可以进行速度环的设计和编写,遇到的问题主要是单位换算的问题,即把编码器的绝对位置换算成速度,这个受到采样频率和时钟频率的影响,例如目前这套程序中速度采样的频率是5000Hz,编码器两次返回数据之差要除以0.2us,当改变时钟频率或者采样频率时,这个被除数也要随之改变。

在这里插入图片描述
在这里插入图片描述

电流检测

这期间遇到了一个故障,就是我在给编码器供电的时候不小心将编码器烧了,替换编码器浪费了很长时间,最终也没能成功,只能是重新购置了一台电机。
电流检测主要是通过采样电阻将线电流转化成电压信号输入给单片机的ADC引脚进行采样,这部分没什么复杂的,主要是要确定好ADC采样的方式,F407提供了多种多样的采样方式,目前我选择了一种最简单的单次采样的方式,采样两个通道大约需要60us左右,不知道后边换采样方式之后能不能降低采样时间,我是用的是12位精度的采样(F407支持的最高精度),后边可能考虑更换成H743芯片以及更换采样方式来降低采样时间。
电流采样时间和编码器读取时间是这套算法中最耗时的两个操作,目前这套程序的控制频率是5000Hz,也就是每次控制环有200us的时间进行采样和计算,速度采样和电流采样本身就要耗时60~70us,大大限制了控制频率的提高。但是一个已知的优化方向是,使用DMA进行相关采样的加速,这样就可以更快完成采样,将时间留给计算或者其他资源。

中断优先级的确定

在加入电流采样之后就会有中断的冲突,最终确定了如下的中断优先级:
串口中断优先级0,0
高速任务优先级1,0
中速任务优先级2,0
其中中断优先级数字越大,代表优先级越低

电流环部分

电流环是FOC程序的灵魂,我在之前的测试中发现ADC能够正常采集电流,但是当电机转起来之后,电流的采样就出现了奇怪的现象,如图,上图为示波器采集的电流采样电阻上的波形,下图为ADC的值,电流似乎成周期性地采样成功。
在这里插入图片描述

在这里插入图片描述
这种周期性出现的问题显然是软件问题,最后请教前辈定位到是之前电流采样电路部分留下的坑,下图为硬石的功率板电流采样部分的电路。
在这里插入图片描述
可以看出Isensor U是在下管(下方的/接地的MOS管)和地之间的,也就是只有下管道通的时候,这里才能采样出电压,而为什么能够周期性地采出波形,就是因为正好碰上了下管道通时候能采样。
解决方法是在电流检测之前加上一个判断条件,判断是否下管道通,具体的实现逻辑是,进入到上文提到的200us的控制周期后,等待下管道通,但是有三个下管,所以选用了三个下管全部道通的时候进行采样的方式,由于我们的PWM采用的是中心对齐模式,只要在PWM生成的定时器的另外一个通道加上一个溢出中断即可,也就是定时器每完成一次计数,出现一个中断,然后前文说的等待下管道通,等待的就是这个中断的标志位。这样就能够采样出还算能看的电流波形。
在这里插入图片描述
上图是开环旋转的时候采样的电流波形,当使用电流环进行控制的时候发现电机会在某一个点抖动,这意味着角度反馈每调节好,后边调节了角度反馈的换算方式,终于完成了电流环的闭环。主要的问题是电角度和机械角度的换算,由于永磁同步电机有的时候极对数不为1,机械角度*极对数=电角度,也就是说编码器返回的角度需要乘极对数,才能够给FOC进行计算。最后电流环闭环效果如下:
在这里插入图片描述
这里还有一个小的插曲,就是电角度调零问题,需要手动旋转电机,然后观察一下电角度和机械角度的关系,一般情况下需要加一个偏置才能正常使用,而这个偏置只要在一个范围内,电流环就能闭合,但是最好还是通过示波器精调一下这个偏置的值。

烧坏IPM

由于后边我们使用自己设计的板子进行调试,发现会把IPM烧掉,在烧了好几块之后发现是功率电上电之前必须打开控制电,不然MOS管的驱动信号不确定,也就导致了MOS管的开关状态不确定,有可能直接短路功率电,导致击穿IPM,同样的,也不能够在接通功率电的时候烧写程序,在烧写程序的过程中单片机的引脚状态也是不确定的。
另外引出了一个小的问题,就是一定要使用示波器观察一下单片机从上电启动,到正常工作这段时间内,PWM的输出引脚的状态是否是确定的,之前遇到了某些管脚在高低电平之间波动一下,再变成可控的状态,这一般是某些冗余代码没有删除,在不影响主逻辑的情况下一直被保留了下来。

速度-电流环

这部分主要是PID参数的调节,选用了大家常用的“实验法”一步一步试出来一个还可以的参数组合

位置-电流环

在闭合了速度-电流环之后尝试闭合速度环,一个小的问题是即便使用同一套电路参数和电机,内环的PI参数也有一些不同,在闭合不同外环的时候本项目使用了不同的内环参数,在闭合位置环时,电流环的Kp较小,也就是启动和停止的比较“软”

结语

本篇文章到这里就结束了,但是调试还在继续,后边我会使用别的文章记录硬件调试过程中遇到的问题,欢迎大家批评指正。
鸣谢:PSZ、CB、LH、YKT、LXY、LWT、LH几位老师和同学

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/734746.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

通用大模型 vs垂直大模型:AI界的“宫斗大戏”

科技圈最近可真热闹,AI大模型的“宫斗大戏”让人眼花缭乱。两个阵营:通用大模型和垂直大模型,正在上演一场激烈的“权力的游戏”。到底谁能笑到最后?咱们一起来“吃瓜”看看吧! 首先,登场的是“全能王”通…

leetcode 动态规划(基础版)最长回文字串

题目: 题解: 首先回文子串肯定是连续的,如果用dp来做就需要找出一个串的所有连续子串,枚举一个串所有连续子串的可行方案是首先枚举子串的右端点,范围是(0~s.size()-1),在每一个右端点中枚举左…

字节大牛耗时八个月又一力作,Android性能调优秘籍:设计思想与代码质量优化+程序性能优化+开发效率优化(全网疯传)

第一章、设计思想与代码质量优化 一、六大原则 二、设计模式 三、数据结构 四、算法 第二章、 程序性能优化 一、启动速度与执行效率优化 二、 布局检测与优化 三、 内存优化 四、耗电优化 五、网络传输与数据存储优化 六、APK 大小优化 第三章、 开发效率优化 一、…

八大排序浅入浅出

1)选择一个增量序列t1,t2,…,tk,其中ti>tj,tk1; 2)按增量序列个数k,对序列进行k 趟排序; 3)每趟排序,根据对应的增量ti&#xff…

FlinkCDC pipeline模式 mysql-to-paimon.yaml

flinkcdc 需要引入: source端: flink-cdc-pipeline-connector-mysql-xxx.jar、mysql-connector-java-xxx.jar、 sink端: flink-cdc-pipeline-connector-paimon-xxx.jar flinkcdc官方提供connect包下载地址,pipeline模式提交作业和…

Linux查看公网IP的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

STM32单片机BKP备份寄存器和RTC实时时钟详解

文章目录 1. Unix时间戳 2. UTC/GMT 3. 时间戳转换 4. BKP简介 5. BKP基本结构 6. RTC简介 7. RTC框架图 8. RTC基本结构 9. 代码示例 1. Unix时间戳 实时时钟,本质上是一个定时器,专门用来产生年月日时分秒。 Unix 时间戳(Unix T…

Apple - Cocoa Event Handling Guide

本文翻译整理自:Cocoa Event Handling Guide( https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/EventOverview/Introduction/Introduction.html#//apple_ref/doc/uid/10000060i 文章目录 一、导言本文件的组织另见 二、事件…

如何通过防泄密U盘,实现数据传输的安全性及可控性?

随着信息技术的发展,U盘作为重要的数据存储和传输工具,其安全性越来越受到关注。在日常办公中,经常会遇到这类情况:员工为了方便,随意使用U盘拷贝公司的机密资料。一旦U盘丢失或者被窃取,公司的机密资料就有…

Part 8.2 最短路问题

很多题目都可以转化为最短路的模型。因此&#xff0c;掌握最短路算法非常重要。 >最短路模板< 【模板】全源最短路&#xff08;Johnson&#xff09; 题目描述 给定一个包含 n n n 个结点和 m m m 条带权边的有向图&#xff0c;求所有点对间的最短路径长度&#xff…

vue-Router实现原理

http://localhost:8080/home 三、HashHistory hash("#")的作用是加载 URL 中指示网页中的位置。# 号后面的 hash值&#xff0c;可通过 window.location.hash 获取 特点&#xff1a; hash 不会被包括在 http 请求中&#xff0c;&#xff0c;对服务器端完全无用&…

《黑悟空》抢先版

当《西游记》的古老传说与现代潮流碰撞&#xff0c;一个全新的西游世界在《黑神话悟空》中缓缓展开。你&#xff0c;作为被选中的“天命人”&#xff0c;将踏上一段寻找真相的奇幻旅程。在这里&#xff0c;中国神话的深邃与东方魔幻的绚丽交织&#xff0c;构建出一个令人叹为观…

VBA技术资料MF165:关闭当前打开的所有工作簿

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

Origin较好用的科研绘图软件

推荐自己也在用的科研绘图软件Origin图所示&#xff1a; 图1 图2 图3

Android 装逼技术之暗码启动应用

AdapterView.OnItemClickListener, TextWatcher, PopupMenu.OnMenuItemClickListener, DialpadKeyButton.OnPressedListener { //…… Override public void afterTextChanged(Editable input) { // When DTMF dialpad buttons are being pressed, we delay SpecialChar…

FPGA国内”薪“赛道-在医疗领域的应用

mian 免 ze 责 sheng 声 ming 明 以下观点仅代表个人观点&#xff0c;不代表任何公司或者行业 从下游应用市场来看&#xff0c;通信和工业市场份额位居FPGA芯片一二位&#xff0c;同时通信市场份额有望持续提升。但是目前通信和工业市场趋于稳定&#xff0c;FPGA厂商一直推AI市…

408计算机组成原理

todo:有逻辑的分门别类的整理笔记&#xff0c;方便复习 总 理解不了就直接背下来&#xff0c;学越多就越能理解 计算机系统概述 简要目录 基本概念 字长 MAR MDR PC IR CU ALU 通用寄存器、标志寄存器、标志控制器 ACC 地址译码器 通用寄存器 PU C语言编译过程 数据通路带…

FlinkCDC sink paimon 暂不支持exactly-once写入,而通过 幂等写

幂等写入&#xff1a; 一个幂等操作无论执行多少次都会返回同样的结果。例如&#xff0c;重复的向hashmap中插入同样的key-value对就是幂等操作&#xff0c;因为头一次插入操作之后所有的插入操作都不会改变这个hashmap&#xff0c;因为hashmap已经包含这个key-value对了。另一…

基于matlab的BP神经网络分类预测

1.神经网络结构 本文网络结构如图1所示&#xff1a; 图1 网络结构 图1给出的并不是单纯的bp神经网络结构这里设置了三个隐藏层&#xff0c;神经元个数分别为6&#xff0c;3&#xff0c;3&#xff0c;输入层12个特征输入&#xff0c;输出层输出4个类型结果。 2.代码 %% 清空环…

自动驾驶仿真Carla -ACC功能测试

我将详细说明如何使用Carla进行ACC&#xff08;自适应巡航控制&#xff09;测试&#xff0c;确保每个步骤贴合实际的Carla自动驾驶仿真标准&#xff0c;并提供相应的代码示例。 使用Carla进行ACC测试的步骤&#xff1a; 1. 环境设置和启动Carla 首先&#xff0c;确保你已经安装…