本帖最后由 TLLED 于 2018-9-1 22:40 编辑 2 I2 V# {$ H. b# d 实验4:基于MCSDK5.0 状态的切换。 一、实验内容要求如下:0 V: ~/ r. s# D% e ) y; l0 }& ^ H, t: M2 C 二、实验代码修改: 修改main.c代码,修改的部分如下(红色字体) int main(void)1 w6 F: ?$ o, q% E K5 R" E8 e {# V2 g5 A) L t6 O8 l* a$ R) n8 E /* USER CODE BEGIN 1 */. C: I$ o$ u+ `! k# ` State_t ste; //定义变量 /* USER CODE END 1 */ /* MCU Configuration----------------------------------------------------------*/ ! D, g n6 `6 q e0 l6 l4 O /* Reset of all peripherals, Initializes the Flash interface and the Systick. */( [! s7 Y" i" g* h# ]7 `8 N HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */) [2 Y2 w& i) @0 [/ b /* Configure the system clock */ SystemClock_Config();; i3 s4 X& _3 p4 \8 O1 P% p, a /* USER CODE BEGIN SysInit */# }: c' |: P! o! c' U3 ^- U: t8 b7 w /* USER CODE END SysInit */- |# o8 F, [4 n9 ~ & {; z+ e; F) Q: Y% S; a /* Initialize all configured peripherals */ MX_GPIO_Init();8 ]6 h( x7 p/ ~5 A MX_ADC1_Init(); MX_DAC_Init();8 @0 q* ~5 x% B MX_TIM1_Init(); MX_USART2_UART_Init(); MX_MotorControl_Init();( c+ d" O, k% `# p& ]1 u # L" `1 q! B4 o) p% v4 { /* Initialize interrupts */ MX_NVIC_Init(); /* USER CODE BEGIN 2 */ MC_StartMotor1(); //启动电机 HAL_Delay(1000);% x+ B3 S& y# l: O0 Y# @ MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转" Q A* F) h* ~: U6 Z. } O HAL_Delay(10000); //延时10s MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转 HAL_Delay(2000);, x- j% N, |3 C2 {* Y8 S /* USER CODE END 2 */6 a% V* i( B, i+ y" h, J8 u ' u! p# _1 v% L. O1 ]) S; O /* Infinite loop */7 g5 F, k5 A' x9 B- g' E& R /* USER CODE BEGIN WHILE */0 K. K# Z7 L! X. e8 X' U- V) i while (1)1 ]" @5 D. C% {+ |3 U7 q% S8 M+ @ { ste=MC_GetSTMStateMotor1(); //获取电机任务状态) |3 @+ s9 C. t" a2 [3 j if(ste==FAULT_OVER) //电机报错0 L! E9 f0 v/ _3 v% @; u( T# a {4 P" W j: M2 ^! v: F |, }% n MC_AcknowledgeFaultMotor1(); //清除故障" i# G4 D5 a; f: F - x+ G8 K& m$ t. N }& N8 s W7 b9 t: n4 [8 Z, T else if(ste == IDLE) //恢复故障后,电机负3000转运行 {4 e2 B7 q: _. c/ u1 O0 l MC_StartMotor1(); MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000); } /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ //State t sts_motor1 = MCI_GetSTMStateMotor1();* j: c! @. f2 x b) C9 f3 Z //STM_GetFaultState(&STM[M1]);" u2 c1 T: u8 k) G f9 U: b L! c4 ~2 _ 2 y0 P( W8 z2 `, W! O } /* USER CODE END 3 */3 V/ }2 C$ R5 v6 `) M* }, f }0 E+ ?( @4 y9 r9 X/ c a ' {5 x5 T& n; y* O1 { 三、执行结果: ' i& h8 V; O) r h5 N K0 D 7 v! U5 m( x" n! d 4 t& G2 r/ n* G; t, ?# } |
可以顺利切换,从3000到-3000...