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

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

[复制链接]
STM1024 发布时间:2018-9-3 16:41
本帖最后由 stm1024 于 2018-9-6 17:33 编辑 6 C% k) d+ V, w7 `2 B- o
5 ^: {5 o/ a4 V7 p' [/ y: \: M1 V
任务1要求如下:
2018-09-03_161125.jpg
+ T) v% s2 l6 o# @
4 q/ `4 n* @. K' u5 ~8 x6 S0 n
实现的代码,论坛中的已经有很多例子,我就不再献丑了,主要结合STM32 Motor Control SDK中的说明文档,说一下使用的注意事项。& q* D% V2 Q6 i, {
& K4 F( E, ~0 K( p8 T7 \" K# b$ k. C
任务1中已经把需要的函数列举出来了:( Y, R  J% i# H1 o
1. MC_ProgramSpeedRampMotor1& b( p) ?7 C' i1 G" F7 P
2.MC_StartMotor1和 MC_StopMotor1  M  f) p) K* p0 Y

# o2 p$ u) M5 `2 a$ J1.MC_ProgramSpeedRampMotor1) B. h8 @: r, Z9 D& }

. u: r6 a/ f5 q0 E+ h先说这个尾巴1.这个控制类库支持两个电机的控制,其实这个在MotorControl Workbench的新建工程中会得到体现:" o5 z( b9 K5 m0 H' V" {
2018-09-03_161619.jpg
( G6 u7 h. q) b. N* Z2 ?" Z7 R
此外,培训的文件中也可以看到:
2018-09-06_173143.jpg
2 x) K5 Q2 @" Q( |
两个不同的电机可以有完全不同的参数设置,这里我们都使用电机1.8 U) m6 z. I5 q! @5 B* n
函数MC_ProgramSpeedRampMotor1原型:2 t% Z" N+ O. c5 b7 n4 U
void MC_ProgramSpeedRampMotor1(int16_t hFinalSpeed,  uint16_t  hDurationms) ;
7 w& c: |5 x7 q2 K作用是“Programs a speed ramp for Motor 1 for later or immediate execution. ”,即配置速度斜坡为以后或立即执行。如果电机的状态是START_RUN或者是RUN,这个函数就会立即得到执行,否则只是缓存该值,直到电机状态是START_RUN或者RUN。0 b. u; h4 W! i$ m3 \
hFinalSpeed:最终速度,注意这个单位是以0.1Hz为单位的,所以,如果要使用3000rpm,这个地方给定的参数应该这么计算:9 Z' B# x2 ]. K5 P
先3000/60,这将得到转/秒,然后单位是0.1Hz,即提供1,则1秒转10次,所以要乘以10,最终应该是3000/60*10=3000/6) T6 {* t# P/ `* F! B
示例中的第一个参数就是这么来的,调用这个函数,需要注意提供的第一个参数必须是目标rpm/6。另外要注意的是变量的数据类型是int16_t,说明可以接受负数,其实就是电机旋向和正方向相反。不过,如果给一个正方向,然后立即给一个反方向,肯定是会在速度几乎为0的时候触发 Speed Feedback故障的,这个在前面的测试中也得到了验证。
& a& D! R- e$ WhDurationms:由于是 speed ramp,必然有一个爬坡时间,这里就是设置该爬坡时间的,单位是毫秒。手册中提到“It is possible to set 0 to perform an instantaneous change in the speed value”,推测应该是用电机可能的最大角加速度立即提升到目标速度。- _8 N( d+ |1 s" G5 H: ^
% W0 S! W, V) X: h2 ?
2. MC_StartMotor1和 MC_StopMotor1
5 T1 K1 ?' ?9 F  v  o5 L显然,这两个函数是启动和停止电机的。
2 x! N2 Q' y6 l5 G- O( i2 s对于MC_StartMotor1,需要注意的是,必须在执行前调用以下函数之一:
( i! N2 d5 F5 g; TMC_ProgramSpeedRampMotor1()
  f+ j& w8 g2 _3 }& ?3 A% g8 qMC_ProgramTorqueRampMotor1()
; C3 _% a3 x* m% G7 S1 vMC_SetCurrentReferenceMotor1()
8 ?4 T1 ~2 c  D0 G第一个是转速控制,第二个则是扭矩控制,最后一个功能暂不明白,似乎是把当前参考作为后续执行的参数。# s* G* M: n  `
6 A% j& A( \% s- n& k
停止函数则没有太多的使用限制,任何时候都可以使用。; [6 c# R4 R  X! z) W
0 U9 l. z3 N6 P% ?" e9 D! m
赞 收藏 1 评论2 发布时间:2018-9-3 16:41

举报

2个回答
子曰好人 回答时间:2018-9-3 17:12:11
本帖最后由 子曰好人 于 2018-9-3 18:13 编辑 * k, M$ G( M- `" Q# t& r  G
4 u0 y- g) M5 s; k
关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故障发生点需要通过更高频率的采样数据(DAC或者Jscope)来查看内部变量的变化情况。1 z8 X" S4 Z3 Q

; {( @: ]) e7 a6 O/ |6 d3 uvoid MC_SetCurrentReferenceMotor1( Curr_Components Iqdref )这个函数是直接设置dq轴电流的,其实如果把d轴电流设置为0,q轴电流设置为非零值,那么和void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )这个函数的功能就几乎一样了
1 o6 e7 p9 n! H- p
7 _! S& |* E1 n( {更新一下,刚才又看了代码注释,有一段是这样的:1 ]! r/ P$ t6 s" C& l) E0 A
  * @note A ramp cannot reverse the rotation direction if the Application is using
2 ^$ e2 \, [1 ?  * sensorless motor control techniques. If the sign of the hFinalSpeed parameter
. I$ K% c2 Z' }5 h4 U/ w3 A  * differs from that of the current speed, the ramp will not complete and a Speed
: ?9 w! L) X6 a' i: p* S  * Feedback error (#MC_SPEED_FDBK) will occur when the rotation speed is about to
. n7 G* Y( g0 B0 I! M- r/ K. S  * reach 0 rpm.0 p9 B) |( ]2 w- C8 m7 M* @; B
  *
既然官方认为是接近零速的时候才触发报警,我也暂时认为是这样吧
0 @' G" N- m0 g
( j% m7 q0 ^- O
! u0 W  o$ H% X
5 h; ^! H) A1 I
STM1024 回答时间:2018-9-3 18:28:29
子曰好人 发表于 2018-9-3 17:12
; Y% H8 l3 K/ ~5 ]关于楼主的帖子有一个地方有不同观点,关于报错触发点,不一定是速度接近于0的时候才产生报错,如果要看故 ...

; g, ?7 ]1 y* k$ g- c0 {可能是我理解的不是太深,或者表述的有问题,估计意思是说速度方向的变换会导致speed feedback error,就是说这只是触发speed feedback error的情况之一,至于出现这个故障的时候,原因不一定是由于方向的改变。
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版