本帖最后由 TLLED 于 2018-9-1 22:40 编辑 " M+ [8 G& v6 H/ |& Z4 R 实验4:基于MCSDK5.0 状态的切换。0 p. J+ j J7 R2 V5 P6 F' L! U8 U 一、实验内容要求如下: 二、实验代码修改:# g% @. i! A& f 修改main.c代码,修改的部分如下(红色字体) int main(void)& U% M7 L2 m9 `5 Y( ]3 J, t# q1 P3 E { /* USER CODE BEGIN 1 */3 N% `7 c" M0 B7 U- i State_t ste; //定义变量 /* USER CODE END 1 */ I* l2 L2 `4 g2 s- |5 q" `; x 0 N, M! c6 O7 `. J' I! T* f/ ] /* MCU Configuration----------------------------------------------------------*/8 q7 G7 M: \3 ~: U+ E9 m5 {+ ] 3 b( |/ J# o$ z. ~3 T /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init();* f2 }. g& h) o5 T! S" K1 L 3 |% s" m8 }2 V7 _5 H /* USER CODE BEGIN Init */5 s5 L8 M' R0 T" u$ _* c /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */2 z6 }* E4 M5 v: v6 Y3 g T) k2 ? /* USER CODE END SysInit */6 e7 C5 @( X2 f& y# g2 T5 B) o 0 s7 e ] f6 G) P* d; G /* Initialize all configured peripherals */! o" O. M |+ I7 L8 J MX_GPIO_Init(); MX_ADC1_Init(); MX_DAC_Init();, ^! a. s8 z7 [8 c MX_TIM1_Init();, r0 x2 z j y- H5 J7 R MX_USART2_UART_Init();" |0 Y; ^" @) f, [+ L- j MX_MotorControl_Init(); /* Initialize interrupts */0 Y7 y3 Q7 B% ]/ Q MX_NVIC_Init(); /* USER CODE BEGIN 2 *// j! I8 v. z3 ] j- w MC_StartMotor1(); //启动电机 HAL_Delay(1000); MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转2 {! j @& K( k" s HAL_Delay(10000); //延时10s+ ^4 X! }. r" ]" g1 [8 b S MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转6 u- x$ W; H% r* w- R- } HAL_Delay(2000);9 u6 L: }: m, \7 X1 K: f) z / s0 E! M/ X0 U& O1 s* h3 b) r /* USER CODE END 2 */ 1 m2 [# d) ?% W9 N /* Infinite loop */ /* USER CODE BEGIN WHILE *// N- W, x. Y# p! [ while (1) {: U& l* D% g3 K! [& j ste=MC_GetSTMStateMotor1(); //获取电机任务状态 if(ste==FAULT_OVER) //电机报错 { MC_AcknowledgeFaultMotor1(); //清除故障 } else if(ste == IDLE) //恢复故障后,电机负3000转运行 Q0 V4 _# c( M2 N% q% g4 R {7 S1 {7 s) u( w/ m* ^ E MC_StartMotor1(); MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000); } # g, _1 v- a' B2 y0 V" ?. k /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */5 [7 ^$ J. y; x7 U //State t sts_motor1 = MCI_GetSTMStateMotor1();/ b& N s1 Q% k0 j; d9 s* g" g6 J //STM_GetFaultState(&STM[M1]); $ J" i R0 g; w- s8 T4 e: i } /* USER CODE END 3 */7 |% T4 O) x& z# S+ T* v! ~( R7 i7 ~& n! a 0 N1 \0 y1 J! r% I3 W( l+ h0 k }% [6 c& i8 z; R2 s8 F 三、执行结果: 0 {/ \" r8 X" Z ( W% L% X- E4 ^ 1 @+ c W+ J. \5 @: n |
可以顺利切换,从3000到-3000...