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

【电机培训】行止有度-电机控制与启停

[复制链接]
STM1024 发布时间:2018-9-3 16:41
本帖最后由 stm1024 于 2018-9-6 17:33 编辑 3 m  c8 G  V/ R3 F

6 e7 b0 E; C: |任务1要求如下:
2018-09-03_161125.jpg
# C3 p) B4 w4 h1 c5 u1 o0 B
% z7 }; Z4 }9 W
实现的代码,论坛中的已经有很多例子,我就不再献丑了,主要结合STM32 Motor Control SDK中的说明文档,说一下使用的注意事项。3 i  Q7 i0 D2 Y* f
: L' W# l/ j; x% z" ?
任务1中已经把需要的函数列举出来了:3 x9 I4 j6 z- r% V- _0 ^( W- |# r. g( U
1. MC_ProgramSpeedRampMotor1
- |# I9 ~1 s. N9 ?2.MC_StartMotor1和 MC_StopMotor1
# X5 u) @* E# ^! P  l' b1 O, V
1 M" ^4 _9 p+ `1 g1.MC_ProgramSpeedRampMotor1% T. x  e0 P. o; f, j# L$ i

# v$ I9 _* ~" w5 e" @先说这个尾巴1.这个控制类库支持两个电机的控制,其实这个在MotorControl Workbench的新建工程中会得到体现:" r; l; I3 b' r% t8 H+ i
2018-09-03_161619.jpg

8 U* J$ W( M6 b8 l. [此外,培训的文件中也可以看到:
2018-09-06_173143.jpg

* l0 b# c5 q8 L! A; U8 C; i两个不同的电机可以有完全不同的参数设置,这里我们都使用电机1.. I% h+ @8 C, M9 v9 z! `9 e& S
函数MC_ProgramSpeedRampMotor1原型:
% \7 w8 P2 f8 U) G( v# avoid MC_ProgramSpeedRampMotor1(int16_t hFinalSpeed,  uint16_t  hDurationms) ;
; L" O% w; {% A( F作用是“Programs a speed ramp for Motor 1 for later or immediate execution. ”,即配置速度斜坡为以后或立即执行。如果电机的状态是START_RUN或者是RUN,这个函数就会立即得到执行,否则只是缓存该值,直到电机状态是START_RUN或者RUN。. S* w' E2 c/ i
hFinalSpeed:最终速度,注意这个单位是以0.1Hz为单位的,所以,如果要使用3000rpm,这个地方给定的参数应该这么计算:
& g: W; a1 R' E& e先3000/60,这将得到转/秒,然后单位是0.1Hz,即提供1,则1秒转10次,所以要乘以10,最终应该是3000/60*10=3000/6" o. m  S  z$ f
示例中的第一个参数就是这么来的,调用这个函数,需要注意提供的第一个参数必须是目标rpm/6。另外要注意的是变量的数据类型是int16_t,说明可以接受负数,其实就是电机旋向和正方向相反。不过,如果给一个正方向,然后立即给一个反方向,肯定是会在速度几乎为0的时候触发 Speed Feedback故障的,这个在前面的测试中也得到了验证。6 A  L( N' c+ A' l) n
hDurationms:由于是 speed ramp,必然有一个爬坡时间,这里就是设置该爬坡时间的,单位是毫秒。手册中提到“It is possible to set 0 to perform an instantaneous change in the speed value”,推测应该是用电机可能的最大角加速度立即提升到目标速度。
9 x! r- e) ^6 v% {9 h
; m5 ~8 n1 P5 \6 s2. MC_StartMotor1和 MC_StopMotor16 X  H% r1 R7 ?
显然,这两个函数是启动和停止电机的。
: u% R3 [( y# P3 b对于MC_StartMotor1,需要注意的是,必须在执行前调用以下函数之一:
+ D) h- x+ Q; a9 ?MC_ProgramSpeedRampMotor1()
5 w$ a* T6 r! T8 i! ], G7 d7 yMC_ProgramTorqueRampMotor1()
- W3 B% `5 H7 d6 uMC_SetCurrentReferenceMotor1()
2 v% o$ ?( u4 M% B1 x6 c8 N2 u第一个是转速控制,第二个则是扭矩控制,最后一个功能暂不明白,似乎是把当前参考作为后续执行的参数。6 Y: d+ c3 K. b" |8 _4 \
$ m2 w: b: C; R
停止函数则没有太多的使用限制,任何时候都可以使用。4 n: E7 y- o7 B' b* _' K
/ I& c2 e& x4 a+ S9 X! W+ l
收藏 1 评论2 发布时间:2018-9-3 16:41

举报

2个回答
子曰好人 回答时间:2018-9-3 17:12:11
本帖最后由 子曰好人 于 2018-9-3 18:13 编辑
3 q6 A' M. T, l! z3 `/ X; I! z  K' g! s9 j# D
关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故障发生点需要通过更高频率的采样数据(DAC或者Jscope)来查看内部变量的变化情况。
; R& H( [  g/ B7 U' q' w& y3 m" K2 w
void MC_SetCurrentReferenceMotor1( Curr_Components Iqdref )这个函数是直接设置dq轴电流的,其实如果把d轴电流设置为0,q轴电流设置为非零值,那么和void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )这个函数的功能就几乎一样了3 y1 Y; Z: W& D

1 B" \% [! @: H; |更新一下,刚才又看了代码注释,有一段是这样的:+ z+ [! G/ }! j
  * @note A ramp cannot reverse the rotation direction if the Application is using
/ ]. H$ `* z$ |2 Q: |, x  * sensorless motor control techniques. If the sign of the hFinalSpeed parameter5 P/ {3 O5 ?2 y2 _
  * differs from that of the current speed, the ramp will not complete and a Speed
9 t+ Y& r7 w1 x$ R% G  * Feedback error (#MC_SPEED_FDBK) will occur when the rotation speed is about to
/ \: |: j0 o/ b4 T1 l+ f% {# n" o& ?1 {  * reach 0 rpm.* K/ B" L: R% _
  *
既然官方认为是接近零速的时候才触发报警,我也暂时认为是这样吧
+ l6 ~( I. Q" Z6 P( ^! i" ?7 Q. I
0 f+ ?- C, Q0 M6 ~4 Y9 E% W$ A

0 i" k& V$ s) l4 I; x
STM1024 回答时间:2018-9-3 18:28:29
子曰好人 发表于 2018-9-3 17:124 I! L6 s( O' H+ f7 }9 W. N; ]
关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故 ...
( Q8 l  P; F! J: y1 k4 ^
可能是我理解的不是太深,或者表述的有问题,估计意思是说速度方向的变换会导致speed feedback error,就是说这只是触发speed feedback error的情况之一,至于出现这个故障的时候,原因不一定是由于方向的改变。

所属标签

相似分享

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