你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【电机培训】左右逢源-电机正反转及报错信息

[复制链接]
STM1024 发布时间:2018-9-6 18:54
本帖最后由 stm1024 于 2018-9-7 08:12 编辑 3 V, s3 M: m2 n* E
9 k4 m  x0 S' A% w5 ^% S( h- Q% U
这次测试相当于是培训中的试验4“基于MC SDK5.0 状态的切换 ”; ?" V8 J* J1 T$ D) _1 ^- F2 @4 p% y
让电机正反转,常规的做法是:7 y7 {* E) b" P  d
  1. MC_ProgramSpeedRampMotor1(3000 / 6, 1000);
    ) o2 Y% k0 v$ W! t
  2.         MC_StartMotor1();
    : \' \0 O! a1 F% s% f5 X0 E
  3.         HAL_Delay(10000);
    , x( A' A8 p  m! e! x
  4.         MC_StopMotor1();+ w0 j* Y5 t5 u5 b# v) e8 l
  5.         HAL_Delay(5000);
    1 a, n5 ?  l+ z  o9 u4 u" f) m
  6.         2 C- T6 @! }- H: |1 r
  7.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
    7 w8 H/ N" n+ X) I+ Q
  8.         MC_StartMotor1();
    + l. Z3 \) j, R" v0 I; A
  9.         HAL_Delay(10000);/ M; \* }2 s; ~& S: u  S" `
  10.         MC_StopMotor1();) z# Y: y. L$ J( w# X
  11.         HAL_Delay(5000);
复制代码
这段代码可以保证电机正转10秒后停5秒,然后反转10秒后停5秒,如此反复,而且不会出现故障。
4 Q5 b' g/ o, `5 G' }9 P- i) M$ U  l" T
不过试验中的要求是,速度反转3000后立即切换为正转3000,通过前面的介绍可以知道,在速度接近0的时候,会产生speed feedback的故障报警。) b/ D; X. a5 F# m
这也简单:$ S2 k! O! w) A) ?  p/ p
  1. MC_StartMotor1();
    & g' Y/ W. b  h5 Y7 t3 K  S* {( q
  2.         MC_ProgramSpeedRampMotor1(3000 / 6, 1000);   
    ; @0 \$ N5 `- t9 W4 p6 H* j
  3.         HAL_Delay(10000);- Y6 M/ ~( a) {
  4.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);* Z7 ?( m5 n  [& ]
  5.         HAL_Delay(10000);
复制代码
运行的效果是:+ i$ n  [8 ]1 X6 p; X! z
1.gif
* \  c5 i5 ~. z
可见在运转过程中是会出现speed feedback错误的。
接下来是如何消除错误。
  1. MC_StartMotor1();9 N) O7 H; X" A% f
  2.         
    - a0 v" p. t% {  f% ]) |* _9 ]
  3.         MC_ProgramSpeedRampMotor1(3000 / 6, 1000);  
    7 @. ]* u' w2 t2 J+ K+ l1 b; f# d
  4.         MC_AcknowledgeFaultMotor1();, m; V5 Q& ~- t+ J# V, X. h
  5.         MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);" `6 ]" {8 U. ~3 Y! f
  6.         HAL_Delay(10000);
    1 Z& J. E1 O0 P, m, j: q
  7.         
    9 c7 {( b- U7 d/ P
  8.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
    + P4 p, j( P1 ?  o, B
  9.         MC_AcknowledgeFaultMotor1();- B0 L( J0 v6 A/ F. |3 ^
  10.         MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
    7 p. ^4 u, ?8 p0 v
  11.         HAL_Delay(10000);
复制代码
这样就可以消除错误,电机也会正反转,不过没有最开始的代码处理的快,毕竟stop motor直接让motor回到了idle状态。测试过程中还发现,如果延时时间太短,例如把两个10000都改为5000,则电机也会一直朝着一个方向转动,估计是留给错误恢复的时间不够?或者是我对SDK的理解不够深入吧* g% S+ w0 R" q
收藏 1 评论0 发布时间:2018-9-6 18:54

举报

0个回答

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版