STM32电机控制--API函数应用

 基于ST MC SDK 5.2版本的应用
 一般的电机操作调用API就足够控制基本的电机运行
 下图是API函数的列表: 

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

1. 应用一 :API速度的控制-控制电机的启动停止

程序启动后,电机以3000RMP的速度运行10S后停止
停止5S后,电机重新以3000RPM转速运行10S后停止
以上过程重复操作

注意:速度指令参数是以0.1Hz为单位,3000RPM=3000/6(0.1Hz)

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

速度指令

在MotorControl Workbench 5.2.0生成的程序基础上添加代码,在main.c中添加

/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------*/

/* USER CODE END PFP */

/* USER CODE BEGIN 0 */
void Delay_Handler(void)
{
  delay_cnt++;
  if(delay_cnt>2000)          //1s计时
	{
		delay_cnt=0;

		if(delay_start_flag==0x30)  //启动10s计时
		{
			delay_cnt1++;
			if(delay_cnt1>9)          //10S
			{
				delay_cnt1=0;
				delay_start_flag=0x20;    
				delay_10s_flag=1;       //10S时间到标志位
			} 
		}
		else if(delay_start_flag==0x20)  //启动5s计时
		{
			delay_cnt1++;
			if(delay_cnt1>4)           //5S
			{
			  delay_cnt1=0;
			  delay_start_flag=0x30;
			  delay_5s_flag=1;   //5S时间到标志位
			}
		}  
	}
}
/* USER CODE END 0 */

int main(void)中

  /* USER CODE BEGIN 2 */
     
  MC_ProgramSpeedRampMotor1(3000/6,1000);  //1s内加速到3000RPM
  MC_StartMotor1();      //启动电机
	
  /* USER CODE END 2 */
  /* USER CODE BEGIN 3 */
		
		if(delay_10s_flag==1)     //10S
		{
			MC_StopMotor1();         //停止电机运行
			delay_10s_flag=0;
		}
		if(delay_5s_flag==1)     //5S
		{
			MC_StartMotor1();
			delay_5s_flag=0;
		}

在stm32f4xx_mc_it.c中添加
滴答定时中断程序里面调用定义的函数Delay_Handler(void);
在这里插入图片描述
添加完后编译下载即可实现3000RPM运行10S停止5S运行10S…的循环
在这里插入图片描述

2. 应用二 :PI组件接口函数做在线参数修改

在程序中修改速度PI值
修改为原始值的2倍
修改为原始值的0.3倍
观察参数修改后的速度曲线

在MotorControl Workbench 5.2.0生成的程序基础上添加代码,在main.c中添加

添加头文件mc_extended_api.h

/* USER CODE BEGIN Includes */
#include "mc_extended_api.h"
/* USER CODE END Includes */

变量定义

/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
MCT_Handle_t *pMctHdl;                       //定义的变量
static int16_t Speed_Kp,Speed_Ki;
/* USER CODE END PV */

main函数中添加

  /* USER CODE BEGIN 2 */
  pMctHdl = GetMCT(M1);
  Speed_Kp= PID_GetKP(pMctHdl->pPIDSpeed);
  Speed_Ki= PID_GetKI(pMctHdl->pPIDSpeed);
  
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);
  /* USER CODE END 2 */

编译下载并查看速度曲线

  • 原始倍数的时候
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*1);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*1);

在这里插入图片描述

  • 2倍PI的时候
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);

在这里插入图片描述

  • 0.3倍PI的时候
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*0.3);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*0.3);

在这里插入图片描述

3. 应用三 :基于MC SDK状态的切换

速度正转3000rpm
速度立刻反转-3000rpm
产生状态报错,需要程序返回报错信息
清除报错信息,返回到IDLE状态
然后继续执行反转-3000rpm速度指令

在这里插入图片描述
这个实验一开始是采用的HALL传感器来测试,但是发现速度能进行正常切换,不会报故障停机,然后换了无传感器模式的之后,就会报速度反馈错误的故障停机,下边是基于无传感器模式的:

在MotorControl Workbench 5.2.0生成的程序(Sensorless)基础上添加代码,在main.c中添加

main函数中添加

  /* USER CODE BEGIN 2 */
  MC_ProgramSpeedRampMotor1(3000/6,1000);  
  MC_StartMotor1();  
  HAL_Delay(5000);                        
  MC_ProgramSpeedRampMotor1(-3000/6,1000); 
  /* USER CODE END 2 */

速度正转3000rpm后立刻反转-3000rpm,产生状态报错(速度反馈),需要程序返回报错信息
在这里插入图片描述
在这里插入图片描述
状态报错,需要程序返回报错信息,清除报错信息,返回到IDLE状态,然后继续执行反转-3000rpm速度指令

程序添加,main函数中

  /* USER CODE BEGIN 1 */    
	 State_t sts_motor1; 
  /* USER CODE END 1 */

  /* USER CODE BEGIN 3 */
    sts_motor1 = MC_GetSTMStateMotor1();     //获取电机状态
		
    if(sts_motor1 == FAULT_OVER)             //电机报错
    {
      MC_AcknowledgeFaultMotor1();           //清除故障,返回到IDLE状态
      
    }
    else if(sts_motor1 == IDLE)              //继续执行反转-3000rpm速度指令
    {
      MC_StartMotor1();
      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
    }

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

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: stm32-foc-sdk是STMicroelectronics公司推出的专为STM32F系列MCU设计的开发套件,用于实现FOC(场定向控制)电机控制。该套件提供了丰富的软件库和示例代码,方便开发人员快速上手。以下是stm32-foc-sdk使用指南的主要内容: 1. 环境搭建:首先需要安装适用于STM32F系列MCU的开发环境,包括Keil MDK(Microcontroller Development Kit),STM32CubeMX配置工具等。 2. SDK安装:下载并解压stm32-foc-sdk安装包,将其导入到Keil MDK项目中。 3. 项目配置:使用STM32CubeMX配置工具创建一个新项目,并选择相应的MCU型号和外设配置。在配置工具中,选择FOC电机控制模块,并配置相关参数,例如PWM频率、电机参数等。 4. 代码生成:根据配置生成代码,并将生成的代码导入到Keil MDK项目中。此时,开发人员可以根据具体需求自定义代码,例如添加控制算法、外设驱动等。 5. 编译和下载:使用Keil MDK编译代码,并通过调试器将程序下载到目标MCU中。 6. 调试和测试:通过Keil MDK提供的调试功能,对FOC电机控制程序进行调试和测试。可以使用实时变量查看当前状态、观察数据变化,并通过仿真器或器件连接进行实时控制和监测。 7. 优化和调整:根据测试结果,对FOC电机控制程序进行优化和调整。可以调整控制算法参数、PWM频率等,以提高控制性能和效率。 总之,stm32-foc-sdk使用指南提供了详细的步骤和说明,帮助开发人员快速应用FOC电机控制技术,并实现高效精确的电机控制。该指南对于初学者和有一定经验的开发人员都是非常有价值的参考资料。 ### 回答2: STM32-FOC-SDK是一款专为STMicroelectronics的STM32系列微控制器设计的开发软件包。它提供了一套完整的工具和库,使开发者能够快速有效地实现无传感器磁场定向控制(FOC)。 这个SDK包含了许多关键组件,包括电机驱动库和配置工具。首先,开发者可以使用配置工具来定义并创建电机的参数。配置工具提供了一个用户友好的图形界面,供开发者输入各种电机参数,如电源电压、电机类型、转子参数等。通过这个工具,开发者可以生成相应的电机参数文件,以供后续使用。 一旦电机参数定义好了,开发者可以使用电机驱动库来实现FOC控制。这个库提供了一系列函数API,以便开发者可以使用他们来控制电机。开发者可以根据实际情况选择不同的电机控制策略,如感应电机控制或永磁同步电机控制等。 此外,STM32-FOC-SDK还提供了许多实用工具和示例代码,以帮助开发者更好地理解和使用SDK。开发者可以使用这些工具来调试和优化电机控制系统,并通过示例代码学习如何将SDK集成到自己的项目中。 总的来说,STM32-FOC-SDK是一款强大且易于使用的工具,适用于想要实现高性能电机控制的开发者。无论是初学者还是有经验的开发者,他们都可以通过使用这个SDK来加速电机控制系统的开发过程。 ### 回答3: STM32 FOC SDK使用指南是针对STMicroelectronics的STM32微控制器系列设计的一种专门用于采用矢量电机控制技术的开发工具。它提供了一套功能强大的软件库和示例代码,帮助开发者快速实现电机控制应用。 使用STM32 FOC SDK的第一步是确保拥有适当的硬件配置。这包括一块STM32微控制器开发板,以及与选择的矢量电机形式兼容的电机驱动器。接下来,需要获取最新版的STM32 FOC SDK软件包,并将其导入到所选的集成开发环境(IDE)中。 一旦设置好环境,可以根据具体的应用需求,选择合适的控制策略。STM32 FOC SDK提供了几种常用的控制策略,如速度控制模式、位置控制模式和无刷直流电机(BLDC)矢量控制模式。根据应用的要求,选择合适的控制模式,并将相应的参数配置到STM32微控制器上。 在进行电机控制之前,需要先进行电机参数的标定。这包括电机的电感、转子惯量等参数的测量和配置。STM32 FOC SDK提供了工具和示例代码来简化这个过程。通过连接电机到开发板上,可以准确地测量出这些参数,并根据测量结果进行配置。 一旦标定完成,可以使用STM32 FOC SDK的API来实现电机控制逻辑。通过调用相应的函数,例如启动电机、设置目标速度或位置,可以实现对电机的控制。同时,通过监测传感器反馈和执行相应的算法,自动调整控制策略,以实现更准确的电机运行。 最后,为了保证系统的稳定性和性能,需要对整个控制系统进行调试和优化。这可能涉及到参数调整、控制算法修改等操作。同时,可以使用STM32 FOC SDK提供的实时监测和调试工具,对系统的运行状态进行实时监测和分析。 总之,STM32 FOC SDK使用指南提供了一套详细的步骤和工具,帮助开发者快速入门和实现矢量电机控制应用。通过遵循指南中的步骤,并根据实际需求进行配置和调试,可以轻松地开发出稳定、高性能的电机控制系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值