|
本帖最后由 TLLED 于 2018-9-1 22:40 编辑 # `) G! ^/ q, X3 \+ `) _ 实验4:基于MCSDK5.0 状态的切换。$ ` K; |2 V: @2 ? 一、实验内容要求如下:1 U8 b# x& Q) z; T
二、实验代码修改:4 {. h& e5 r7 f( f! w# @ 修改main.c代码,修改的部分如下(红色字体)' u- ^6 ?" I- t6 F! n5 r9 \1 G$ O5 A8 v! d int main(void) {5 u* M% s g1 V9 i. u /* USER CODE BEGIN 1 */ State_t ste; //定义变量 s- P" J7 V+ L; t) R" l, z /* USER CODE END 1 */* R0 g& N0 A: c3 ^% z) T2 f" t /* MCU Configuration----------------------------------------------------------*/ - _* i* E0 w& M /* Reset of all peripherals, Initializes the Flash interface and the Systick. */: ^* W, s( ?6 n& ` HAL_Init();4 Z5 y9 v! u" b& l& A; X+ f / U' ?5 {1 m" V: T B! f /* USER CODE BEGIN Init */ , m" F- U5 P" Q' y9 g$ ~; E /* USER CODE END Init */ /* Configure the system clock */+ m4 k3 I9 a% o7 l SystemClock_Config();! X( R0 b" R/ i5 G3 J /* USER CODE BEGIN SysInit */ ; X7 t8 _, o5 l, U0 [ h /* USER CODE END SysInit */ /* Initialize all configured peripherals */' g2 W8 l& H: I4 ?9 ` MX_GPIO_Init(); MX_ADC1_Init(); MX_DAC_Init(); MX_TIM1_Init();1 U+ l% f7 k4 e: p& v1 I MX_USART2_UART_Init();: F3 f/ t5 Y. l0 i. Y/ x MX_MotorControl_Init();/ b5 V/ n3 j. F2 y5 S; P /* Initialize interrupts */' b7 D2 E* @: {. u2 P/ @! S# ^6 ` MX_NVIC_Init();8 i" Q: Y9 I: A( G5 m /* USER CODE BEGIN 2 */, G+ z$ V* ^3 C: A2 G3 @ MC_StartMotor1(); //启动电机 L- R$ l N6 i/ }2 O( [2 r9 f HAL_Delay(1000); MC_ProgramSpeedRampMotor1(3000/6,1000); //正转3000转5 |8 p$ n& b1 q- C HAL_Delay(10000); //延时10s1 K& C+ O# X) O0 ?/ c& N" } MC_ProgramSpeedRampMotor1(-3000/6,1000); //反转3000转9 m% _' f. M4 B& K6 P5 m0 _8 @6 Q HAL_Delay(2000); ! w* `0 o; i% m7 }* x1 K* i. q3 I /* USER CODE END 2 */ /* Infinite loop */, p' d9 }3 C% A) ^1 q2 | /* USER CODE BEGIN WHILE */ while (1) {5 {) S# ^$ z1 t* I/ n ste=MC_GetSTMStateMotor1(); //获取电机任务状态 if(ste==FAULT_OVER) //电机报错8 G2 Y+ E; Y! z0 A { _5 W( \: p- x8 L' L( b3 q C MC_AcknowledgeFaultMotor1(); //清除故障 ) ]( Q/ N: `- c+ r' b }0 S; j5 U7 S3 G( |5 Y else if(ste == IDLE) //恢复故障后,电机负3000转运行 { MC_StartMotor1(); MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);7 {0 V! m7 @5 e7 }/ e }2 A1 |* ]. K m /* USER CODE END WHILE */ 6 i) K3 U, h$ d- G /* USER CODE BEGIN 3 */ //State t sts_motor1 = MCI_GetSTMStateMotor1(); //STM_GetFaultState(&STM[M1]); 4 D" g; | K' q0 S$ L+ ? }* b; R2 _& V) o o2 }, p /* USER CODE END 3 */9 W. g( C* u; O( C7 o3 q: V # o0 `; N- c$ b } + i! [' M6 {& A4 x" |5 P 三、执行结果:! i" ~, {$ E6 o. U5 e3 B' D
" b5 C! j5 N$ A 5 D0 S1 m4 n4 x4 J$ ]& k' A; _ 2 B) E/ ?5 P. C w& X* f . C% |3 ]: c( X( q |
微信公众号
手机版
可以顺利切换,从3000到-3000...