Controle do motor STM32 - aplicativo de função API

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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

1. Aplicação 1: controle de velocidade API - controle de partida e parada do motor

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

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

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Comando de velocidade

Adicione o código com base no programa gerado pelo MotorControl Workbench 5.2.0 e adicione-o em 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 (vazio) 中

  /* 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;
		}

Em stm32f4xx_mc_it.c, adicione o
programa de interrupção do temporizador de tique para chamar a função definida Delay_Handler (void);
Insira a descrição da imagem aqui
depois de adicioná-la, compilar e baixar para atingir 3000RPM executando 10S, pare 5S, executando 10S ...
Insira a descrição da imagem aqui

2. Aplicação 2: função de interface do componente PI para modificação de parâmetro online

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

Adicione o código com base no programa gerado pelo MotorControl Workbench 5.2.0 e adicione-o em main.c

Adicionar arquivo de cabeçalho mc_extended_api.h

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

Definições de variáveis

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

Adicionar na função principal

  /* 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 */

Compile, baixe e veja a curva de velocidade

  • Quando o múltiplo original
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*1);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*1);

Insira a descrição da imagem aqui

  • Quando 2 vezes PI
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);

Insira a descrição da imagem aqui

  • Quando 0,3 vezes PI
  PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*0.3);
  PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*0.3);

Insira a descrição da imagem aqui

3. Aplicação 3: Mudar com base no status do MC SDK

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

Insira a descrição da imagem aqui
No início deste experimento, o sensor HALL foi usado para testá-lo, mas verificou-se que a velocidade pode ser alternada normalmente sem um desligamento por falha. Então, após o modo sensorless ser alterado, o desligamento por falha com o erro de feedback de velocidade será relatado. O seguinte é baseado no modo sensorless de:

Adicione o código com base no programa (Sensorless) gerado pelo MotorControl Workbench 5.2.0 e adicione-o em main.c

Adicionar na função principal

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

Depois que a velocidade gira para frente a 3000 rpm, ela reverte imediatamente -3000 rpm, um erro de status (feedback de velocidade) é gerado, o programa precisa retornar o
Insira a descrição da imagem aqui
Insira a descrição da imagem aqui
status da mensagem de erro para relatar um erro, o programa precisa retornar a mensagem de erro, limpe o erro mensagem, volte ao estado IDLE e, em seguida, continue a executar a instrução de velocidade reversa de -3000 rpm

Programa adicionado, na função principal

  /* 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);
    }

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/qq1291917670/article/details/111945076
Recomendado
Clasificación