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

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

[复制链接]
STM1024 发布时间:2018-9-6 18:54
本帖最后由 stm1024 于 2018-9-7 08:12 编辑 . _8 K* l: b% o* Y
  V7 z; s, [& ]" R
这次测试相当于是培训中的试验4“基于MC SDK5.0 状态的切换 ”+ D0 {% o: Y- d2 [  _0 D/ Q$ F, a7 _
让电机正反转,常规的做法是:. K" T5 m4 Y% f
  1. MC_ProgramSpeedRampMotor1(3000 / 6, 1000);
    ( t9 A( V6 y3 v/ Y7 {- {
  2.         MC_StartMotor1();+ u+ B; ]6 C; W0 m& N
  3.         HAL_Delay(10000);3 ]2 u4 f) X( d5 X4 V, ]" z9 K1 ]0 S: v- p
  4.         MC_StopMotor1();
    ; H$ i$ E% o0 ]5 X! Q! g2 s  ?
  5.         HAL_Delay(5000); # K1 u3 V/ l& }& C$ o0 t
  6.         
    3 [$ [( d1 ~9 {
  7.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);- O% H& m1 \# y9 ~
  8.         MC_StartMotor1();
    6 B9 ^) g! g( l' w# R
  9.         HAL_Delay(10000);. v* `  e% E# q! G8 r% a2 o
  10.         MC_StopMotor1();
    ! c& m, S  \9 k, l
  11.         HAL_Delay(5000);
复制代码
这段代码可以保证电机正转10秒后停5秒,然后反转10秒后停5秒,如此反复,而且不会出现故障。" e# _2 W. m5 Y5 J
, D7 |* u6 Y% g: U( ?' ]2 }3 P" H
不过试验中的要求是,速度反转3000后立即切换为正转3000,通过前面的介绍可以知道,在速度接近0的时候,会产生speed feedback的故障报警。
1 Y- A# H7 h2 H' `+ [" b3 K这也简单:
7 y( u$ C# S+ x/ L- Z
  1. MC_StartMotor1();- L7 E. D; }+ J
  2.         MC_ProgramSpeedRampMotor1(3000 / 6, 1000);   
    # R6 H( o: V' B& t  U" H9 d) B" A2 O
  3.         HAL_Delay(10000);% x2 _( M5 W  r+ p6 r# h7 ~
  4.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
    0 D. l& D, f/ m. }+ e8 g
  5.         HAL_Delay(10000);
复制代码
运行的效果是:$ Q2 z4 P$ L/ B; ]2 \; ?
1.gif
' `; ?& Z  e+ j! }5 T% x& e: c
可见在运转过程中是会出现speed feedback错误的。
接下来是如何消除错误。
  1. MC_StartMotor1();
    9 z' ]+ [/ ~& u8 K- j+ Q
  2.         
    ; e4 n/ y3 t" _: V' w$ a4 V
  3.         MC_ProgramSpeedRampMotor1(3000 / 6, 1000);  
    0 |( J. p+ d( ?$ N
  4.         MC_AcknowledgeFaultMotor1();
    + M2 G* W0 M( K8 o4 a4 d+ u
  5.         MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
    ) G2 n! b2 T/ ^9 v1 X  I# |
  6.         HAL_Delay(10000);
    : |& y- W; Y, n* {" W6 t
  7.           }, j6 {, P; X. g; S
  8.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);
    0 E* a6 e9 r' T5 O8 T, ?
  9.         MC_AcknowledgeFaultMotor1();0 Y" K& \! f. w: G. o% n) S4 b( p% D) x
  10.         MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);' s* W+ x. K$ S9 G7 s: c  o2 U* ~& R
  11.         HAL_Delay(10000);
复制代码
这样就可以消除错误,电机也会正反转,不过没有最开始的代码处理的快,毕竟stop motor直接让motor回到了idle状态。测试过程中还发现,如果延时时间太短,例如把两个10000都改为5000,则电机也会一直朝着一个方向转动,估计是留给错误恢复的时间不够?或者是我对SDK的理解不够深入吧
% a* K8 w. v$ g
赞 收藏 1 评论0 发布时间:2018-9-6 18:54

举报

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