3900|2

14

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【ST电机套件评测】自拟任务-状态切换 [复制链接]

感谢ST 和 EEworld 给我这次参加电机套件的评测。本篇主要是我根据ST电机培训 任务3为基础做的自拟任务,测试电机库在发生状态切换时的处理机制。

试验步骤:
1. 速度反转-3000rpm

2. 速度切换到正转3000rpm

3. 产生状态报错,程序返回报错信息

4. 清除报错信息,返回到IDLE状态

5. 然后继续执行正转3000rpm速度指令


下图是使用ST MC workbench Monitor 中的速度检测Plotter捕捉到的速度图:

说明:在按复位键后,电机重新启动后捕捉到的图,所以一开始是3000rpm位置。

代码部分:
参考官方的potentiometer.c , 以状态机的结构切换程序状态。



此内容由EEWORLD论坛网友whoislj原创,如需转载或用于商业用途需征得作者同意并注明出处

  1. void Task3_State(void)
  2. {
  3.     pMciHdl = GetMCI(M1);

  4.     if (TB_UserTimebaseHasElapsed())
  5.     {
  6.         /* User defined code */
  7.         switch (User_State)
  8.         {
  9.             case US_RESET:
  10.             {
  11.                  MCI_ExecSpeedRamp(pMciHdl, -3000/6, 1000);   // 反转3000rpm
  12.                 cmd_status = MCI_StartMotor(pMciHdl);

  13.                 /* It verifies if the command  "MCI_StartMotor" is successfully executed
  14.                 otherwise it tries to restart the procedure */
  15.                 if(cmd_status == false)
  16.                 {
  17.                     User_State = US_RESET;    // Command NOT executed
  18.                 }
  19.                 else
  20.                  {
  21.                         User_State = US_POSITIVE_RUN;           // Command executed
  22.                         user_seconds = 40;    // 持续运行4秒
  23.                 }
  24.                 UserCnt = 0;
  25.             }
  26.             break;
  27.             case US_POSITIVE_RUN:
  28.             {
  29.                 MC_ProgramSpeedRampMotor1(3000/6, 1000);  // 切换到正转
  30.         
  31.                 State_t sts_motor1 = MCI_GetSTMStateMotor1();
  32.         
  33.                  if((sts_motor1 == FAULT_NOW)||(sts_motor1 == FAULT_OVER))
  34.                 {
  35.                     fault_occured = (uint16_t)STM_GetFaultState(&STM[M1]);      // 返回报错信息
  36.                                        
  37.                     if(fault_occured == MC_SPEED_FDBK)
  38.                     {
  39.                             //HAL_Delay(1000);                 // 增加延时以方便查看故障信息
  40.                             MC_AcknowledgeFaultMotor1();       /* 清除报错信息 返回到IDLE状态 */
  41.                             User_State = US_RUN_AGAIN;
  42.                     }
  43.                 }
  44.                  user_seconds = 1;                     // user_seconds = 10; 增加延时以方便查看IDLE状态
  45.             }
  46.             break;
  47.       
  48.         case US_RUN_AGAIN:
  49.         {
  50.             /* 继续执行3000rpm速度指令 */
  51.             MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
  52.             MC_StartMotor1( );
  53.         }
  54.         break;
  55.     }
  56.     TB_SetUserTimebaseTime((USER_TIMEBASE_OCCURENCE_TICKS) * user_seconds);
  57.     }
  58. }
复制代码


自拟评测任务完。
此内容由EEWORLD论坛网友whoislj原创,如需转载或用于商业用途需征得作者同意并注明出处
此帖出自stm32/stm8论坛

最新回复

好帖子。赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!  详情 回复 发表于 2018-8-17 17:51
点赞 关注(1)
 

回复
举报

1903

帖子

0

TA的资源

版主

沙发
 
学习了
此帖出自stm32/stm8论坛
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
好帖子。赞!赞!赞!赞!赞!赞!赞!赞!赞!赞!
此帖出自stm32/stm8论坛
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表