本帖最后由 TLLED 于 2018-9-1 22:40 编辑 实验4:基于MCSDK5.0 状态的切换。' h8 {# i6 t2 X, w8 i8 ~9 W 一、实验内容要求如下:! @/ i1 r" C2 m/ l3 R+ X5 z1 u5 l 6 l- q6 I; d( b" Z u- W6 H9 m- l 二、实验代码修改:/ x+ @0 ~8 |. ]( A 修改main.c代码,修改的部分如下(红色字体) int main(void) {6 p4 g! T: }# }6 X% \: V /* USER CODE BEGIN 1 */" ?; o" }2 U o0 } State_t ste; //定义变量 /* USER CODE END 1 */ 8 L8 G. w& V8 c3 C) k9 r e /* MCU Configuration----------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */7 |; t9 Y: ]+ M9 Z5 @+ c/ G( A' H HAL_Init();8 b7 R Y( x# K, I$ K8 Y' { l* i /* USER CODE BEGIN Init */ 5 P2 p, V; Y" ?2 H" k: e* G /* USER CODE END Init */. K, Y b0 v; W& N /* Configure the system clock */: z5 g! R0 S, G& a- R SystemClock_Config();& U7 l0 F/ m3 E0 g /* USER CODE BEGIN SysInit */ / P. T& N7 ]) ?! g y /* USER CODE END SysInit */ ]* {( g6 n1 e8 D5 l /* Initialize all configured peripherals */( A. |3 I1 _7 G, N0 P, Z: d MX_GPIO_Init(); MX_ADC1_Init(); MX_DAC_Init(); MX_TIM1_Init(); MX_USART2_UART_Init();' Y4 C, r7 h7 X4 C8 s, ] MX_MotorControl_Init();" F3 O+ U4 H# R5 X0 g; L5 { s " w; A: Z( ]; g2 B; w /* Initialize interrupts */ MX_NVIC_Init();. s* X! \- j7 ] /* USER CODE BEGIN 2 */+ i7 u$ K! `% U% a+ ~ MC_StartMotor1(); //启动电机$ I0 {/ @9 g4 g K' n% W7 R$ n HAL_Delay(1000); MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转. E' A5 T7 `* U4 {' ^( _+ V HAL_Delay(10000); //延时10s5 v0 U6 N ~+ A9 W& o& e MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转 HAL_Delay(2000);$ y( x% B o. u6 l /* USER CODE END 2 */ /* Infinite loop */& V' ^. z; ]6 P5 L /* USER CODE BEGIN WHILE */7 a6 Y' D K. k while (1)/ P+ }3 H; K- P+ c G+ y: N1 B& i {2 P: i% p/ w& E& T ste=MC_GetSTMStateMotor1(); //获取电机任务状态 if(ste==FAULT_OVER) //电机报错 { MC_AcknowledgeFaultMotor1(); //清除故障* r3 W; T9 Z. n. K) P9 g 5 H/ D' G8 y( f- T# ~ } else if(ste == IDLE) //恢复故障后,电机负3000转运行 {- \' m4 D; t; B# t, e6 V Q6 E MC_StartMotor1();8 A4 U0 `9 r, I& A/ t7 u( v MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000); }& V$ K$ u4 }! ]" Z- q . R) u4 p3 S6 x6 w4 J /* USER CODE END WHILE */0 F4 Z |# q7 U0 E5 T# |- A /* USER CODE BEGIN 3 */' A+ i! q3 }1 C //State t sts_motor1 = MCI_GetSTMStateMotor1();# z5 L7 F5 Q' ? //STM_GetFaultState(&STM[M1]); e3 ^+ Y7 p2 i4 a6 M( w }3 i1 r' T! E1 D/ l1 ` /* USER CODE END 3 */ }8 Z% M. S. z8 Q: R$ _# C 2 S3 O( }9 d- |4 x! q: Q 三、执行结果: & g# A& `& m3 F+ y , L! j/ u" Z n4 u- A ( l2 n! Z+ k& r6 a 9 D& W5 }7 F: W+ X* s1 n# M |
可以顺利切换,从3000到-3000...