
本帖最后由 TLLED 于 2018-9-1 22:40 编辑 % G# T0 k1 [) D& l# g4 a ) D# C! r) d6 k1 \: n4 Q; \: G 实验4:基于MCSDK5.0 状态的切换。) W8 P5 q1 e/ T8 U" N/ }! w 一、实验内容要求如下: ![]() ![]() ![]() ![]() ![]() ( k% u" @0 J& Y7 c# F- P 二、实验代码修改:' n$ T! \& z3 `1 z 修改main.c代码,修改的部分如下(红色字体) int main(void) {4 V4 t3 E. v; o- w) l /* USER CODE BEGIN 1 */* s: x0 n+ n8 q State_t ste; //定义变量 /* USER CODE END 1 */ 2 k! Y0 Y5 a- I- _9 n /* MCU Configuration----------------------------------------------------------*/$ E- M; s/ e7 G /* Reset of all peripherals, Initializes the Flash interface and the Systick. *// R5 ]8 f( D( _3 h( g# P0 ? HAL_Init();* O- r- K. T# a, | 0 c* c# v+ E/ V* @ /* USER CODE BEGIN Init */ 6 V. A9 d) Y" U Z' k- Z% L /* USER CODE END Init */ /* Configure the system clock */$ ]5 H" j8 b M& C; v SystemClock_Config();) h$ Z) K- e6 n. g. K8 ]( b /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */' [2 y ?' {% n6 q0 h# v /* Initialize all configured peripherals */+ p# s L$ N0 q MX_GPIO_Init();7 u! i$ e! v6 _" w K* F5 t6 {- T MX_ADC1_Init();1 j. Q# `- y |- ~0 I/ l9 \ MX_DAC_Init(); MX_TIM1_Init(); MX_USART2_UART_Init(); MX_MotorControl_Init();+ r C1 W& a& C /* Initialize interrupts */, P7 c% [4 M9 h9 L! [; U* [ MX_NVIC_Init(); /* USER CODE BEGIN 2 */ MC_StartMotor1(); //启动电机0 Z" g( ~. ]3 o HAL_Delay(1000);6 d6 I9 j' i1 \( i* N- j$ f MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转5 V4 t! x0 b, w4 t% x K HAL_Delay(10000); //延时10s5 R5 v8 z, n' C6 L8 h. D$ m MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转- T. U( P) B% f3 _) T HAL_Delay(2000);& x7 E& |5 z$ Y : n, a9 q( n* ]: V /* USER CODE END 2 */, K/ M6 \5 T6 n/ C: `+ Q /* Infinite loop */; [8 E R( V9 ~8 J /* USER CODE BEGIN WHILE *// k: q: n3 H' J1 P$ p9 ~4 Q while (1)9 r, ]- K5 h- `" |& ?9 Y4 G0 C {; J) x g+ H2 m) b8 F ste=MC_GetSTMStateMotor1(); //获取电机任务状态 if(ste==FAULT_OVER) //电机报错. A! e/ a' Q2 ~- j4 Y5 w/ m9 h9 J { MC_AcknowledgeFaultMotor1(); //清除故障 ; u8 S+ a: P3 m* K5 V" u }* J; |7 X1 I! g+ c6 R: _3 C else if(ste == IDLE) //恢复故障后,电机负3000转运行- `) c8 P9 C' C T7 D- l { MC_StartMotor1(); MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000); } / Y6 x! o2 R/ M /* USER CODE END WHILE */6 @; o$ z+ q; c9 q& S H! r /* USER CODE BEGIN 3 */) P r/ d9 V7 { Z //State t sts_motor1 = MCI_GetSTMStateMotor1();4 a) Y# h6 R& Y# T& l/ Y" K //STM_GetFaultState(&STM[M1]); . M3 w; `; i2 a8 g$ J! S } /* USER CODE END 3 */ } 1 R/ T7 O4 |- W" _# y 三、执行结果: ![]() ![]() # L5 b) ?' I8 s5 t2 L / [$ P& E9 v8 ?; K' W |
可以顺利切换,从3000到-3000...