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

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

[复制链接]
TLLED 发布时间:2018-9-1 22:40
本帖最后由 TLLED 于 2018-9-1 22:40 编辑
8 o# ^- S  F+ b4 B# `) G! ^/ q, X3 \+ `) _
实验4:基于MCSDK5.0 状态的切换。$ `  K; |2 V: @2 ?
一、实验内容要求如下:1 U8 b# x& Q) z; T
5.png " k: l2 G% `# U" E
1.png
0 e. _$ Q+ ~& n7 T! G# l3 D: A# a 2.png
5 G" Q, n3 _7 g8 c5 H' Q 3.png
6 }' P  D9 p2 q1 [- f0 j( y4 h 4.png
8 \8 A/ A) N* l2 ]& o$ S$ z
3 C7 S; L" c; R* b$ ]2 C# T4 J二、实验代码修改:4 {. h& e5 r7 f( f! w# @
修改main.c代码,修改的部分如下(红色字体)' u- ^6 ?" I- t6 F! n5 r9 \1 G$ O5 A8 v! d
int main(void)
9 D6 c7 n$ z5 _1 p8 N5 X) y+ r: P{5 u* M% s  g1 V9 i. u
  /* USER CODE BEGIN 1 */
0 I0 m# j6 y- D' }  State_t  ste;     //定义变量  s- P" J7 V+ L; t) R" l, z
  /* USER CODE END 1 */* R0 g& N0 A: c3 ^% z) T2 f" t

' n6 J9 B( N) F2 T  /* MCU Configuration----------------------------------------------------------*/
) e! G4 g, g6 F" i- K2 g9 x7 e- _* i* E0 w& M
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */: ^* W, s( ?6 n& `
  HAL_Init();4 Z5 y9 v! u" b& l& A; X+ f
/ U' ?5 {1 m" V: T  B! f
  /* USER CODE BEGIN Init */
3 B5 E% Q$ C+ I2 q4 `0 \; G' Y; P, m" F- U5 P" Q' y9 g$ ~; E
  /* USER CODE END Init */
( w4 y( g" c/ \* L( f# _& d' \. t) v
! o/ [! {/ G7 I7 `- W* o3 j2 m  /* Configure the system clock */+ m4 k3 I9 a% o7 l
  SystemClock_Config();! X( R0 b" R/ i5 G3 J

0 |2 A" B  ]. ]  /* USER CODE BEGIN SysInit */
' E  ?9 b; [9 v8 |3 |" k/ U: {; X7 t8 _, o5 l, U0 [  h
  /* USER CODE END SysInit */
0 Y! i, V, V- K0 g: e  H  T) t
" n" R' ?' o4 Y3 y  /* Initialize all configured peripherals */' g2 W8 l& H: I4 ?9 `
  MX_GPIO_Init();
/ a% @3 g1 R) X4 f4 c* M( F  MX_ADC1_Init();
" Z* Y; p: g+ a, E8 e5 A& M9 _  MX_DAC_Init();
1 j, V  m) F7 i2 B4 n  MX_TIM1_Init();1 U+ l% f7 k4 e: p& v1 I
  MX_USART2_UART_Init();: F3 f/ t5 Y. l0 i. Y/ x
  MX_MotorControl_Init();/ b5 V/ n3 j. F2 y5 S; P

7 \$ E) X: i3 y$ N  _/ o0 e  /* Initialize interrupts */' b7 D2 E* @: {. u2 P/ @! S# ^6 `
  MX_NVIC_Init();8 i" Q: Y9 I: A( G5 m
  /* USER CODE BEGIN 2 */, G+ z$ V* ^3 C: A2 G3 @
  MC_StartMotor1();                                                       //启动电机  L- R$ l  N6 i/ }2 O( [2 r9 f
  HAL_Delay(1000);
! ?9 p6 A* j+ I% }- n- U) V8 B+ O  p  MC_ProgramSpeedRampMotor1(3000/6,1000);  //正转3000转5 |8 p$ n& b1 q- C
  HAL_Delay(10000);                                                      //延时10s1 K& C+ O# X) O0 ?/ c& N" }
  MC_ProgramSpeedRampMotor1(-3000/6,1000);    //反转3000转9 m% _' f. M4 B& K6 P5 m0 _8 @6 Q
  HAL_Delay(2000);
5 g, k5 I! U9 L1 N& ^2 v2 M! w* `0 o; i% m7 }* x1 K* i. q3 I
  /* USER CODE END 2 */
/ t$ h3 T0 _, M8 K1 ^; j1 }
! x8 L& ]: o! j$ i- G1 O
& S( @6 f: ~6 ?- R" G  /* Infinite loop */, p' d9 }3 C% A) ^1 q2 |
  /* USER CODE BEGIN WHILE */
3 i+ a& o! w% N! P. X9 e  while (1)
. i$ _* e8 m) S  {5 {) S# ^$ z1 t* I/ n
    ste=MC_GetSTMStateMotor1();             //获取电机任务状态
) C9 L! A# g5 |    if(ste==FAULT_OVER)                              //电机报错8 G2 Y+ E; Y! z0 A
    {  _5 W( \: p- x8 L' L( b3 q  C
      MC_AcknowledgeFaultMotor1();           //清除故障
% J. U; w8 i! R/ ]: U% z      ) ]( Q/ N: `- c+ r' b
    }0 S; j5 U7 S3 G( |5 Y
    else if(ste == IDLE)                                  //恢复故障后,电机负3000转运行
7 U7 _% r+ C! R2 W4 `    {
: X& d% t/ b1 Y& F+ S      MC_StartMotor1();
" n# ^  D$ c( ?9 o$ G2 V4 {# B      MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);7 {0 V! m7 @5 e7 }/ e
    }2 A1 |* ]. K  m

8 ^0 O% B: \7 I; q, i# n  /* USER CODE END WHILE */
# X$ ]# A% n* w$ Y+ P- F" Q6 i) K3 U, h$ d- G
  /* USER CODE BEGIN 3 */
2 r0 C, Q3 A" y    //State t sts_motor1 = MCI_GetSTMStateMotor1();
- m) n$ a# b) D    //STM_GetFaultState(&STM[M1]);
; U5 {9 J  i' u, U7 v% n! |
  R6 ?" A3 k: L7 a/ [/ z) {4 D" g; |  K' q0 S$ L+ ?
  }* b; R2 _& V) o  o2 }, p
  /* USER CODE END 3 */9 W. g( C* u; O( C7 o3 q: V
# o0 `; N- c$ b
}

" L* d5 f7 |% X) ?) H3 z
+ i! [' M6 {& A4 x" |5 P
三、执行结果:! i" ~, {$ E6 o. U5 e3 B' D
6.png
; U5 Q& P. q; R! N- \; H 7.png
, n5 L0 A! w* k: y4 N
. W" B. _0 x' x; `3 q" b5 C! j5 N$ A
5 D0 S1 m4 n4 x4 J$ ]& k' A; _
2 B) E/ ?5 P. C  w& X* f

* J- B0 n) F7 p% k6 h5 `
. C% |3 ]: c( X( q

! b) R" p3 f$ o" G  C3 G; h0 w
收藏 评论2 发布时间:2018-9-1 22:40

举报

2个回答
STMCU-管管 回答时间:2018-9-11 14:28:44
谢谢分享
xiaozhou       回答时间:2020-12-30 17:22:30
好尴尬啊,为啥我的出不了故障,只添加了
/ ]2 d1 K  y& u; i5 [- a
  1.   /* USER CODE BEGIN 2 */
    0 {0 @# E$ D+ o
  2.                         
    9 ~) K; `' h( L0 C
  3.   MC_ProgramSpeedRampMotor1(3000/6,1000);  
    ( c) {& G6 K" w/ t$ q2 B
  4.         MC_StartMotor1();  . u. c( P1 G& x  V
  5.   HAL_Delay(5000);                        
    6 T" c; J3 M* _7 P/ i
  6.   MC_ProgramSpeedRampMotor1(-3000/6,1000); " u% k9 T3 B! a3 n! R2 b( G
  7.   
    3 @' g) A) b7 e: G9 Y
  8.   /* USER CODE END 2 */
复制代码

4 C* b) v2 n; Y( r$ y, H" S- S可以顺利切换,从3000到-3000...

所属标签

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