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

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

[复制链接]
STM1024 发布时间:2018-9-3 16:41
本帖最后由 stm1024 于 2018-9-6 17:33 编辑
3 l" |2 c; D% O) i$ ^# L: J+ d1 b( g/ M0 Z
任务1要求如下:
2018-09-03_161125.jpg

( X5 }+ t  v* x' `3 j4 r% ]7 J& j- p  D. r- h1 q0 m1 O6 C
实现的代码,论坛中的已经有很多例子,我就不再献丑了,主要结合STM32 Motor Control SDK中的说明文档,说一下使用的注意事项。
' n/ q6 y, H, e, X: Z( y9 z% i
' W6 R7 F1 _8 c& l, N) e& X5 l任务1中已经把需要的函数列举出来了:: v: K) E* s( N/ M' T
1. MC_ProgramSpeedRampMotor1) k( Q1 Z! @- S6 d$ B2 c: K% m
2.MC_StartMotor1和 MC_StopMotor1, r- y" i: m! |- o  [
' a+ S+ \, x$ l( ^6 n# F- v
1.MC_ProgramSpeedRampMotor17 c/ k9 K; y" X2 d' h1 m

/ k) s6 S* p0 m4 g- Q先说这个尾巴1.这个控制类库支持两个电机的控制,其实这个在MotorControl Workbench的新建工程中会得到体现:4 }$ E  O+ Y7 ~  U% T4 S
2018-09-03_161619.jpg

$ {( M( Z: H! z7 F4 A* }1 S此外,培训的文件中也可以看到:
2018-09-06_173143.jpg
- l& F. e. P4 Z4 i
两个不同的电机可以有完全不同的参数设置,这里我们都使用电机1.
4 q) j- f; x- k! Y( s* m* o) [函数MC_ProgramSpeedRampMotor1原型:
! R9 k/ \' H+ ~) X& Ovoid MC_ProgramSpeedRampMotor1(int16_t hFinalSpeed,  uint16_t  hDurationms) ;: G* X& I+ r7 O7 ?3 ]
作用是“Programs a speed ramp for Motor 1 for later or immediate execution. ”,即配置速度斜坡为以后或立即执行。如果电机的状态是START_RUN或者是RUN,这个函数就会立即得到执行,否则只是缓存该值,直到电机状态是START_RUN或者RUN。
: W/ t2 ~% X) c4 D2 S& |  {: whFinalSpeed:最终速度,注意这个单位是以0.1Hz为单位的,所以,如果要使用3000rpm,这个地方给定的参数应该这么计算:
( [( n  r3 r/ ~先3000/60,这将得到转/秒,然后单位是0.1Hz,即提供1,则1秒转10次,所以要乘以10,最终应该是3000/60*10=3000/6
5 g/ d6 e/ t% T示例中的第一个参数就是这么来的,调用这个函数,需要注意提供的第一个参数必须是目标rpm/6。另外要注意的是变量的数据类型是int16_t,说明可以接受负数,其实就是电机旋向和正方向相反。不过,如果给一个正方向,然后立即给一个反方向,肯定是会在速度几乎为0的时候触发 Speed Feedback故障的,这个在前面的测试中也得到了验证。
3 j+ q' a* b2 o% X7 l# `hDurationms:由于是 speed ramp,必然有一个爬坡时间,这里就是设置该爬坡时间的,单位是毫秒。手册中提到“It is possible to set 0 to perform an instantaneous change in the speed value”,推测应该是用电机可能的最大角加速度立即提升到目标速度。
! E9 |8 w: ]# w7 k4 B
( ^" W. _( L5 j" n0 v2. MC_StartMotor1和 MC_StopMotor1; }7 r  l; C, \0 b5 L
显然,这两个函数是启动和停止电机的。! V2 Y( X7 B- o8 D5 x) h
对于MC_StartMotor1,需要注意的是,必须在执行前调用以下函数之一:
# E: r6 r; T! F+ fMC_ProgramSpeedRampMotor1()
0 h9 ^, f/ D2 w4 tMC_ProgramTorqueRampMotor1()6 _+ T4 B% N5 F( J) \7 U
MC_SetCurrentReferenceMotor1(). A4 Y8 d3 c* L+ D5 o. H0 c
第一个是转速控制,第二个则是扭矩控制,最后一个功能暂不明白,似乎是把当前参考作为后续执行的参数。5 |/ I4 V2 q8 c0 q9 i- L( y

5 ?# V7 y. }! ], R6 I* q停止函数则没有太多的使用限制,任何时候都可以使用。# S6 }$ x8 a2 y; P, U

5 k2 Z! ]7 ?+ p2 u4 W
收藏 1 评论2 发布时间:2018-9-3 16:41

举报

2个回答
子曰好人 回答时间:2018-9-3 17:12:11
本帖最后由 子曰好人 于 2018-9-3 18:13 编辑 - y# O& `! E' {; n

. ~' x9 M& {& D0 W关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故障发生点需要通过更高频率的采样数据(DAC或者Jscope)来查看内部变量的变化情况。$ O7 a2 T' W& r) V1 b
( J, m# I4 X+ i% J
void MC_SetCurrentReferenceMotor1( Curr_Components Iqdref )这个函数是直接设置dq轴电流的,其实如果把d轴电流设置为0,q轴电流设置为非零值,那么和void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )这个函数的功能就几乎一样了
9 E! i; A: `* `: R4 |. _: Q4 r' O  n! L
+ v2 K  v( G  ^2 ?9 n/ r更新一下,刚才又看了代码注释,有一段是这样的:
6 y( `2 b6 H/ z
  * @note A ramp cannot reverse the rotation direction if the Application is using
2 S7 Y& w' a# z  p2 r$ {. r" _) E  * sensorless motor control techniques. If the sign of the hFinalSpeed parameter
: [8 [- p6 K$ ~3 @7 M3 b1 d  * differs from that of the current speed, the ramp will not complete and a Speed& m8 Z& ]! x6 p8 g1 g* v6 M3 F
  * Feedback error (#MC_SPEED_FDBK) will occur when the rotation speed is about to* P8 Y# q* J% ], T+ `! P
  * reach 0 rpm.4 y; }' M. a# _5 c  }7 g: t
  *
既然官方认为是接近零速的时候才触发报警,我也暂时认为是这样吧
1 Q2 I7 R) V7 E' X$ h6 B2 y- {* _+ c
" S2 f$ K8 j' v1 Z3 i& a
9 u- P+ B# l  }9 z/ n
5 A4 o* Q( K) }( \$ i6 j/ v* A# l/ U
STM1024 回答时间:2018-9-3 18:28:29
子曰好人 发表于 2018-9-3 17:12  X- d; H+ s' P3 K3 R
关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故 ...
& V/ k! v! @. |, z: T, h/ v
可能是我理解的不是太深,或者表述的有问题,估计意思是说速度方向的变换会导致speed feedback error,就是说这只是触发speed feedback error的情况之一,至于出现这个故障的时候,原因不一定是由于方向的改变。

所属标签

相似分享

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