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

基于ST官方电机开发套件:FOC5.3库-正反转加减速代码及调...  

[复制链接]
mmuuss586 发布时间:2019-1-9 11:05
阅读主题, 点击返回1楼
赞 5 收藏 9 评论193 发布时间:2019-1-9 11:05
193个回答
mmuuss586 回答时间:2019-1-9 11:31:39
MC_ProgramSpeedRampMotor1(3000/6,2000); //设置为速度模式,设置速度指令
8 X. x. u5 [0 {+ @1 S调用此函数后hDurationms设置时间内当前速度变化到hFinalSpeed设置的目标速度
# q; Q/ z; @3 h* A9 N  \void MC_ProgramSpeedRampMotor1( int16_t hFinalSpeed, uint16_t hDurationms )' g( j% o8 I0 @0 e
{
7 X' R! e3 n, Z) j+ |) @        MCI_ExecSpeedRamp( pMCI[M1], hFinalSpeed, hDurationms );
$ B% k/ X2 Y0 h# u1 s& `6 f}5 b9 w4 e. K5 D4 D& |! |

, ~& f4 n( V; W4 k( pMC_ProgramTorqueRampMotor1(2000,2000);         //设置为转矩模式,设置转矩指令
: a& W+ S5 c# u7 y* e+ t, j调用此函数后hDurationms设置时间内当前转矩变化到hFinalTorque设置的目标转矩
. D7 _' M  n+ c7 `/ Jvoid MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms ), t8 e! p+ s0 Y  `+ W2 U- b% T/ h
{
: F% S, U( `+ a8 S8 p* e8 v/ j% z        MCI_ExecTorqueRamp( pMCI[M1], hFinalTorque, hDurationms );- i/ P* J0 i! ~7 l" t$ h
}
9 O  o. ], z$ b: P$ S# r- f
mmuuss586 回答时间:2019-1-9 11:31:57
Motor1Speed=MC_GetMecSpeedReferenceMotor1();    //获取Motor1当前指令的机械转速,数字量1代表0.1HZ9 N% N" ?* x% P% l* N
int16_t MC_GetMecSpeedReferenceMotor1(void): z$ r# ^' R4 K1 M4 X7 `  F4 ^* W/ m
{6 M4 d# w# |4 @7 A' l3 ~
        return MCI_GetMecSpeedRef01Hz( pMCI[M1] );
2 ]7 w: E6 p. d  O0 H, q% m6 J" Y0 u}& D  C! m4 i# \9 ~8 {9 Y0 s

+ X- Z1 @# E/ u8 G) K- h/ XMotor1SpeedAverage=MC_GetMecSpeedAverageMotor1();        //获取Motor1当前指令的平均机械转速,数字量1代表0.1HZ
- |- `6 Y, R3 F/ v8 R+ dint16_t MC_GetMecSpeedAverageMotor1(void)8 \8 |4 Q$ _5 E6 ~3 g
{
- C2 K6 E/ o. {! Y- R+ S; T; ^4 f        return MCI_GetAvrgMecSpeed01Hz( pMCI[M1] );
$ W7 r; Y" q5 k' z}9 f" c, a2 N" I2 G5 L
mmuuss586 回答时间:2019-1-9 11:32:25
Motor1State=MC_GetSTMStateMotor1(); //获取Motor1状态机的电机状态
" |2 v0 h" M6 r1 A% ?) VState_t  MC_GetSTMStateMotor1(void)
5 W8 V- y- W' ^8 q2 q3 |7 i0 t{
5 F2 K" m) ]6 p" a0 F* _- p5 ?8 k8 q        return MCI_GetSTMState( pMCI[M1] );
& Q# b/ J7 ?3 }}& r+ @" K# D+ u6 U4 A5 Y
27.png / k( L$ H3 L0 G6 m5 Y1 w

8 O5 X1 ]$ x1 r8 T; K
mmuuss586 回答时间:2019-1-9 11:34:31
Motor1Faults=MC_GetOccurredFaultsMotor1();//获取Motor1发生过的故障代码       
$ @1 k- M- M, o+ E2 |uint16_t MC_GetOccurredFaultsMotor1(void), {8 k) d3 i* f
{) r& O* X. Q% c2 c
        return MCI_GetOccurredFaults( pMCI[M1] );0 i9 \% [8 `  b3 a4 T4 d
}! C+ p. R1 f+ }
28.png
: r" X8 c" S1 H8 G$ L- L
0 ?- B: z3 a+ s8 V8 p& d; X  P
mmuuss586 回答时间:2019-1-9 11:34:47
MC_AcknowledgeFaultMotor1();//清除电机故障错误! y2 \4 B, I' I$ m  i" J1 [. F
调用此函数前,如果电机发生故障。电机停留在FAULT_OVER状态,并保留故障代码。调用后,状态机清除故障代码记录,并恢复到IDLE状态。
3 a7 s- y1 b) g; Ibool MC_AcknowledgeFaultMotor1( void )
. ~/ {0 c; ?7 U* F, r1 C6 N{) b- g& s; K8 T. ?, _6 G" u
        return MCI_FaultAcknowledged( pMCI[M1] );, b3 G+ _8 D" H8 o' N7 t
}2 Y3 @! m  [- d0 R" B
0 j) E# [+ M* j/ _6 r/ Z! a, l9 E
Motor1Dir=MC_GetImposedDirectionMotor1();        //返回最后一个指令设置的电机方向,如果最终的速度或转矩指令为负数返回-1,否则返回1
1 B8 {4 |/ o- L; T+ L: [# Xint16_t MC_GetImposedDirectionMotor1(void); T- C, {: t' e' \  \" R# n6 }3 x
{
- ~5 e8 n/ b* U$ O        return MCI_GetImposedMotorDirection( pMCI[M1] );
) r. f. V# l% g}+ o  ^) ^# r7 K8 O; M
( d' T3 K: O: b( Z9 s5 m( u

( z$ p$ Q7 |* z& v
mmuuss586 回答时间:2019-1-9 11:35:16
main函数while循环代码示例:
3 P; U5 c5 V0 T3 h) O/ ]( F" g1 q$ w4 O
1、电机以3000rpm运行,加速时间为2S;
* \4 d" J! w* @. M# r2、程序启动电机运行,运行速度为3000rpm,在10S后停止转动;8 o* Z; P$ r/ C# e9 t/ g0 P+ N
3、电机停止前,读取电机相关参数(方向、速度、故障等);4 H8 Q0 P3 K  N2 d) Q. J7 }4 i. ]
4、电机故障处理;# u6 n- H3 k2 ^& E1 x& S+ N8 X
5、停止1S后电机重新运行,速度依然是3000rpm,不过速度为-3000rpm;; k5 y# x) ?8 M- Y+ ?6 |
6、以上过程重复操作。
4 X2 K- O* ]+ u( V! m) {
mmuuss586 回答时间:2019-1-9 11:35:39
参考代码截图& N9 N/ A1 M8 K
29.png ! ]9 x3 l: Z  O8 _. \/ o) A  ~6 c

/ G! e- G5 G2 ?+ `' v9 i
mmuuss586 回答时间:2019-1-9 11:36:19
打开MotorControl Workbench观察相关参数和电机运行曲线- [) k, `# [# ?! c, i" C  @1 N7 U4 A
点Monitor按钮观察电机相关参数1 `& P2 i& Y; d; Z& M; z+ g
30.png
$ k2 O8 G& S. ~$ {. n: U( q2 y点开后如下图所示- w( C7 B! p1 ~/ S* h4 ^, a
31.png + R1 N  }8 ?- S/ e+ n8 S6 ~$ M
+ R$ Q3 J% {% v5 s6 e) O: k
mmuuss586 回答时间:2019-1-9 11:40:20
点击connect按钮先进行连接,如连接不上按下板子上黑色复位按钮或更换串口端口号先进行测试。9 w5 R& @. I# _5 [6 {, a0 H! k/ |
32.png 9 }' O% ~( f6 h0 M, B
连接后如下图所示(可以看到SDK 5.3版本)1 L; U) T0 T) w  e+ H- x2 p
33.png
, X- f' f) D! E- x, }+ r* W) F) h
mmuuss586 回答时间:2019-1-9 11:40:56
点Basic界面,可以看到板子的一些参数,也可以对板子进行启动、停止、清除故障等操作) E+ S: w6 b+ a) s4 q! Z
35.png ; s: c% J- N: Q

, E& K( \2 X6 o* `) U$ V
mmuuss586 回答时间:2019-1-9 11:41:36
点Advaced界面,可以看到PID一些参数以及速度或转矩模式,& c( |( E: M# b: U; l: [
也可以对板子进行启动、停止、清除故障及模式切换等操作+ V# L& z% C  c7 s; T& y
35.png
2 x; f# @! R1 r  B4 j  O! V  M  a
; ^, V6 I; N1 L. j
mmuuss586 回答时间:2019-1-9 11:42:55
点Registers界面,可以看到PID、寄存器等相关参数以及最后读取参数时间等5 m) P+ m9 ]( R1 ]
36.png . h4 l7 d8 V0 ?0 |( A6 v

5 z; f! D7 i. m3 B* A9 V
mmuuss586 回答时间:2019-1-9 11:43:31
点Configuration界面,可以对一些参数进行重新配置及重新装载 37.png ) o$ C- n( p) p4 ]6 }8 Y  F, B
mmuuss586 回答时间:2019-1-9 11:44:14
点Plotter按钮,观察电机的转速运行曲线 38.png
! a! S2 e0 i5 M: `
mmuuss586 回答时间:2019-1-9 11:44:38
打开后如下图所示+ V. Q9 [+ o  y- J* K
39.png
  D% Y( z3 [2 X
3 N% y! y, v9 O# I# l/ v% ?: d

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版