你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
chrome
firefox
safari
ie8及以上
ST
官网
STM32
中文官网
ST
全球论坛
登录/注册
首页
技术问答
话题
资源
创客秀
视频
标签
积分商城
每日签到
基于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
a0a.1 32b0c
MC_ProgramSpeedRampMotor1(3000/6,2000); //设置为速度模式,设置速度指令
% h/ a- P" \$ T: `- d
调用此函数后hDurationms设置时间内当前速度变化到hFinalSpeed设置的目标速度
8 g. w; e: Y. n! n9 m! V; i! c1 s
void MC_ProgramSpeedRampMotor1( int16_t hFinalSpeed, uint16_t hDurationms )
9 F, i2 R$ u/ Q: Y: u* D
{
- d3 O: h7 h. h: v( m U
MCI_ExecSpeedRamp( pMCI[M1], hFinalSpeed, hDurationms );
* O+ [" S4 a. Q
}
- \2 U/ r v8 J, x( d- f
, g- a; U- t7 k' P9 s z9 ^
MC_ProgramTorqueRampMotor1(2000,2000); //设置为转矩模式,设置转矩指令
0 j& N, H g' X4 ?" O( d- U* b
调用此函数后hDurationms设置时间内当前转矩变化到hFinalTorque设置的目标转矩
) Y5 g7 e) l5 v
void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )
0 C+ S. Q* d4 u% b
{
9 D5 t) ]2 S6 c' e" ?
MCI_ExecTorqueRamp( pMCI[M1], hFinalTorque, hDurationms );
8 a. K3 V5 `# v$ N2 D" _
}
. \9 ~6 \# E: C, P
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:31:57
a0a.1 32b0c
Motor1Speed=MC_GetMecSpeedReferenceMotor1(); //获取Motor1当前指令的机械转速,数字量1代表0.1HZ
; h7 A9 i* X' F' U! g0 t
int16_t MC_GetMecSpeedReferenceMotor1(void)
Y1 t. a; ~, A X r! S \
{
, X, w. o5 U+ Z& P! a' d$ n- {* p
return MCI_GetMecSpeedRef01Hz( pMCI[M1] );
. u+ J E# M7 \8 `5 H! o7 m& t: D
}
. a: f( @" v3 h. S6 N4 C+ ]
, k/ k" d4 m: l9 ^; E
Motor1SpeedAverage=MC_GetMecSpeedAverageMotor1(); //获取Motor1当前指令的平均机械转速,数字量1代表0.1HZ
4 X9 L: Y2 E& P; W+ } z
int16_t MC_GetMecSpeedAverageMotor1(void)
V1 B: p0 y9 k2 `. s6 W
{
8 q% Q4 h D5 o' L7 J
return MCI_GetAvrgMecSpeed01Hz( pMCI[M1] );
) a+ |) {; J7 l( `4 p
}
0 p7 M ~8 n: @; G C- T
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:32:25
a0a.1 32b0c
Motor1State=MC_GetSTMStateMotor1(); //获取Motor1状态机的电机状态
0 q2 B* b, D) X+ y! t0 N, T
State_t MC_GetSTMStateMotor1(void)
0 \; c3 O0 g( X* Z# J" i0 F
{
* n5 [+ k3 Y4 k
return MCI_GetSTMState( pMCI[M1] );
: M2 h3 v+ ?& a" S( z
}
: U. @0 O, U+ r+ L, I
7 p$ d2 F5 {' e; S* @# K
$ Y5 i$ X) Z# a+ J3 c0 y
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:34:31
a0a.1 32b0c
Motor1Faults=MC_GetOccurredFaultsMotor1();//获取Motor1发生过的故障代码
) p# l% k5 O/ ` c% { a
uint16_t MC_GetOccurredFaultsMotor1(void)
, I8 B6 d4 V" {& ^
{
# x7 ^' J6 H0 n' C
return MCI_GetOccurredFaults( pMCI[M1] );
4 r7 b7 W1 u( l6 D* h7 O F4 l# A9 R! u
}
+ G% ?# p! v& ~$ {5 a% {" k: y3 g( _
% q8 f ~" `8 Q" Y% W
$ T" l! P- t# d( U4 I z7 `- P
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:34:47
a0a.1 32b0c
MC_AcknowledgeFaultMotor1();//清除电机故障错误
4 N! P* u! }. Z" t
调用此函数前,如果电机发生故障。电机停留在FAULT_OVER状态,并保留故障代码。调用后,状态机清除故障代码记录,并恢复到IDLE状态。
2 e; b/ @0 y$ y
bool MC_AcknowledgeFaultMotor1( void )
( j9 c7 c) I) ]4 |( k5 B( M/ d# M
{
! }$ `) U9 E* ?
return MCI_FaultAcknowledged( pMCI[M1] );
! r# H: A# d' O$ R# i1 d1 H$ U r7 O
}
0 _4 k2 L: i4 _! [) _
; [/ W" d; k( `0 B# M4 y
Motor1Dir=MC_GetImposedDirectionMotor1(); //返回最后一个指令设置的电机方向,如果最终的速度或转矩指令为负数返回-1,否则返回1
, `6 a- I* `* M! `$ K# P% U+ g
int16_t MC_GetImposedDirectionMotor1(void)
0 Y" h, O# `. B% i
{
" a1 O" c5 } D! K9 Y R
return MCI_GetImposedMotorDirection( pMCI[M1] );
4 K6 [0 y1 Z: r$ c1 o6 p
}
$ u7 V3 B1 d! T0 s/ m: r4 R
) d$ I8 O% b, m5 \
& B) M" w! w$ U1 e% w# D' f+ i
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:35:16
a0a.1 32b0c
main函数while循环代码示例:
% l+ D4 k; X+ ?: N8 I, w5 m
& r; j: C- u% M; H; s
1、电机以3000rpm运行,加速时间为2S;
$ f5 I# k( ^! w8 V9 @1 u
2、程序启动电机运行,运行速度为3000rpm,在10S后停止转动;
$ H( _8 z+ |( }5 t
3、电机停止前,读取电机相关参数(方向、速度、故障等);
2 I5 y! `, r* g' G% Z) U9 ?
4、电机故障处理;
( o0 f/ T9 Y4 U! T
5、停止1S后电机重新运行,速度依然是3000rpm,不过速度为-3000rpm;
' z5 o' i4 Y3 j5 r
6、以上过程重复操作。
# F, N6 N% d# Y2 k$ A7 ~# i
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:35:39
a0a.1 32b0c
参考代码截图
8 a/ l$ Q6 A7 r) a' U H
1 d+ l t; L! {9 p
' s& z% R8 d7 C& n
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:36:19
a0a.1 32b0c
打开MotorControl Workbench观察相关参数和电机运行曲线
5 ?% B. F, C/ ]/ Y1 R/ I0 C
点Monitor按钮观察电机相关参数
% p" z/ d; Z0 y% \' M1 T. }
( C" u" Y9 e3 T3 F% ?, e. p
点开后如下图所示
$ F( g& v H5 O, W
8 s: A4 a" h' @
. y' D/ Z5 k) W* T$ ]6 E
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:40:20
a0a.1 32b0c
点击connect按钮先进行连接,如连接不上按下板子上黑色复位按钮或更换串口端口号先进行测试。
# [/ p7 x- M4 N
( R# ^/ m& d( }! r) y4 h
连接后如下图所示(可以看到SDK 5.3版本)
% B# u. H/ P3 S1 B2 h
3 r; H A& n. Y( U$ K7 C
8 N) E8 `3 y$ N; n# q; L e; x3 \$ j
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:40:56
a0a.1 32b0c
点Basic界面,可以看到板子的一些参数,也可以对板子进行启动、停止、清除故障等操作
; {9 E; m, V# T8 y6 {; |
* D* G7 ]" g7 J% i, E, D5 L
0 B7 T; \5 H3 P1 J
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:41:36
a0a.1 32b0c
点Advaced界面,可以看到PID一些参数以及速度或转矩模式,
5 b; A2 V( A, v* r7 `# k# D
也可以对板子进行启动、停止、清除故障及模式切换等操作
* Q) ~0 J# n5 _! l) ]% U5 N+ }
4 @" P& `) M3 I7 j
, w/ }$ d2 a6 W' j
; i' l7 P1 [6 X. u% Q
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:42:55
a0a.1 32b0c
点Registers界面,可以看到PID、寄存器等相关参数以及最后读取参数时间等
# L1 b6 V4 i. T( ?
, v0 `9 L" {! b. Y
" T" X! z& } E, x
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:43:31
a0a.1 32b0c
点Configuration界面,可以对一些参数进行重新配置及重新装载
) }# b+ v; I& B2 y
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:44:14
a0a.1 32b0c
点Plotter按钮,观察电机的转速运行曲线
; G1 Y Y' d3 f. B- L- ?
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:44:38
a0a.1 32b0c
打开后如下图所示
3 a2 q1 I& \0 M
# F. ?+ A# Z' }; w, A- q8 L
3 q) v l+ E& K3 t% D# s0 h. b
赞
评论
回复
支持
反对
1
2
3
4
5
6
7
8
9
10
... 13
/ 13 页
下一页
所属标签
相似分享
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
调用此函数后hDurationms设置时间内当前速度变化到hFinalSpeed设置的目标速度8 g. w; e: Y. n! n9 m! V; i! c1 s
void MC_ProgramSpeedRampMotor1( int16_t hFinalSpeed, uint16_t hDurationms )9 F, i2 R$ u/ Q: Y: u* D
{- d3 O: h7 h. h: v( m U
MCI_ExecSpeedRamp( pMCI[M1], hFinalSpeed, hDurationms );
}- \2 U/ r v8 J, x( d- f
, g- a; U- t7 k' P9 s z9 ^
MC_ProgramTorqueRampMotor1(2000,2000); //设置为转矩模式,设置转矩指令0 j& N, H g' X4 ?" O( d- U* b
调用此函数后hDurationms设置时间内当前转矩变化到hFinalTorque设置的目标转矩
void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )
{
MCI_ExecTorqueRamp( pMCI[M1], hFinalTorque, hDurationms );8 a. K3 V5 `# v$ N2 D" _
}. \9 ~6 \# E: C, P
int16_t MC_GetMecSpeedReferenceMotor1(void)
{
return MCI_GetMecSpeedRef01Hz( pMCI[M1] );. u+ J E# M7 \8 `5 H! o7 m& t: D
}
Motor1SpeedAverage=MC_GetMecSpeedAverageMotor1(); //获取Motor1当前指令的平均机械转速,数字量1代表0.1HZ4 X9 L: Y2 E& P; W+ } z
int16_t MC_GetMecSpeedAverageMotor1(void)
{
return MCI_GetAvrgMecSpeed01Hz( pMCI[M1] );) a+ |) {; J7 l( `4 p
}
State_t MC_GetSTMStateMotor1(void)
{* n5 [+ k3 Y4 k
return MCI_GetSTMState( pMCI[M1] );
}: U. @0 O, U+ r+ L, I
$ Y5 i$ X) Z# a+ J3 c0 y
uint16_t MC_GetOccurredFaultsMotor1(void), I8 B6 d4 V" {& ^
{
return MCI_GetOccurredFaults( pMCI[M1] );
}+ G% ?# p! v& ~$ {5 a% {" k: y3 g( _
调用此函数前,如果电机发生故障。电机停留在FAULT_OVER状态,并保留故障代码。调用后,状态机清除故障代码记录,并恢复到IDLE状态。
bool MC_AcknowledgeFaultMotor1( void )( j9 c7 c) I) ]4 |( k5 B( M/ d# M
{! }$ `) U9 E* ?
return MCI_FaultAcknowledged( pMCI[M1] );
}0 _4 k2 L: i4 _! [) _
Motor1Dir=MC_GetImposedDirectionMotor1(); //返回最后一个指令设置的电机方向,如果最终的速度或转矩指令为负数返回-1,否则返回1, `6 a- I* `* M! `$ K# P% U+ g
int16_t MC_GetImposedDirectionMotor1(void)
{
return MCI_GetImposedMotorDirection( pMCI[M1] );
}
) d$ I8 O% b, m5 \
& B) M" w! w$ U1 e% w# D' f+ i
1、电机以3000rpm运行,加速时间为2S;$ f5 I# k( ^! w8 V9 @1 u
2、程序启动电机运行,运行速度为3000rpm,在10S后停止转动;$ H( _8 z+ |( }5 t
3、电机停止前,读取电机相关参数(方向、速度、故障等);
4、电机故障处理;( o0 f/ T9 Y4 U! T
5、停止1S后电机重新运行,速度依然是3000rpm,不过速度为-3000rpm;' z5 o' i4 Y3 j5 r
6、以上过程重复操作。# F, N6 N% d# Y2 k$ A7 ~# i
' s& z% R8 d7 C& n
点Monitor按钮观察电机相关参数% p" z/ d; Z0 y% \' M1 T. }
点开后如下图所示$ F( g& v H5 O, W
. y' D/ Z5 k) W* T$ ]6 E
连接后如下图所示(可以看到SDK 5.3版本)% B# u. H/ P3 S1 B2 h
0 B7 T; \5 H3 P1 J
也可以对板子进行启动、停止、清除故障及模式切换等操作
, w/ }$ d2 a6 W' j