APM32F035有感矢量控制方案

一、先来几句废话

        首先这两年公司越来越多的开始使用国产的MCU,用过GD32、AT32、APM32等等,目前稳定使用的是APM32,包括身边朋友工作室,也开始从TI、STM、NXP换成APM32。上个月有幸拿到APM32F035电路控制板,非常感谢面包板社区提供的这个机会。一直很忙,刚好今天要周末了,来测试一下。之前可能通信方面做得比较多,很少接触电机控制,刚好朋友有一个项目要用,借这个机会,一起搞定。看看后面能否直接用这个方案。

二、电路板介绍

        先来一张电路板照片(还是挺好看的,黑色的电路板感觉颜值比较高)

 硬件框图

  • 气参数:12~72VDC 宽电压输入,最大功率 100W
  • 支持电机类型:BLDC,PMSM
  • 支持编码器类型:霍尔,光电,磁编码器
  • 通讯接口:SCI,SPI,I2C,CAN
  • 电流采样方式:单 / 双电阻采样,三相反电动势采样

        硬件整体来说中规中矩,使用Gate driver + MOSFET来驱动电机。配合一些霍尔传感器检测电路和相电流检测,基本上就是一个电机控制的最基本部分。核心MCU用的是极海自己的APM32F035,APM32F035作为一款32位FoC矢量控制MCU,内置Vector Computer多种专用数学运算加速器,提供整套FoC控制算法支持。该款新品具有优异的高效运算与处理速度,丰富的模拟与连接特性赋予电机更多的新功能属性。

三、软件方面介绍

        软件方面,极海提供了多种电机控制方案,满足不同的使用需求,如下图

      

        此项目整体代码架构主要可划分为 4 层,用户层、外设驱动层、电机控制驱动层以及电机算法层,具体功能描述如下:

  • 用户层( 用户层(USER 层)

main.c:主函数入口,负责初始化电机参数、底层外设、中断优先级、while 循环及低速状态机
环路的切换;
apm32f035_int.c:所有的中断处理函数,重点包括捕获中断函数、ADC 中断处理函数;
user_function.c:包括电机参数的初始化配置、参数复位等处理函数;
parameter.h:包括了所有的需要配置参数信息;

  • 外设驱动层( 外设驱动层(HARDWARE 层)

外设驱动层主要负责 APM32F035 芯片的外设驱动函数及配置,主要涉略包括 GPIO、PWM、
ADC、OPA、COMP、M0CP 协处理器等,具体如下图所示。

  • 电机控制驱动层(MOTOR_CONTROL 层)

电机控制驱动层主要负责电机的控制运行逻辑及核心处理算法调用,具体如下图所示。

  • 极海电机算法层( 电机算法层(Geehy_MCLIB 层)

电机算法层包括坐标变换、矢量控制等相关函数,数学库,HALL 角度估算等库函数。

   我打算使用的是有感的FOC控制方案,所以我们就APM32F035_Lv_HallFOC_V2.2.zip提供的源代码进行测试.打开工程(基于MDK5)如下:

状态机介绍 状态机介绍
本案例中采用了主状态机嵌套子状态机的结构,如下所示:
四个主状态:INIT、STOP、FAULT、RUN;
同时主状态 RUN 的六个子状态:run-calib、run-ready、run-align、run-spin、run-freewheel。
对主状态机的描述如下:
Fault:当系统有错误发生时一直处于此状态,直到错误的标志位被清除。而后会延时一段时间,然后从 Fault 状态跳转到 STOP 状态等待起动命令。
Init:此主状态执行变量初始化。
Stop:系统完成初始化等待速度命令。此状态内 下关闭 PWM 输出。
Run:当在运行状态时,若有 Stop 指令下发,便会执行系统停止运行操作。当运行在 Run 状态时,其子状态会相应被调用并执行:
Run-Calib:可以执行电流偏置 ADC 自校准功能。执行完此状态后系统将切 Ready 状态,同时
禁止 PWM 输出。
Ready:使能 PWM 输出,同步采样电流,并执行异常状态检查。

Align:执行采样电流,调用预定位算法,同时更新 PWM。在指定时间内执行态,同时采样直流
母线电压并滤波处理。
Spin:采样电流,调用观测器估计转子转速和位置,调用相应算法,更新 PWM,电机开始切入
闭环运行。
Freewheel:使能 PWM 输出,并采用短接制动的方式进行停机,由于转子惯性,需等待到电机
停止运行后在进行状态的切换,进而切换到 Ready 状态。如果有错误发生则将进入 Fault 状态。

四、电机调试

1、电机参数配置 

电机我使用的是硬石开发板配套的4对极直流无刷电机

根据官方提供的方案调试介绍,因此需要核对电机的极对数、额定转速、限制电流(结
合电机的功率考虑)、定标转速(结合额定转速评估)等。如下图所示。

2、电流内环的 PI 参数进行整定确认

        在 Align 状态中进行调试,调节 DQ 轴下的电流环 PI 参数(如下图所示,一般 DQ 轴采用一
样的 PI 参数),类似其中的 Q 轴,通过给定 Iq_cmd(可以直接给到值或者采用斜坡给定的方式
设定一定加速度及数值),通过观察 Vq 的输出是否能快熟稳定、以及 Iq_cmd 及实际的 Iq 波形数
据是否能跟随上,判断当前的 PI 参数是否合适。

3、HALL 角度自检

        当电流内环 PI 参数已经合适时,此时说明可以使用预定位功能,则开启 HALL 相序的自检功能。还是在“parameter.h”参数配置文件中,打开“HALL_PHASE_TEST”宏参,进行 HALL相序的自检功能,在此先介绍下 HALL 相序的作用,HALL 的相位角度差是 60°,即其可以输出六个角度点,类似按照正转 CW 的方式 HALL 值输出如 2-6-4-5-1-3。(注:可以先自行测试HALL 的相序顺序是否与程序中给的一致,可以通过手动让电机其转动一圈看看实际读到的 hall值,确认 hall 正转与反转的顺序,并将对应的 hall 相序进行核对,类似读出是 6-4-5-1-3-2,与上述设定顺序一致则无需修改,而若出现类似 6-4-1-5-2-3 这种与程序中的顺序不相符的,将该顺序填入 user_function.c 中的 u8CW_Hall_Value 与 u8CCW_Hall_Value 数组列表中,同时也需要对应填写下 CW_hall_table 与 CCW_hall_table 数组列表。u8CW_Hall_Value[6]:表示实际的霍尔序列,注意霍尔序列与角度序列的对应关系;CW_hall_table[8]:前一个位置的霍尔值序列,例如程序内 hall:1 的前一个位置是 hall:5,CW_hall_table[1] = 5,hall:2 的前一个位置是 hall:3,CW_hall_table[2] = 3以此类推:u8CW_Hall_Value[6]={ 1,3,2,6,4,5},对应 CW_hall_table[8]={ 0,5,3,1,6,4,2,0};u8CW_Hall_Value[6]={ 2,3,1,6,4,5},对应 CW_hall_table[8]={ 0,3,5,2,6,4,1,0})。

其次,实际 HALL 传感器的安装位置与电机对应的机器角度间是会有安装角度偏差的,即机器角度偏差角,此时 HALL 相序的自检功能就是为了计算出该偏差角,并把HALL 值对应的实际角度一一匹配上。如下图所示,开启“HALL_PHASE_TEST”宏参后进入调试模式,观察“stc_align_hall”该结构体的相关成员变量,配置函数“Align_HallCal_Phase_Init”与“Align_HallCal_Phase”实现,核心参数修改主要在于定位时间以及定位 Iq 电流的设定,以及偏移角度的设定(若检测角度异常可适当调节该值,常用推荐 0“0°”或者 5461“30°”的偏移角度)。如“stc_align_hall”中的“u8Dir”表示方向,
s16CW_arr_HallPhase_Cal 与 s16CCW_arr_HallPhase_Cal 是最终生成计算获取 HALL 相序角度表,需将其填入 user_function.c 中的“s16CW_arr_HallPhase”与“s16CCW_arr_HallPhase”数组列表中。

五、最后效果

APM32F035 有感FOC电机控制

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实战环境搭建-linux下安装tomcat

安装tomcat Index of /dist/tomcat/tomcat-9/v9.0.8/bin 下载apache-tomcat-9.0.8.tar.gz,可以使用wget; 2、将压缩包tar -zxvf apache-tomcat-9.0.8.tar.gz解压到/home/tomcat 3、修改环境变量 vi /etc/profile export JAVA_HOME=/home/java/jdk1.8.0_221 export JRE_HO…

sublime如何取消运行代码状态

sublime如何取消运行代码状态 解决方案待续、更新中 解决方案 1 顶部取消: 工具-----取消编译 这个看自己编译器sublime取消编译是否可用,可用则用 ,否则使用下面方法 2 底部栏取消–如图所示: 取消成功: 待续、更新中 ————————————————————— 以上就…

基于php应用的文件管理器eXtplorer部署网站并内网穿透远程访问

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件,是互联网最重要的应用之一,无论是…

7.数据转换、格式化、校验

日期字符串格式的表单参数,提交后转换为 Date 类型 <!-- 解决问题: 1.数据类型转换 2.数据格式 3.数据校验 --> BirthDay :<form:input path="birthDay"/>Employee 类中增加日期类型属性: //关于类型转换 private Date birthDay ;数据绑定流程原理 …

Qt QWidget窗口基类

文章目录 1 QWidget介绍2 如何显示 QWidget窗口2.1 新建基于QWidget的窗口类2.2 再添加一个QWidget窗口类2.3 显示新添加的 QWidget窗口 3 常用的属性和方法3.1 窗口位置3.2 窗口大小3.3 窗口标题3.4 窗口图标3.5 资源文件 4 实例 1 QWidget介绍 Qt 中的常用控件&#xff0c;比…

什么是CDN,优势在哪里

随着互联网的普及和用户需求的多样化&#xff0c;网站的速度和稳定性已经成为影响用户体验的关键因素。CDN加速作为解决这一问题的有效手段&#xff0c;正逐渐受到业界的广泛关注。 为什么说对网站这一块起到这么关键性的作用呢&#xff1f;它的优势在哪&#xff1f; 1.提升网…

【机器学习】卷积神经网络(五)-计算机视觉应用

七、应用-计算机视觉 7.1 人脸检测 DenseBox\Femaleness-Net\MT-CNN\Cascade CNN 介绍 VJ框架的分类器级联用于卷积网络 用于人脸检测的紧凑卷积神经网络级联 问题&#xff1a;作者希望实时检测高分辨率视频流中的正面&#xff0c;由于人脸图像和背景的多样性和复杂性&#xff…

【MIdjourney】图像角度关键词

本篇仅是我个人在使用过程中的一些经验之谈&#xff0c;不代表一定是对的&#xff0c;如有任何问题欢迎在评论区指正&#xff0c;如有补充也欢迎在评论区留言。 1.侧面视角(from side) 侧面视角观察或拍摄的主体通常以其侧面的特征为主要焦点&#xff0c;以便更好地展示其轮廓…

02. Eureka、Nacos注册中心及负载均衡原理

01小节中订单服务远程调用用户服务案例实现了跨服务请求&#xff0c;在微服务中一个服务可能是集群部署的&#xff0c;也就是一个服务有多个实例&#xff0c;但是我们在调用服务时需要指定具体的服务实例才能调用该服务&#xff0c;在集群模式下&#xff0c;服务地址应该写哪个…

1.3号io网络

文件IO 1.文件IO是基于系统调用 2.程序每进行一次系统调用&#xff0c;就会从用户空间向内核空间进行一次切换&#xff0c;执行效率较慢 3.目的&#xff1a;由于后期进程间通信&#xff0c;如管道、套接字通信&#xff0c;都使用的是文件IO&#xff0c;所以引入文件IO操作的…

MATLAB根据数据拟合曲线

MATLAB根据数据拟合曲线 MATLAB根据数据拟合曲线视频观看 MATLAB根据数据拟合曲线 x1[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,6…

C语言之详解数组【附三子棋和扫雷游戏实战】

文章目录 一、一维数组的创建和初始化1、数组的创建2、数组的初始化3、一维数组的使用4、 一维数组在内存中的存储 二、二维数组的创建和初始化1、二维数组的创建2、二维数组的初始化3、二维数组的使用4、二维数组在内存中的存储 三、数组越界边界值考虑不当导致越界访问数组大…

Mysql数据库的基础操作

1、数据库的数据类型和结构设置&#xff0c;修改等 DML&#xff1a;针对数据的增删改 where条件更像是这一条命令中的限制条件&#xff0c;如果不带where条件的时候&#xff0c;相当于针对全表所有字段进行操作 DQL&#xff1b; 数据查询语言 1、查询关键词使用 select 这个里…

MYSQL学习之buffer pool的理论学习

MYSQL学习之buffer pool的理论学习 by 小乌龟 文章目录 MYSQL学习之buffer pool的理论学习前言一、buffer pool是什么&#xff1f;二、buffer pool 的内存结构三、buffer pool 的初始化和配置初始化配置 四、buffer pool 空间管理LRU淘汰法冷热数据分离的LRU算法1.引入库2.读入…

MacBook Pro M1搭建Kafka2.7版本源码运行环境

原创/朱季谦 最近在阅读Kafka的源码&#xff0c;想可以在阅读过程当中&#xff0c;在代码写一些注释&#xff0c;便决定将源码部署到本地运行。 日常开发过程中&#xff0c;用得比较多一个版本是Kafka2.7版本&#xff0c;故而在MacBook Pro笔记本上用这个版本的源码进行搭建&…

计算机网络实验(二):Wireshark网络协议分析

一、实验名称&#xff1a;Wireshark网络协议分析 二、实验原理 HTTP协议分析 1.超文本传输协议&#xff08;Hypertext Transfer Protocol, HTTP&#xff09;是万维网&#xff08;World Wide Web&#xff09;的传输机制&#xff0c;允许浏览器通过连接Web服务器浏览网页。目…

高性能、可扩展、支持二次开发的企业电子招标采购系统源码

在数字化时代&#xff0c;企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台&#xff0c;涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

2023我的编程之旅、2024新的启程

目录 一、2023年结束、2024年开始 1、回顾2023年 1.1、发表文章概述 1.2、开发中遇到的问题与解决方案 2、展望2024年 2.1、新年Flag 2.2、收获与成长 一、2023年结束、2024年开始 光阴荏苒&#xff0c;从我开始在CSDN写作已经2年零5个月了&#xff0c;我也在不断的思考…

关于使用统一服务器,vscode和网页版jupyter notebook的交互问题

autodl 查看虚拟环境 在antodl上租借了一个服务器&#xff0c;通过在网页上运行jupyter notebook和在vscode中运行&#xff0c;发现环境都默认的是miniconda3。 conda info --envs 当然环境中所有的包都是一样的。 要查看当前虚拟环境中安装的所有包&#xff0c;可以使用以…

在CentOS 7.6上配置HTTP隧道代理

是一个相对复杂的过程&#xff0c;涉及到多个步骤。以下是一个详细的步骤指南&#xff0c;供您参考&#xff1a; 1. 安装必要的软件包 首先&#xff0c;您需要安装一些必要的软件包。打开终端&#xff0c;并执行以下命令&#xff1a; bash复制代码 sudo yum install -y epel…