4410|4

1412

帖子

3

TA的资源

版主

 

【基于NUCLEO-F746ZG电机开发应用】8.程序框架-三大核心任务简介 [复制链接]

本帖对Systick中断和ADC中断中的三个任务进行简单介绍。在上贴(【基于NUCLEO-F746ZG电机开发应用】7.程序框架-两个重要中断)中介绍了Systick中断执行安全任务和中频任务,ADC中断主要执行高频任务。下面对任务的流程进行介绍,对各任务内的函数具体是如何进行采集和计算的,后续我们单独进行分析:

1.安全任务

安全任务对于过温,过流,欠压,过压保护进行判断, 如果触发了上述保护,则会关闭PWM输出。本任务中对温度ADC采样,母线电压采样,采样完成后进行判断,与设置的上限和下限进行比较,如果超过了设置的阈值,则返回故障码。

安全任务流程图如下:

 

 

安全任务的代码:其中对代码进行了注释和分析。

__weak void TSK_SafetyTask_PWMOFF(uint8_t bMotor)
{
  /* USER CODE BEGIN TSK_SafetyTask_PWMOFF 0 */

  /* USER CODE END TSK_SafetyTask_PWMOFF 0 */
 
  uint16_t CodeReturn = MC_NO_ERROR;  //错误标识
  uint16_t errMask[NBR_OF_MOTORS] = {VBUS_TEMP_ERR_MASK};//过压、欠压、过温标志,初始化错误标识数组

  //检测温度,是否过温
  CodeReturn |= errMask[bMotor] & NTC_CalcAvTemp(pTemperatureSensor[bMotor]); /* check for fault if FW protection is activated. It returns MC_OVER_TEMP or MC_NO_ERROR */

  //检测是否过流
  CodeReturn |= PWMC_CheckOverCurrent(pwmcHandle[bMotor]);                    /* check for fault. It return MC_BREAK_IN or MC_NO_FAULTS
                                                                                 (for STM32F30x can return MC_OVER_VOLT in case of HW Overvoltage) */
  if(bMotor == M1)//电机1
  {
    CodeReturn |=  errMask[bMotor] &RVBS_CalcAvVbus(pBusSensorM1);//检测母线电压,获取电压状态
  }

  //更新状态信息
  STM_FaultProcessing(&STM[bMotor], CodeReturn, ~CodeReturn); /* Update the STM according error code */

  //获取状态值
  switch (STM_GetState(&STM[bMotor])) /* Acts on PWM outputs in case of faults */
  {
  case FAULT_NOW: //当前有错误
    PWMC_SwitchOffPWM(pwmcHandle[bMotor]);//关闭PWM输出
  
    FOC_Clear(bMotor); //它重新初始化电流和电压变量。
                       //此外,它清除 qd 电流 PI 控制器、电压传感器和SpeednTorquecontroller

    MPM_Clear((MotorPowMeas_Handle_t*)pMPM[bMotor]);//清除测量缓冲区并初始化索引
    /* USER CODE BEGIN TSK_SafetyTask_PWMOFF 1 */

    /* USER CODE END TSK_SafetyTask_PWMOFF 1 */
    break;
  case FAULT_OVER://当故障条件消失时,应用程序打算保持的持久状态。 
                  //后续状态通常是 STOP_IDLE,一旦用户确认故障条件,状态机就会移动。
    PWMC_SwitchOffPWM(pwmcHandle[bMotor]);//关闭PWM输出
	/* USER CODE BEGIN TSK_SafetyTask_PWMOFF 2 */

    /* USER CODE END TSK_SafetyTask_PWMOFF 2 */
    break;
  default:
    break;
  }
  /* USER CODE BEGIN TSK_SafetyTask_PWMOFF 3 */

  /* USER CODE END TSK_SafetyTask_PWMOFF 3 */
}

2.中频任务

中频任务执行于systick中断中 ,实际为速度环以及状态机执行地方。中频任务的流程图如下:

 

中频任务的代码如下:其中对代码进行了注释和分析。

 

/**
  * @brief 为每个驱动器实例执行中频任务功能。
  *
  * 以 Systick 频率计时。
  */
__weak void MC_Scheduler(void)
{
/* USER CODE BEGIN MC_Scheduler 0 */

/* USER CODE END MC_Scheduler 0 */

  if (bMCBootCompleted == 1)//初始化完成
  {
    if(hMFTaskCounterM1 > 0u)//任务计数大于0
    {
      hMFTaskCounterM1--;//递减
    }
    else
    {
      TSK_MediumFrequencyTaskM1();//执行中频任务
                                  //速度环以及状态机执行
      /* USER CODE BEGIN MC_Scheduler 1 */

      /* USER CODE END MC_Scheduler 1 */
      hMFTaskCounterM1 = MF_TASK_OCCURENCE_TICKS;//任务计数,
                                                 //MF_TASK_OCCURENCE_TICKS=(SYS_TICK_FREQUENCY/SPEED_LOOP_FREQUENCY_HZ)-1u
                                                 //SYS_TICK_FREQUENCY=2000,SPEED_LOOP_FREQUENCY_HZ = 1000
    }
    if(hBootCapDelayCounterM1 > 0u) //驱动器启动电容器对电机 1 充电所需的延迟计数
    {
      hBootCapDelayCounterM1--;
    }
    if(hStopPermanencyCounterM1 > 0u)//电机 1 在 STOP 状态下的持续时间
    {
      hStopPermanencyCounterM1--;
    }
  }
  else
  {
  }
  /* USER CODE BEGIN MC_Scheduler 2 */

  /* USER CODE END MC_Scheduler 2 */
}

3.高频任务

高频任务函数位于mc_task.c的TSK_HighFrequencyTask()函数,执行的是核心FOC算法。高频任务的流程图如下:

 

 

 

提示词:如果您需要查看本帖隐藏内容,请登录或者注册

最新回复

感谢分享,感谢分享,感谢分享,感谢分享,感谢分享   详情 回复 发表于 2021-11-4 21:35

赞赏

1

查看全部赞赏

个人签名

没有什么不可以,我就是我,不一样的烟火! 

 
 

回复
举报

6754

帖子

2

TA的资源

五彩晶圆(中级)

 

谢谢分享,注释都做了中文说明!十分感谢分享经验!

点评

感谢支持  详情 回复 发表于 2021-9-24 15:40
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 
 

回复

1412

帖子

3

TA的资源

版主

 
freebsder 发表于 2021-9-24 15:34 谢谢分享,注释都做了中文说明!十分感谢分享经验!

感谢支持

个人签名

没有什么不可以,我就是我,不一样的烟火! 

 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

 

感谢分享,感谢分享,感谢分享,感谢分享,感谢分享

点评

谢谢支持  详情 回复 发表于 2021-11-5 21:28
 
 
 

回复

1412

帖子

3

TA的资源

版主

 
felix1104 发表于 2021-11-4 21:35 感谢分享,感谢分享,感谢分享,感谢分享,感谢分享

谢谢支持

个人签名

没有什么不可以,我就是我,不一样的烟火! 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表