本帖最后由 TLLED 于 2018-9-1 22:40 编辑 - _" z9 {3 T, V8 Q8 V. d5 C, F 实验4:基于MCSDK5.0 状态的切换。; s# s: h% @. A: b( \* v 一、实验内容要求如下:" y8 b k- c) ~2 U' b$ F5 B+ A $ I+ [6 i/ |6 H1 e+ g9 n 二、实验代码修改: 修改main.c代码,修改的部分如下(红色字体)) y$ ^. Q; u' z' {; | int main(void)7 Q$ }4 k1 p( r3 t) }1 I {7 a' p. V: j0 Q2 B- y6 e1 ?( c /* USER CODE BEGIN 1 */ State_t ste; //定义变量0 ~4 t' {+ J D2 U: T) X o5 X B# U& P: V /* USER CODE END 1 */ # P. r; Q- N& G0 D /* MCU Configuration----------------------------------------------------------*/6 j6 i9 m5 }3 o: P4 f2 g /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); , L9 n. }' o8 q5 K Z /* USER CODE BEGIN Init */ + F7 |; m2 a4 c( ^' A' v6 V /* USER CODE END Init */! [; L# |- a0 a% I' Z /* Configure the system clock */! e) Y; h7 { n+ F1 Q7 b8 x6 F' f( o SystemClock_Config();& R3 a5 \5 H, v9 [" } . J. Q+ C8 G' {/ M/ V /* USER CODE BEGIN SysInit */ * J2 B+ B+ a. [. E# l) N. t4 i /* USER CODE END SysInit */ /* Initialize all configured peripherals */3 m2 n7 s8 L, r! z MX_GPIO_Init(); MX_ADC1_Init(); MX_DAC_Init(); MX_TIM1_Init(); MX_USART2_UART_Init(); MX_MotorControl_Init();3 \4 i3 P, ^; g8 ]# f4 _0 ? /* Initialize interrupts */ MX_NVIC_Init();9 z, h$ v/ T, R) Y. B6 v /* USER CODE BEGIN 2 */ MC_StartMotor1(); //启动电机 HAL_Delay(1000); MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转 HAL_Delay(10000); //延时10s MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转7 @" }$ [; y8 c* n HAL_Delay(2000);9 {0 c) W2 J# m1 [: L /* USER CODE END 2 */ - Q5 T: P- j* @3 ^$ \9 s" Z8 Y, F5 D /* Infinite loop */ /* USER CODE BEGIN WHILE */+ ] z4 J# m$ x |' o2 A2 u. b1 r/ I while (1) {2 \1 C% M& R3 i+ `+ Z% B3 i ste=MC_GetSTMStateMotor1(); //获取电机任务状态# [6 Q4 @1 K. u) _. W# a5 @5 B if(ste==FAULT_OVER) //电机报错# c# l5 ^0 b; X9 P5 s! {) t. V {1 G- Q; O/ _' Q MC_AcknowledgeFaultMotor1(); //清除故障; S: N# x4 j/ i _5 ?9 }" T. p }% A8 y+ x1 Q1 W/ S& e else if(ste == IDLE) //恢复故障后,电机负3000转运行" i" d# d; W- Y3 {5 d- W { MC_StartMotor1(); MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */9 q+ O6 b |: O6 a R! R //State t sts_motor1 = MCI_GetSTMStateMotor1(); //STM_GetFaultState(&STM[M1]); 9 r/ u' f; C2 L }, S; u7 M% {' N /* USER CODE END 3 */ ; p: D" ]- y0 J0 {6 }+ x } 三、执行结果:. ^( }( s7 s1 R- j6 X ( b, ]4 v1 P2 x ( u0 L+ D$ a' x! T) e4 s8 ^( s " ^ t- g8 n4 X8 s |
可以顺利切换,从3000到-3000...