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

【STM32电机培训】- 实验4:基于MCSDK5.0 状态的切换

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑
8 I1 J. W6 K* z" e  S" {* t: U; ~2 e! V& h7 [' Q
实验4:基于MCSDK5.0 状态的切换。) R7 U/ M  [/ R' t  i
一、实验内容要求如下:
  z7 f: ^/ ~+ ^  G 5.png . Q8 W* e5 h: m& V
1.png
5 o* D5 H/ y; @/ v2 X3 \% r 2.png
5 K" v3 A# B  r" O. W9 ~- {" h 3.png
1 E: j: N4 V/ {2 y0 Q 4.png
% Q( f8 N( ]% v7 O3 z7 S
9 \( I: U, V. Y& {7 Q, d二、实验代码修改:
! q; \" M- k- Q" S7 y' X修改main.c代码,修改的部分如下(红色字体)  M4 b% w( f8 P$ U
int main(void)4 k( v7 ^) d3 J5 h/ C' U
{( Y' J( U+ J/ w% Q. T
  /* USER CODE BEGIN 1 */+ m# m1 S! {4 W3 _/ T( u# h" A
  State_t  ste;     //定义变量
' m4 R& @( e# [2 \1 v2 n2 l6 B  /* USER CODE END 1 */
$ P% x) u4 i# p. `) W* p3 t7 ~" O+ U
  /* MCU Configuration----------------------------------------------------------*/
: _" |% t! p: f& N0 }9 P( L
6 [& Q) {& Y! k  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
4 E& l0 R' e7 E4 V  HAL_Init();0 u% [2 h' \! \- c3 Y2 }1 G

5 \8 o; p/ B( k  /* USER CODE BEGIN Init */
1 y1 G* i$ [. w; J+ U8 a# }1 Z
$ {9 i4 T( a& y* i1 d7 `  /* USER CODE END Init */3 W" G( M  r, Z
- V8 z. ]8 l5 h( u
  /* Configure the system clock */" E# R4 A1 U2 U  X( {9 k) u6 W  _( G, R
  SystemClock_Config();$ h( P6 y5 i6 u  H6 |
9 E3 E# i) s( V
  /* USER CODE BEGIN SysInit */$ n/ j9 ?1 [2 w7 a* f8 L

: q5 l2 Y; N% r. V8 [8 ~9 p  /* USER CODE END SysInit */  K6 @2 h' Z6 S5 K* I9 {8 w' M9 u

* ^2 q- ]5 Y+ y! ~4 U  /* Initialize all configured peripherals */  E1 d8 _$ J) i$ W7 U6 Y8 I% ~
  MX_GPIO_Init();
& V9 ]2 L7 x0 L/ ?  MX_ADC1_Init();
: [7 p- T. |% Z) q$ }6 c7 d+ J% X  MX_DAC_Init();4 K% E# g# I9 K
  MX_TIM1_Init();5 M: m4 M3 H& C- S( n6 G
  MX_USART2_UART_Init();
) p5 A+ L" m# G% M6 O  MX_MotorControl_Init();
; ]! ?5 m, E# V. E& R* {: q; y' e* f' y- D2 Q
  /* Initialize interrupts */
0 a& P9 G$ S, s- r9 m* R( R  MX_NVIC_Init();' X) I, d( Z: ], W$ g- M1 f
  /* USER CODE BEGIN 2 */. \( ^% [2 f9 t: ?  i, a
  MC_StartMotor1();                                                       //启动电机/ M6 }: n( C0 y8 c
  HAL_Delay(1000);
. j; K9 t% \4 I2 N6 ~; l7 L1 @3 D  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转
, ~4 ~3 U+ k2 ?3 m1 a3 @+ n9 Z  HAL_Delay(10000);                                                      //延时10s) T. v/ Y- F, m* ?# [4 Q. B
  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转" ]: I* s2 c- w
  HAL_Delay(2000);
4 Q1 R3 p& X* J, U# k! e! v0 D# H% l) c, P9 \2 v
  /* USER CODE END 2 */
, X1 Z. o+ }0 `3 c
- I1 I# c0 R" m' \# S" D0 w( ~8 y# o- D
  /* Infinite loop */
* ?2 w7 D, x0 \  /* USER CODE BEGIN WHILE */
) ~$ m  y6 [+ O) \7 ~. K( L  while (1)
7 f+ u1 X. Z. ^* a3 a, r  {2 a! T) z+ }- O2 w. k
    ste=MC_GetSTMStateMotor1();             //获取电机任务状态+ k* _) ]! j6 t6 i6 }) i
    if(ste==FAULT_OVER)                              //电机报错
0 C1 e$ {; a% i2 k& Z9 g! d8 H  c    {
( J4 J# p- M' _) o: |- Q- y      MC_AcknowledgeFaultMotor1();           //清除故障5 M& k# `) `) G3 r" @$ ~6 n, B8 v
      
  @3 \& n7 R" R4 J& q    }' ]) S9 q7 m7 M
    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行$ G# \) y# u8 e. o) t+ F/ {$ W
    {
& i- W- ]& Q  l/ G$ Q) K      MC_StartMotor1();
% }" w: n: e* l) W% n' i5 y      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);2 C: P( Z3 m: s+ b+ k/ [# I# k
    }: B7 u3 z' @! @2 D* F' [
+ E# S6 V6 w! J: H  C
  /* USER CODE END WHILE */7 T% a4 |  \5 Y! j7 h$ Y; }. y1 X
/ E0 J6 F& s$ I7 j! L
  /* USER CODE BEGIN 3 */
# Y' r: n9 v8 T( Y    //State t sts_motor1 = MCI_GetSTMStateMotor1();
" }. r$ l0 B# Q/ w. K    //STM_GetFaultState(&STM[M1]);
! H# f: P8 u# |6 D" s& k( q" e: Q: |2 R1 L$ c8 `& e* m

& c! z5 S: P- B+ Z  i8 |  }
& E+ o% T% K- {( ^) p7 g  /* USER CODE END 3 */
7 ~5 X, R) Z9 ~! k- G& }* p' l7 }. O2 M$ K- j2 ]  M
}

4 h7 W6 e8 ?1 F4 s1 ~7 R# ?, v
4 P3 v6 t4 b+ V( e+ j: t8 r; C
三、执行结果:
% z0 H% B9 Q, V! d; J$ I0 L! g 6.png 9 J; ?/ |5 R$ H* F% _7 C& g
7.png
# U# G6 e: I6 q$ z2 Q: {5 _; S" x" x1 x  j! z$ _' O

8 `3 l7 u/ y! Z6 S' q- Q/ Q; w
. @# D! \1 r( O, W/ B" U: m) L

" O! }+ y# C5 A& d3 r  c
2 G6 I& O6 F5 C
+ ?7 |4 q9 r, a; a2 ]' n

' @0 _" C$ l7 b8 P8 }0 r
赞 收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了  \7 M" v" m. p8 z# |
  1.   /* USER CODE BEGIN 2 */4 t/ u4 o. p2 |3 Q
  2.                         ! d0 Q! m0 q6 [6 x  A* \7 o% i
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);    J1 v$ L  P5 E( J1 a( v7 J
  4.         MC_StartMotor1();  * E& C6 ?  K' _; M* O" S/ q- k9 n
  5.   HAL_Delay(5000);                        ( S# b% T$ R5 M0 y+ H
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000); ( X, h( S# m$ n
  7.   
    8 r( j+ b  r9 D  s# M9 t
  8.   /* USER CODE END 2 */
复制代码
4 a1 B/ L" V6 p! F% [5 I8 L
可以顺利切换,从3000到-3000...
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版