你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。
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); //设置为速度模式,设置速度指令
+ ~0 \1 }9 e/ Y# i; A% M5 B
调用此函数后hDurationms设置时间内当前速度变化到hFinalSpeed设置的目标速度
4 e/ H2 u3 A& ~' F5 M
void MC_ProgramSpeedRampMotor1( int16_t hFinalSpeed, uint16_t hDurationms )
$ S2 K9 o, T, p1 O
{
* v0 u7 z. p2 ~2 `: u# U
MCI_ExecSpeedRamp( pMCI[M1], hFinalSpeed, hDurationms );
% A3 N, ]: T; l+ G3 R# M& _
}
; ~0 j; v& W8 G, L* W
1 h f* n7 B% U" y& R
MC_ProgramTorqueRampMotor1(2000,2000); //设置为转矩模式,设置转矩指令
; O2 ~# {- X k
调用此函数后hDurationms设置时间内当前转矩变化到hFinalTorque设置的目标转矩
, m9 K; k* C. j6 W$ _" Z
void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )
5 q, Y2 g" u& a+ q, G
{
$ B- z1 _4 b+ N, r" T4 J1 n" p- F" m1 g
MCI_ExecTorqueRamp( pMCI[M1], hFinalTorque, hDurationms );
2 l/ K0 n, K: F5 i
}
1 y3 h) B1 N0 {2 C4 b& B8 @
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:31:57
a0a.1 32b0c
Motor1Speed=MC_GetMecSpeedReferenceMotor1(); //获取Motor1当前指令的机械转速,数字量1代表0.1HZ
7 J' z6 ^! S% {- k
int16_t MC_GetMecSpeedReferenceMotor1(void)
% S4 |9 v' \( ?+ k
{
. F8 P, {7 k( @2 A
return MCI_GetMecSpeedRef01Hz( pMCI[M1] );
( N+ l, b6 M3 j; L" _) s3 y7 Z
}
7 k* Q# ]# m( n
' K+ r! {& N- O% r8 z/ w
Motor1SpeedAverage=MC_GetMecSpeedAverageMotor1(); //获取Motor1当前指令的平均机械转速,数字量1代表0.1HZ
, w& h- f( m: R6 D. Q9 ]: R
int16_t MC_GetMecSpeedAverageMotor1(void)
E- Y2 C! h# o" l1 ~
{
7 q* Y) @ U9 q$ G7 f7 I
return MCI_GetAvrgMecSpeed01Hz( pMCI[M1] );
/ e/ ~) B% i/ |/ C1 K6 X7 T$ H
}
" z( W( T1 h2 U: ]
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:32:25
a0a.1 32b0c
Motor1State=MC_GetSTMStateMotor1(); //获取Motor1状态机的电机状态
. p& S* S* k" m* Z" C
State_t MC_GetSTMStateMotor1(void)
2 g, G: c; {6 F3 ~ S' S
{
- R( s( Y& j; l6 I
return MCI_GetSTMState( pMCI[M1] );
! @! p* q/ h; ?8 g, \" H
}
- }3 \8 F0 h( e
4 c1 g+ s& S; S: g& \
5 K2 g9 {5 [9 l2 g
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:34:31
a0a.1 32b0c
Motor1Faults=MC_GetOccurredFaultsMotor1();//获取Motor1发生过的故障代码
" f: r3 X* ^' \8 B* E- B- e
uint16_t MC_GetOccurredFaultsMotor1(void)
6 b: T0 `' `3 V3 e, g- G
{
" G2 I% ]& a/ o8 B
return MCI_GetOccurredFaults( pMCI[M1] );
: a4 c- ^& P. ]$ m% n
}
0 i6 f, t9 Q- @' P8 p. u. y
5 y# X, w" @0 F* Y
, U: ^1 p/ y! I9 \) r& [
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:34:47
a0a.1 32b0c
MC_AcknowledgeFaultMotor1();//清除电机故障错误
8 @: b# c$ k* s8 O6 t& H! N. D& I
调用此函数前,如果电机发生故障。电机停留在FAULT_OVER状态,并保留故障代码。调用后,状态机清除故障代码记录,并恢复到IDLE状态。
2 p* F' n1 e* a- Q3 ?( U5 t4 l' ]
bool MC_AcknowledgeFaultMotor1( void )
( s' A4 X$ e, @+ b$ t: L1 C& |9 k
{
; x# E5 M8 g+ `' X+ I6 |: n( d/ h
return MCI_FaultAcknowledged( pMCI[M1] );
0 b6 j! g7 S* o& L1 l. A
}
9 C7 ?. D+ ]: N- ~
, r4 e8 o/ r( ?& L e
Motor1Dir=MC_GetImposedDirectionMotor1(); //返回最后一个指令设置的电机方向,如果最终的速度或转矩指令为负数返回-1,否则返回1
' S* t6 e! I0 H+ O7 Q
int16_t MC_GetImposedDirectionMotor1(void)
- k1 p* h- V2 Z& |8 Y, w
{
0 ?+ _* I$ F( f% J+ E
return MCI_GetImposedMotorDirection( pMCI[M1] );
9 ^ h9 K5 V7 u% ?" E% [9 L
}
4 a) k I4 G& ]2 @6 c' O4 O
) t$ w, N& M6 U" `# [
- w4 i L9 i2 J- e
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:35:16
a0a.1 32b0c
main函数while循环代码示例:
. t- i' n& [, B: `+ D1 z S
& X% E* l/ ]: y
1、电机以3000rpm运行,加速时间为2S;
: _* V( q8 P! K
2、程序启动电机运行,运行速度为3000rpm,在10S后停止转动;
0 K7 v6 b* b5 a- N5 i1 f5 T
3、电机停止前,读取电机相关参数(方向、速度、故障等);
# `( g8 a( j }( J
4、电机故障处理;
9 n6 R/ @; z( Y0 w
5、停止1S后电机重新运行,速度依然是3000rpm,不过速度为-3000rpm;
! t8 ^( q4 b: W
6、以上过程重复操作。
4 p4 a; m4 v8 c$ L+ z6 w
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:35:39
a0a.1 32b0c
参考代码截图
* z- H" Y. i8 n, D+ k7 y# n
! |, l9 n$ Q% |& Q
8 Y: G: O/ r' u3 [
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:36:19
a0a.1 32b0c
打开MotorControl Workbench观察相关参数和电机运行曲线
0 B% O5 K* R2 n4 B4 W5 y' k
点Monitor按钮观察电机相关参数
9 d" z |. T* _( \# c( \* m1 F
, E- ^. f3 U" b7 e# Y. E
点开后如下图所示
+ g U3 @$ K, y( g; S E: U
; z. y7 D Z2 L3 t
. `, m0 Z; |: t: z) G! ~
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:40:20
a0a.1 32b0c
点击connect按钮先进行连接,如连接不上按下板子上黑色复位按钮或更换串口端口号先进行测试。
; g! n3 T, q$ o. L4 ]
4 N' v. H/ n4 @+ I! {3 d
连接后如下图所示(可以看到SDK 5.3版本)
N( W0 [# @ [5 J0 m# \% A3 A
- o5 Y5 w) c) B3 J q
8 F/ b9 e2 d: l1 T7 f
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:40:56
a0a.1 32b0c
点Basic界面,可以看到板子的一些参数,也可以对板子进行启动、停止、清除故障等操作
1 o# k: z, B. e
: ?( Q- ], |' V* V$ w
( T- y) B* j+ k5 n/ X/ \
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:41:36
a0a.1 32b0c
点Advaced界面,可以看到PID一些参数以及速度或转矩模式,
4 ?- p5 n/ K+ Q6 i
也可以对板子进行启动、停止、清除故障及模式切换等操作
! S. r d% ?# d: s# S
7 F" J$ p Q& M6 i3 z
' x* C/ \! `0 l; y
- F9 a9 \" U& M1 D
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:42:55
a0a.1 32b0c
点Registers界面,可以看到PID、寄存器等相关参数以及最后读取参数时间等
a% L1 y7 q# l0 F+ _5 j
$ @- Q9 M: I$ y6 {- l0 E
8 R. \6 e7 E3 h( k
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:43:31
a0a.1 32b0c
点Configuration界面,可以对一些参数进行重新配置及重新装载
+ w( v3 w- K) r5 R
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:44:14
a0a.1 32b0c
点Plotter按钮,观察电机的转速运行曲线
4 e+ a: g4 s: D4 Z, {
赞
评论
回复
支持
反对
mmuuss586
回答时间:2019-1-9 11:44:38
a0a.1 32b0c
打开后如下图所示
2 t: }, O( S N+ v# Y* Q6 N
* S& Y% J5 B7 B
: u( R+ l. ?7 R0 w" W6 ]4 O/ W
赞
评论
回复
支持
反对
1
2
3
4
5
6
7
8
9
10
... 13
/ 13 页
下一页
所属标签
关于
意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号
手机版
快速回复
返回顶部
返回列表
调用此函数后hDurationms设置时间内当前速度变化到hFinalSpeed设置的目标速度4 e/ H2 u3 A& ~' F5 M
void MC_ProgramSpeedRampMotor1( int16_t hFinalSpeed, uint16_t hDurationms )
{* v0 u7 z. p2 ~2 `: u# U
MCI_ExecSpeedRamp( pMCI[M1], hFinalSpeed, hDurationms );
}
MC_ProgramTorqueRampMotor1(2000,2000); //设置为转矩模式,设置转矩指令; O2 ~# {- X k
调用此函数后hDurationms设置时间内当前转矩变化到hFinalTorque设置的目标转矩
void MC_ProgramTorqueRampMotor1( int16_t hFinalTorque, uint16_t hDurationms )
{$ B- z1 _4 b+ N, r" T4 J1 n" p- F" m1 g
MCI_ExecTorqueRamp( pMCI[M1], hFinalTorque, hDurationms );
}1 y3 h) B1 N0 {2 C4 b& B8 @
int16_t MC_GetMecSpeedReferenceMotor1(void)% S4 |9 v' \( ?+ k
{. F8 P, {7 k( @2 A
return MCI_GetMecSpeedRef01Hz( pMCI[M1] );( N+ l, b6 M3 j; L" _) s3 y7 Z
}7 k* Q# ]# m( n
' K+ r! {& N- O% r8 z/ w
Motor1SpeedAverage=MC_GetMecSpeedAverageMotor1(); //获取Motor1当前指令的平均机械转速,数字量1代表0.1HZ
int16_t MC_GetMecSpeedAverageMotor1(void) E- Y2 C! h# o" l1 ~
{
return MCI_GetAvrgMecSpeed01Hz( pMCI[M1] );/ e/ ~) B% i/ |/ C1 K6 X7 T$ H
}" z( W( T1 h2 U: ]
State_t MC_GetSTMStateMotor1(void)
{- R( s( Y& j; l6 I
return MCI_GetSTMState( pMCI[M1] );! @! p* q/ h; ?8 g, \" H
}
5 K2 g9 {5 [9 l2 g
uint16_t MC_GetOccurredFaultsMotor1(void)
{
return MCI_GetOccurredFaults( pMCI[M1] );
}0 i6 f, t9 Q- @' P8 p. u. y
调用此函数前,如果电机发生故障。电机停留在FAULT_OVER状态,并保留故障代码。调用后,状态机清除故障代码记录,并恢复到IDLE状态。
bool MC_AcknowledgeFaultMotor1( void )
{
return MCI_FaultAcknowledged( pMCI[M1] );
}
, r4 e8 o/ r( ?& L e
Motor1Dir=MC_GetImposedDirectionMotor1(); //返回最后一个指令设置的电机方向,如果最终的速度或转矩指令为负数返回-1,否则返回1' S* t6 e! I0 H+ O7 Q
int16_t MC_GetImposedDirectionMotor1(void)- k1 p* h- V2 Z& |8 Y, w
{
return MCI_GetImposedMotorDirection( pMCI[M1] );
}
) t$ w, N& M6 U" `# [
- w4 i L9 i2 J- e
1、电机以3000rpm运行,加速时间为2S;
2、程序启动电机运行,运行速度为3000rpm,在10S后停止转动;0 K7 v6 b* b5 a- N5 i1 f5 T
3、电机停止前,读取电机相关参数(方向、速度、故障等);
4、电机故障处理;
5、停止1S后电机重新运行,速度依然是3000rpm,不过速度为-3000rpm;
6、以上过程重复操作。4 p4 a; m4 v8 c$ L+ z6 w
8 Y: G: O/ r' u3 [
点Monitor按钮观察电机相关参数9 d" z |. T* _( \# c( \* m1 F
点开后如下图所示+ g U3 @$ K, y( g; S E: U
连接后如下图所示(可以看到SDK 5.3版本)
也可以对板子进行启动、停止、清除故障及模式切换等操作
' x* C/ \! `0 l; y
- F9 a9 \" U& M1 D