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

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

[复制链接]
STM1024 发布时间:2018-9-3 16:41
本帖最后由 stm1024 于 2018-9-6 17:33 编辑 ; o- N+ g; |$ C& Q, X( \

! d6 J5 Z5 @; J1 l/ H2 f5 C& l7 m任务1要求如下:
2018-09-03_161125.jpg

. o2 q0 |2 |6 C9 p) t9 X9 B& ^: X7 H& N
实现的代码,论坛中的已经有很多例子,我就不再献丑了,主要结合STM32 Motor Control SDK中的说明文档,说一下使用的注意事项。1 J( |/ V3 Z/ S
- S4 t- Z+ q/ |/ k5 h6 h5 ~' S
任务1中已经把需要的函数列举出来了:# ]' c% B7 j. \% y0 Y
1. MC_ProgramSpeedRampMotor1  f8 L8 d9 W. W! y4 H$ R0 X& D4 r" ?
2.MC_StartMotor1和 MC_StopMotor1
, u$ }# ?5 a" T) R+ o- y0 I
6 e9 w! T  D  G+ y' Z' {" Y+ j7 g1.MC_ProgramSpeedRampMotor1
, u, G1 C8 ~0 c* A9 @
! h1 D+ J' L' q) E0 e* M; O6 f& T先说这个尾巴1.这个控制类库支持两个电机的控制,其实这个在MotorControl Workbench的新建工程中会得到体现:7 D5 T& U  C  k8 ]' A4 V
2018-09-03_161619.jpg

" z5 [3 r6 b: ^) y. B  y此外,培训的文件中也可以看到:
2018-09-06_173143.jpg

, l# x4 S" K: {) Y两个不同的电机可以有完全不同的参数设置,这里我们都使用电机1.: p- n$ t5 t3 G. {& i
函数MC_ProgramSpeedRampMotor1原型:
3 G4 T! B3 o" U# W* E' Fvoid MC_ProgramSpeedRampMotor1(int16_t hFinalSpeed,  uint16_t  hDurationms) ;
) v/ K( R3 F" K: c7 p" ?, [* P9 ^作用是“Programs a speed ramp for Motor 1 for later or immediate execution. ”,即配置速度斜坡为以后或立即执行。如果电机的状态是START_RUN或者是RUN,这个函数就会立即得到执行,否则只是缓存该值,直到电机状态是START_RUN或者RUN。
# E' O; f7 {; H7 N( b! z# k$ @* G+ i- khFinalSpeed:最终速度,注意这个单位是以0.1Hz为单位的,所以,如果要使用3000rpm,这个地方给定的参数应该这么计算:
  |% c) V) k' ]$ \$ a先3000/60,这将得到转/秒,然后单位是0.1Hz,即提供1,则1秒转10次,所以要乘以10,最终应该是3000/60*10=3000/66 p: {0 @6 S" Y8 b0 ~3 C. i
示例中的第一个参数就是这么来的,调用这个函数,需要注意提供的第一个参数必须是目标rpm/6。另外要注意的是变量的数据类型是int16_t,说明可以接受负数,其实就是电机旋向和正方向相反。不过,如果给一个正方向,然后立即给一个反方向,肯定是会在速度几乎为0的时候触发 Speed Feedback故障的,这个在前面的测试中也得到了验证。* _# y5 ~% i( j' C- A: e: k
hDurationms:由于是 speed ramp,必然有一个爬坡时间,这里就是设置该爬坡时间的,单位是毫秒。手册中提到“It is possible to set 0 to perform an instantaneous change in the speed value”,推测应该是用电机可能的最大角加速度立即提升到目标速度。
) r% [) v  U. a: w$ w3 O0 o5 B: J+ G: m& V0 _" {; t
2. MC_StartMotor1和 MC_StopMotor1# f- O4 q: V8 ?& d& Y9 T/ \3 U: `7 `
显然,这两个函数是启动和停止电机的。
9 T, C4 S: ~! V! J: z对于MC_StartMotor1,需要注意的是,必须在执行前调用以下函数之一:
, D) Y( p2 N' G; T; RMC_ProgramSpeedRampMotor1()
3 v4 o1 D/ c, d/ lMC_ProgramTorqueRampMotor1()& {, K7 Y+ a/ ?6 N
MC_SetCurrentReferenceMotor1()7 a, v9 x4 T+ L; q3 ~
第一个是转速控制,第二个则是扭矩控制,最后一个功能暂不明白,似乎是把当前参考作为后续执行的参数。
  v( e: e. F5 X; o( s& U6 ]) f" H+ T7 m
停止函数则没有太多的使用限制,任何时候都可以使用。
) d7 q7 l, D/ v
1 Z+ u6 V2 R6 r3 z$ V$ o! {
收藏 1 评论2 发布时间:2018-9-3 16:41

举报

2个回答
子曰好人 回答时间:2018-9-3 17:12:11
本帖最后由 子曰好人 于 2018-9-3 18:13 编辑   L) h, n( Y9 ~

: B6 C, m* S+ A; y关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故障发生点需要通过更高频率的采样数据(DAC或者Jscope)来查看内部变量的变化情况。6 r- I# [4 W2 I

7 v" J+ {9 m" d7 m4 g6 Qvoid MC_SetCurrentReferenceMotor1( Curr_Components Iqdref )这个函数是直接设置dq轴电流的,其实如果把d轴电流设置为0,q轴电流设置为非零值,那么和void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )这个函数的功能就几乎一样了
3 P( i4 K( _) a
4 J  Y# {# G+ ~2 C& z: ~更新一下,刚才又看了代码注释,有一段是这样的:
: E: ~! s# N+ v6 h( y9 r# L
  * @note A ramp cannot reverse the rotation direction if the Application is using! X8 @& W) ^6 {+ A; w8 J1 w
  * sensorless motor control techniques. If the sign of the hFinalSpeed parameter/ }6 `6 P* v: q8 J: V% c
  * differs from that of the current speed, the ramp will not complete and a Speed
) i, Y: u% h4 t  J) n  * Feedback error (#MC_SPEED_FDBK) will occur when the rotation speed is about to4 {- e) C7 a+ I! y" J4 }
  * reach 0 rpm.' s# J- B& C1 x; h) I
  *
既然官方认为是接近零速的时候才触发报警,我也暂时认为是这样吧
  s, q! j2 F4 e$ e) t# D6 l- g
% T- c4 f8 x5 }! A' M! K! G9 W2 z. a  V
8 g; q$ X1 B) `0 c# C
0 m# t' e0 ~& m) E6 ]% x
STM1024 回答时间:2018-9-3 18:28:29
子曰好人 发表于 2018-9-3 17:12
" w; z% B$ [1 h) g3 [, _# H! M关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故 ...

+ w6 c2 {' g! D9 @- {+ K可能是我理解的不是太深,或者表述的有问题,估计意思是说速度方向的变换会导致speed feedback error,就是说这只是触发speed feedback error的情况之一,至于出现这个故障的时候,原因不一定是由于方向的改变。

所属标签

相似分享

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