目錄
概述
HAL設(shè)置
?定時(shí)器的編碼器模式
定時(shí)器設(shè)置
?常用函數(shù)
代碼
概述
電機(jī)AB相增量型編碼器的介紹和解碼方法在這里介紹過了
電機(jī)編碼器https://blog.csdn.net/m0_57585228/article/details/125791283
測速可以使用外部中斷進(jìn)行脈沖計(jì)數(shù)
很多型號的單片機(jī)中有專門的電路來計(jì)算脈沖的速度和方向,也就是定時(shí)器的編碼器模式
因?yàn)槭怯布?jì)數(shù),所以計(jì)數(shù)頻率可以很高,性能比軟件來的好,使用也比較方便
但是需要連接到指定的GPIO
這里以常見的4倍頻測速 為例子進(jìn)行設(shè)置
HAL設(shè)置
要開啟:
定時(shí)器的編碼器模式
定時(shí)器中斷
一個(gè)周期性的定時(shí)器及中斷
?定時(shí)器的編碼器模式
開啟編碼器模式
?編碼器的設(shè)置
??
?解釋一下
Polarity:是表示在哪個(gè)邊沿(上升沿或者下降沿)更新數(shù)值
這個(gè)比較容易被誤解,不管選擇哪個(gè),都是會在兩種邊沿進(jìn)行計(jì)數(shù)
只是表示在哪個(gè)邊沿進(jìn)行更新數(shù)值
定時(shí)器設(shè)置
間隔一個(gè)固定的時(shí)間產(chǎn)生中斷,這里設(shè)置的是10ms
?常用函數(shù)
看這個(gè)的對應(yīng)部分https://mp.csdn.net/mp_blog/creation/editor/125279297
代碼
在main的初始化后循環(huán)之前加入
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL); //開啟編碼器模式
HAL_TIM_Base_Start_IT(&htim2); //開啟編碼器的中斷
HAL_TIM_Base_Start_IT(&htim3); //開啟定時(shí)器的中斷
中斷回調(diào)函數(shù)
int32_t Speed = 0;
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
int16_t zj;
if (htim == &htim2) //編碼器
{
}
else if (htim == &htim3) //計(jì)算轉(zhuǎn)速10ms
{
zj = __HAL_TIM_GetCounter(&htim2);//獲取計(jì)數(shù)值
__HAL_TIM_SetCounter(&htim2, 0);//清空計(jì)數(shù)值
Speed = (float)zj / (4 * 96) * 100 * 60;//計(jì)算轉(zhuǎn)速
printf("%d\r\n", Speed);//輸出轉(zhuǎn)速
}
}
?在這個(gè)函數(shù)中根據(jù)之前的公式計(jì)算處轉(zhuǎn)速
這里要注意:
1.數(shù)據(jù)范圍,不能溢出
2.正數(shù)代表正轉(zhuǎn),負(fù)數(shù)代表反轉(zhuǎn)
3.需要加入強(qiáng)轉(zhuǎn)(float),因?yàn)樯婕暗搅顺ǎ枰苊獬霈F(xiàn)因?yàn)樯崛ノ粩?shù),導(dǎo)致一直出現(xiàn)0
(或者乘法放到前步)文章來源:http://www.zghlxwxcb.cn/news/detail-417501.html
到最后給速度賦值時(shí)在進(jìn)行丟失小數(shù)位(當(dāng)然也可以直接用小數(shù)進(jìn)行運(yùn)算)文章來源地址http://www.zghlxwxcb.cn/news/detail-417501.html
到了這里,關(guān)于【STM32】【HAL庫】定時(shí)器編碼器模式測速的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!