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

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

[复制链接]
STM1024 发布时间:2018-9-6 18:54
本帖最后由 stm1024 于 2018-9-7 08:12 编辑
5 \% B4 c9 J6 u4 ~: ]( o6 a: c8 R3 Q6 v$ Z7 j4 K4 V+ l' k
这次测试相当于是培训中的试验4“基于MC SDK5.0 状态的切换 ”; r& \5 k' W+ \* a+ l# ?% c/ E
让电机正反转,常规的做法是:9 h! a9 |' b; C0 S
  1. MC_ProgramSpeedRampMotor1(3000 / 6, 1000);
    4 r, _9 k7 u$ z% I9 |
  2.         MC_StartMotor1();
    ; k1 E% l1 C+ A8 B! @
  3.         HAL_Delay(10000);
    ; W/ D/ b1 t; n, F
  4.         MC_StopMotor1();
    / f/ @5 S) |" E- `& P2 j# B; C9 l
  5.         HAL_Delay(5000); # M# a1 o; N) D; {
  6.         
    8 e6 e' K. E& ~- H: W
  7.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);! [$ ~* P9 u: `, k3 x- x# t& I/ t% L1 v
  8.         MC_StartMotor1();) o/ H( O1 }; ]) N
  9.         HAL_Delay(10000);, o4 q1 h6 b% ~9 k+ {+ `
  10.         MC_StopMotor1();
    4 b; h  A9 Q6 x  ^  y. X7 r
  11.         HAL_Delay(5000);
复制代码
这段代码可以保证电机正转10秒后停5秒,然后反转10秒后停5秒,如此反复,而且不会出现故障。
0 z* a  W. ^# {% |
8 e! d4 H5 C* X; q不过试验中的要求是,速度反转3000后立即切换为正转3000,通过前面的介绍可以知道,在速度接近0的时候,会产生speed feedback的故障报警。4 t+ u% h2 q' k- s) Q9 r* h  i
这也简单:
+ Q8 l" x0 F7 t
  1. MC_StartMotor1();( F7 f. e& q, {
  2.         MC_ProgramSpeedRampMotor1(3000 / 6, 1000);   
    7 I' Q6 _5 k  [: }6 J- ~4 M7 c
  3.         HAL_Delay(10000);
    4 S5 ^( {& p8 F% u  q- {& Q
  4.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);- {1 Z7 Q( R, D; P4 B
  5.         HAL_Delay(10000);
复制代码
运行的效果是:
0 i+ j# E/ M& O" }" K! O5 d
1.gif
6 H& _/ t. U, [
可见在运转过程中是会出现speed feedback错误的。
接下来是如何消除错误。
  1. MC_StartMotor1();1 ^  i" ~% i6 s( ?- Y" ^
  2.         1 G7 S2 Z* j* N$ b+ F
  3.         MC_ProgramSpeedRampMotor1(3000 / 6, 1000);  
    , m$ k1 j" y( b7 U( x! R8 T
  4.         MC_AcknowledgeFaultMotor1();8 [) P; n/ a- C8 ~* S4 c
  5.         MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
    1 j+ ?9 W+ s9 f) R' i  x3 V3 [* g
  6.         HAL_Delay(10000);6 q. m4 w0 J% l7 o" L9 R  R
  7.         
    : c0 w7 k# `! L$ V% J
  8.         MC_ProgramSpeedRampMotor1(-3000 / 6, 1000);: \) J# n% K/ R% c0 E8 M6 Z
  9.         MC_AcknowledgeFaultMotor1();
    9 e7 j2 P: \$ P0 g# M# }3 O& {. W
  10.         MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);
    + D* U7 A& \( X$ _! \7 A  F: O) I
  11.         HAL_Delay(10000);
复制代码
这样就可以消除错误,电机也会正反转,不过没有最开始的代码处理的快,毕竟stop motor直接让motor回到了idle状态。测试过程中还发现,如果延时时间太短,例如把两个10000都改为5000,则电机也会一直朝着一个方向转动,估计是留给错误恢复的时间不够?或者是我对SDK的理解不够深入吧
; B4 Y6 |. p* \8 q4 J2 e" @7 ?+ \
收藏 1 评论0 发布时间:2018-9-6 18:54

举报

0个回答

所属标签

相似分享

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版