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

基于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); //设置为速度模式,设置速度指令+ ~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& RMC_ProgramTorqueRampMotor1(2000,2000);         //设置为转矩模式,设置转矩指令; O2 ~# {- X  k
调用此函数后hDurationms设置时间内当前转矩变化到hFinalTorque设置的目标转矩
, m9 K; k* C. j6 W$ _" Zvoid 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
Motor1Speed=MC_GetMecSpeedReferenceMotor1();    //获取Motor1当前指令的机械转速,数字量1代表0.1HZ7 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 ]: Rint16_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
Motor1State=MC_GetSTMStateMotor1(); //获取Motor1状态机的电机状态
. p& S* S* k" m* Z" CState_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 27.png
4 c1 g+ s& S; S: g& \5 K2 g9 {5 [9 l2 g
mmuuss586 回答时间:2019-1-9 11:34:31
Motor1Faults=MC_GetOccurredFaultsMotor1();//获取Motor1发生过的故障代码       
" f: r3 X* ^' \8 B* E- B- euint16_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
28.png
5 y# X, w" @0 F* Y
, U: ^1 p/ y! I9 \) r& [
mmuuss586 回答时间:2019-1-9 11:34:47
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
main函数while循环代码示例:
. t- i' n& [, B: `+ D1 z  S
& X% E* l/ ]: y1、电机以3000rpm运行,加速时间为2S;
: _* V( q8 P! K2、程序启动电机运行,运行速度为3000rpm,在10S后停止转动;0 K7 v6 b* b5 a- N5 i1 f5 T
3、电机停止前,读取电机相关参数(方向、速度、故障等);
# `( g8 a( j  }( J4、电机故障处理;
9 n6 R/ @; z( Y0 w5、停止1S后电机重新运行,速度依然是3000rpm,不过速度为-3000rpm;
! t8 ^( q4 b: W6、以上过程重复操作。4 p4 a; m4 v8 c$ L+ z6 w
mmuuss586 回答时间:2019-1-9 11:35:39
参考代码截图
* z- H" Y. i8 n, D+ k7 y# n 29.png
! |, l9 n$ Q% |& Q8 Y: G: O/ r' u3 [
mmuuss586 回答时间:2019-1-9 11:36:19
打开MotorControl Workbench观察相关参数和电机运行曲线0 B% O5 K* R2 n4 B4 W5 y' k
点Monitor按钮观察电机相关参数9 d" z  |. T* _( \# c( \* m1 F
30.png
, E- ^. f3 U" b7 e# Y. E点开后如下图所示+ g  U3 @$ K, y( g; S  E: U
31.png ; z. y7 D  Z2 L3 t

. `, m0 Z; |: t: z) G! ~
mmuuss586 回答时间:2019-1-9 11:40:20
点击connect按钮先进行连接,如连接不上按下板子上黑色复位按钮或更换串口端口号先进行测试。
; g! n3 T, q$ o. L4 ] 32.png
4 N' v. H/ n4 @+ I! {3 d连接后如下图所示(可以看到SDK 5.3版本)
  N( W0 [# @  [5 J0 m# \% A3 A 33.png
- o5 Y5 w) c) B3 J  q
8 F/ b9 e2 d: l1 T7 f
mmuuss586 回答时间:2019-1-9 11:40:56
点Basic界面,可以看到板子的一些参数,也可以对板子进行启动、停止、清除故障等操作1 o# k: z, B. e
35.png
: ?( Q- ], |' V* V$ w
( T- y) B* j+ k5 n/ X/ \
mmuuss586 回答时间:2019-1-9 11:41:36
点Advaced界面,可以看到PID一些参数以及速度或转矩模式,
4 ?- p5 n/ K+ Q6 i也可以对板子进行启动、停止、清除故障及模式切换等操作
! S. r  d% ?# d: s# S 35.png
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
点Registers界面,可以看到PID、寄存器等相关参数以及最后读取参数时间等
  a% L1 y7 q# l0 F+ _5 j 36.png $ @- Q9 M: I$ y6 {- l0 E

8 R. \6 e7 E3 h( k
mmuuss586 回答时间:2019-1-9 11:43:31
点Configuration界面,可以对一些参数进行重新配置及重新装载 37.png + w( v3 w- K) r5 R
mmuuss586 回答时间:2019-1-9 11:44:14
点Plotter按钮,观察电机的转速运行曲线 38.png 4 e+ a: g4 s: D4 Z, {
mmuuss586 回答时间:2019-1-9 11:44:38
打开后如下图所示
2 t: }, O( S  N+ v# Y* Q6 N 39.png
* S& Y% J5 B7 B
: u( R+ l. ?7 R0 w" W6 ]4 O/ W

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版