STM32电机控制--API函数应用
生活随笔
收集整理的這篇文章主要介紹了
STM32电机控制--API函数应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
基于ST MC SDK 5.2版本的應用一般的電機操作調用API就足夠控制基本的電機運行下圖是API函數的列表:
1. 應用一 :API速度的控制-控制電機的啟動停止
程序啟動后,電機以3000RMP的速度運行10S后停止 停止5S后,電機重新以3000RPM轉速運行10S后停止 以上過程重復操作注意:速度指令參數是以0.1Hz為單位,3000RPM=3000/6(0.1Hz)
在MotorControl Workbench 5.2.0生成的程序基礎上添加代碼,在main.c中添加
/* USER CODE BEGIN PFP */ /* Private function prototypes -----------------------------*//* USER CODE END PFP *//* USER CODE BEGIN 0 */ void Delay_Handler(void) {delay_cnt++;if(delay_cnt>2000) //1s計時{delay_cnt=0;if(delay_start_flag==0x30) //啟動10s計時{delay_cnt1++;if(delay_cnt1>9) //10S{delay_cnt1=0;delay_start_flag=0x20; delay_10s_flag=1; //10S時間到標志位} }else if(delay_start_flag==0x20) //啟動5s計時{delay_cnt1++;if(delay_cnt1>4) //5S{delay_cnt1=0;delay_start_flag=0x30;delay_5s_flag=1; //5S時間到標志位}} } } /* USER CODE END 0 */int main(void)中
/* USER CODE BEGIN 2 */MC_ProgramSpeedRampMotor1(3000/6,1000); //1s內加速到3000RPMMC_StartMotor1(); //啟動電機/* USER CODE END 2 */ /* USER CODE BEGIN 3 */if(delay_10s_flag==1) //10S{MC_StopMotor1(); //停止電機運行delay_10s_flag=0;}if(delay_5s_flag==1) //5S{MC_StartMotor1();delay_5s_flag=0;}在stm32f4xx_mc_it.c中添加
滴答定時中斷程序里面調用定義的函數Delay_Handler(void);
添加完后編譯下載即可實現3000RPM運行10S停止5S運行10S…的循環
2. 應用二 :PI組件接口函數做在線參數修改
在程序中修改速度PI值 修改為原始值的2倍 修改為原始值的0.3倍 觀察參數修改后的速度曲線在MotorControl Workbench 5.2.0生成的程序基礎上添加代碼,在main.c中添加
添加頭文件mc_extended_api.h
/* USER CODE BEGIN Includes */ #include "mc_extended_api.h" /* USER CODE END Includes */變量定義
/* USER CODE BEGIN PV */ /* Private variables ---------------------------------------------------------*/ MCT_Handle_t *pMctHdl; //定義的變量 static int16_t Speed_Kp,Speed_Ki; /* USER CODE END PV */main函數中添加
/* USER CODE BEGIN 2 */pMctHdl = GetMCT(M1);Speed_Kp= PID_GetKP(pMctHdl->pPIDSpeed);Speed_Ki= PID_GetKI(pMctHdl->pPIDSpeed);PID_SetKP(pMctHdl->pPIDSpeed,Speed_Kp*2);PID_SetKI(pMctHdl->pPIDSpeed,Speed_Ki*2);/* USER CODE END 2 */編譯下載并查看速度曲線
- 原始倍數的時候
- 2倍PI的時候
- 0.3倍PI的時候
3. 應用三 :基于MC SDK狀態的切換
速度正轉3000rpm 速度立刻反轉-3000rpm 產生狀態報錯,需要程序返回報錯信息 清除報錯信息,返回到IDLE狀態 然后繼續執行反轉-3000rpm速度指令
這個實驗一開始是采用的HALL傳感器來測試,但是發現速度能進行正常切換,不會報故障停機,然后換了無傳感器模式的之后,就會報速度反饋錯誤的故障停機,下邊是基于無傳感器模式的:
在MotorControl Workbench 5.2.0生成的程序(Sensorless)基礎上添加代碼,在main.c中添加
main函數中添加
/* USER CODE BEGIN 2 */MC_ProgramSpeedRampMotor1(3000/6,1000); MC_StartMotor1(); HAL_Delay(5000); MC_ProgramSpeedRampMotor1(-3000/6,1000); /* USER CODE END 2 */速度正轉3000rpm后立刻反轉-3000rpm,產生狀態報錯(速度反饋),需要程序返回報錯信息
狀態報錯,需要程序返回報錯信息,清除報錯信息,返回到IDLE狀態,然后繼續執行反轉-3000rpm速度指令
程序添加,main函數中
/* USER CODE BEGIN 1 */ State_t sts_motor1; /* USER CODE END 1 */ /* USER CODE BEGIN 3 */sts_motor1 = MC_GetSTMStateMotor1(); //獲取電機狀態if(sts_motor1 == FAULT_OVER) //電機報錯{MC_AcknowledgeFaultMotor1(); //清除故障,返回到IDLE狀態}else if(sts_motor1 == IDLE) //繼續執行反轉-3000rpm速度指令{MC_StartMotor1();MC_ProgramSpeedRampMotor1(MC_GetLastRampFinalSpeedMotor1(), 1000);}
總結
以上是生活随笔為你收集整理的STM32电机控制--API函数应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑思维训练500题(带答案)
- 下一篇: 机械计算机辅助设计考研,华科机械考研