欧美一区不卡二区不卡三区,欧美另类日韩,日韩中文字幕免费版,亚洲一区二区免费看,欧美天天,亚洲欧美另类专区


當前位置:底盤 >> 行業資訊    

STM32CubeMX配置及測速驅動代碼

編輯:創澤底盤      發布時間:2022/9/1      來源:COONEO

根據NANO驅動板的原理圖,找到兩路電機對應的四路編碼器接口對應STM32上的IO口,并找到其對應的定時器進行模式配置。如下圖所示,使用的兩路電機的編碼器分別對應到定時器2和定時器3。

在STM32CubeMX中找到定時器2與定時器3,進行模式配置。以下以定時器2為例,定時器3只需進行相同配置即可。選擇定時器為編碼器模式,設置為不分頻,最大計數值為65535,使能自動重裝載,并選擇TI1和TI2兩路輸入,實現四倍頻效果。

配置完定時器2和定時器3后,需要再使用一個定時器,利用其產生50ms中斷來讀取當前的小車速度值,本次例程中采用定時器6產生中斷。 周期為50ms,計算方法為 :T=(arr+1)*(psc+1)/Tclk

當然,不要忘記了電機驅動的配置,畢竟還是得先動起來才能更好的檢驗其測速功能,電機的相關配置和驅動具體可參考上一篇文章。

完成配置后,由STM32CubeMX自動生成初始化代碼,選擇合適的編譯器打開當前功能,進行驅動功能的程序開發。以下主要對編碼器測速的相關代碼進行解釋,其余具體代碼可參考例程文件。

hort encoderPulse[2]={0};

/** * @brief 讀取定時器2和定時器3的計數值(編碼器脈沖值)

* @retval None

*/

void GetEncoderPulse()

{

encoderPulse[0] = -((short)__HAL_TIM_GET_COUNTER(&htim2)); //配合小車輪子運動方向,進行取反操作

encoderPulse[1] = -((short)__HAL_TIM_GET_COUNTER(&htim3));


__HAL_TIM_GET_COUNTER(&htim2) = 0; //計數值重新清零

__HAL_TIM_GET_COUNTER(&htim3) = 0;

}

/**

* @brief 根據得到的編碼器脈沖值計算速度 單位:m/s

* @retval 速度值 */

float CalActualSpeed(int pulse)

{

return (float)(0.003092424 * pulse);

}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim) //定時器6中斷回調函數,每50ms調用一次

{

float c_leftSpeed,c_rightSpeed;

if(htim==(&htim6))

{

GetEncoderPulse();

c_leftSpeed = CalActualSpeed(encoderPulse[0]); //獲得當前的速度值

c_rightSpeed = CalActualSpeed(encoderPulse[1]);

}

}

將程序下載到STM32機器人控制板上,通過串口與上位機進行通信,使用串口調試助手可觀察到在不同PWM值下,小車的運動速度。

通過上述介紹的使用定時器的編碼器模式讀取編碼器的脈沖值,最終得到實際的小車運行速度。可以看到,在實際運行時,即使控制的PWM信號占空比一致,左右電機的轉速仍存在一定的偏差。為了使速度更穩定以及調速效果響應更迅速和順滑,可以加入PID算法,對電機的轉速進行控制。

推薦信息
»兩輪四輪差速及阿克曼移動底盤設計轉向機器人/小車
»動手實現一臺阿克曼ROS小車
»四輪驅動機器人的轉向方式是什么
»全向輪運動模型規律-量化分析三個全向輪轉速與移動平臺中心點運動速度的關系
»三輪全向輪移動平臺坐標系說明示意圖
»麥克納姆輪運動速度分解-麥輪平臺運動學模型分析
»麥克納姆輪受力分析-受力方向為輪轂坐標系y軸正方向
»麥克納姆輪構型由輪轂和輥子組成
產品中心
 
 
 
 
版權所有 © 北京創澤智慧機器人科技有限公司       地址:北京 清華科技園C座五樓       電話:4006-937-088       京ICP備20010582號-2