0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

第七章-編碼器測(cè)速 STM32pwm輸出 STM32f103c8t6引腳功能

dfhjgfg ? 來源:dfhjgfg ? 作者:dfhjgfg ? 2024-08-21 16:44 ? 次閱讀

[]()功能介紹放開頭, 使用便捷無需愁。

這是全網(wǎng)最詳細(xì)、性價(jià)比最高的STM32實(shí)戰(zhàn)項(xiàng)目入門教程,通過合理的硬件設(shè)計(jì)和詳細(xì)的視頻筆記介紹,硬件使用STM32F103主控資料多方便學(xué)習(xí),通過3萬字筆記、12多個(gè)小時(shí)視頻、20多章節(jié)代碼手把手教會(huì)你如何開發(fā)和調(diào)試。讓你更快掌握嵌入式系統(tǒng)開發(fā)。

V3.3.0-STM32智能小車

視頻:
https://www.bilibili.com/video/BV16x4y1M7EN/?spm_id_from=333.337.search-card.all.click

V3:HAL庫開發(fā)、功能:PID速度控制、PID循跡、PID跟隨、遙控、避障、PID角度控制、視覺控制、電磁循跡、RTOS等功能。

標(biāo)題第七章-編碼器測(cè)速

7.1-認(rèn)識(shí)編碼器

編碼器:一般按照電機(jī)尾部、用于測(cè)量電機(jī)轉(zhuǎn)速、方向、位置。
在這里插入圖片描述
那么編碼器的輸出信號(hào)具體是什么?我們?nèi)绾胃鶕?jù)輸出信號(hào)測(cè)量轉(zhuǎn)速 和方向?

轉(zhuǎn)速: 單位時(shí)間測(cè)量到的脈沖數(shù)量(比如根據(jù)每秒測(cè)量到多少個(gè)脈沖來計(jì)算轉(zhuǎn)速)

旋轉(zhuǎn)方向: 兩通道信號(hào)的相對(duì)電平關(guān)系
在這里插入圖片描述

7.2單片機(jī)定時(shí)器的編碼器功能

那么我們已經(jīng)知道編碼器輸出的波形,我們?nèi)绾瓮ㄟ^單片機(jī)讀取波形,然后計(jì)算出速度那?

這里STM32單片機(jī)的定時(shí)器和通用定時(shí)器具有****編碼器接口模式 、在STM32中文參考手冊(cè)13章中有詳細(xì)介紹

STM32中文參考手冊(cè)-第200頁
在這里插入圖片描述
STM32中文參考手冊(cè)-第267頁
在這里插入圖片描述
STM32中文參考手冊(cè)-第226頁
在這里插入圖片描述
這個(gè)是計(jì)數(shù)方向與編碼器信號(hào)的關(guān)系、我們拆開來看

僅在TI1計(jì)數(shù)、電機(jī)正轉(zhuǎn)、對(duì)原始數(shù)據(jù)二倍頻
在這里插入圖片描述
僅在TI1計(jì)數(shù)、電機(jī)反轉(zhuǎn)、對(duì)原始數(shù)據(jù)二倍頻
在這里插入圖片描述
在TI1和TI2都計(jì)數(shù)

可以看到這樣就對(duì)原始數(shù)據(jù)四倍頻了

在這里插入圖片描述
計(jì)數(shù)方向
在這里插入圖片描述

7.3-獲得單位時(shí)間計(jì)數(shù)器值變化量

在這里插入圖片描述
上一次說的方法:

這次編碼器計(jì)數(shù)值 = 計(jì)數(shù)器值+計(jì)數(shù)溢出次數(shù) * 計(jì)數(shù)最大器計(jì)數(shù)最大值

計(jì)數(shù)器兩次變化值 = 這次編碼器計(jì)數(shù)值 - 上次編碼器計(jì)數(shù)值

然后根據(jù)這個(gè)單位變化量計(jì)算速度

還有一種方法:

計(jì)數(shù)器變化量 = 當(dāng)前計(jì)數(shù)器值

每次計(jì)數(shù)值清空

然后根據(jù)這個(gè)變化量 計(jì)算速度

然后我們?cè)倏淳唧w到哪一款電機(jī)和編碼器上如何測(cè)速
在這里插入圖片描述
在STM32中文參考手冊(cè)-第119頁
在這里插入圖片描述
在這里插入圖片描述
設(shè)置TIM2

在這里插入圖片描述
設(shè)置ITM2濾波器
在這里插入圖片描述
在這里插入圖片描述
同理設(shè)置TIM4
在這里插入圖片描述
設(shè)置TIM4濾波器
在這里插入圖片描述
在這里插入圖片描述
設(shè)置引腳上拉
在這里插入圖片描述
生成代碼
開啟定時(shí)器和定時(shí)中斷
在這里插入圖片描述

HAL_TIM_Encoder_Start(&htim2,TIM_CHANNEL_ALL);//開啟定時(shí)器2
  HAL_TIM_Encoder_Start(&htim4,TIM_CHANNEL_ALL);//開啟定時(shí)器4
  HAL_TIM_Base_Start_IT(&htim2);//開啟定時(shí)器2 中斷
  HAL_TIM_Base_Start_IT(&htim4);                //開啟定時(shí)器4 中斷

在定義兩個(gè)變量保存計(jì)數(shù)器值
在這里插入圖片描述

short Encoder1Count = 0;//編碼器計(jì)數(shù)器值
short Encoder2Count = 0;

每2ms讀取計(jì)數(shù)器值->清零計(jì)數(shù)器
在這里插入圖片描述

Motor_Set(0,0);
//1.保存計(jì)數(shù)器值
Encoder1Count =(short)__HAL_TIM_GET_COUNTER(&htim4);
Encoder2Count =(short)__HAL_TIM_GET_COUNTER(&htim2);
//2.清零計(jì)數(shù)器值
__HAL_TIM_SET_COUNTER(&htim4,0);
__HAL_TIM_SET_COUNTER(&htim2,0);

printf("Encoder1Count:%drn",Encoder1Count);
printf("Encoder2Count:%drn",Encoder2Count);

HAL_Delay(2);

接好電池、燒錄代碼、串口一連接電腦

用手轉(zhuǎn)動(dòng)電機(jī)1或者電機(jī)2 、串口助手可以看到輸出信息
在這里插入圖片描述

7.4-主函數(shù)周期測(cè)量轉(zhuǎn)速

上面我們測(cè)量出來了溢出值,我們?cè)俑鶕?jù)當(dāng)前計(jì)數(shù)器值就可以測(cè)量出計(jì)數(shù)器變化量,我們通過單位時(shí)間變量就可以計(jì)算出轉(zhuǎn)速

下面是電機(jī)和編碼器的參數(shù)
在這里插入圖片描述
我們先測(cè)試的結(jié)論是否有問題?

  1. 編碼器計(jì)數(shù)器會(huì)不會(huì)在計(jì)數(shù)時(shí)間內(nèi)溢出?
  2. 車輪旋轉(zhuǎn)一周,單片機(jī)編碼器計(jì)數(shù)器計(jì)數(shù)多少?9.6乘11乘4
  3. 根據(jù)計(jì)算方法計(jì)算電機(jī)轉(zhuǎn)速

定義兩個(gè)float變量
在這里插入圖片描述

float Motor1Speed = 0.00;
float Motor2Speed = 0.00;

下面是代碼(一定要把主函數(shù)沒有用的刪除掉)
在這里插入圖片描述

//計(jì)算速度
Motor1Speed = (float)Encode1Count*100/9.6/11/4;
Motor2Speed = (float)Encode2Count*100/9.6/11/4;

printf("Motor1Speed:%.2frn",Motor1Speed);
printf("Motor2Speed:%.2frn",Motor2Speed);

編譯燒錄代碼就會(huì)輸出結(jié)果
在這里插入圖片描述

7.5-定時(shí)器中斷定時(shí)測(cè)量速度

上面我們實(shí)現(xiàn):在主函數(shù)周期,讀取計(jì)數(shù)器值然后計(jì)算速度,但是如果函數(shù)加入其他內(nèi)容這個(gè)周期時(shí)間就很難保證。

所以這節(jié)我們通過定時(shí)器,周期讀取計(jì)數(shù)器,計(jì)算速度。復(fù)制一份工程開始搞!
在這里插入圖片描述
我們先開啟定時(shí)器、2ms進(jìn)入一次定時(shí)器中斷,中斷回調(diào)函數(shù)執(zhí)行咱們的代碼即可。

為什么充分利用單片機(jī) 我們使用TIM1

  1. 設(shè)置內(nèi)部時(shí)鐘
  2. 使能自動(dòng)重裝載
    在這里插入圖片描述
    開啟定義更新中斷
    在這里插入圖片描述
    代碼開啟定時(shí)器1 中斷

在這里插入圖片描述

HAL_TIM_Base_Start_IT(&htim1);                //開啟定時(shí)器1 中斷

定時(shí)器回調(diào)函數(shù)中添加 速度計(jì)算內(nèi)容
在這里插入圖片描述

/*******************
*  @brief  定時(shí)器回調(diào)函數(shù)
*  @param  
*  @return  
*
*******************/
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
if(htim == &htim1)//htim1 500HZ  2ms 中斷一次
{
TimerCount++;
if(TimerCount %5 == 0)//每10ms執(zhí)行一次
{
Encode1Count = (short)__HAL_TIM_GET_COUNTER(&htim4);
Encode2Count = (short)__HAL_TIM_GET_COUNTER(&htim2);
__HAL_TIM_SET_COUNTER(&htim4,0);
__HAL_TIM_SET_COUNTER(&htim2,0);

Motor1Speed = (float)Encode1Count*100/9.6/11/4;
Motor2Speed = (float)Encode2Count*100/9.6/11/4;
?
TimerCount=0;
}
}
}

把之前的變量定義放這里
在這里插入圖片描述

short Encode1Count = 0;
short Encode2Count = 0;
float Motor1Speed = 0.00;
float Motor2Speed = 0.00;
uint16_t TimerCount=0;

主函數(shù)就輸出速度大小就可以了
在這里插入圖片描述

printf("Motor1Speed:%.2frn",Motor1Speed);
	printf("Motor2Speed:%.2frn",Motor2Speed);

把變量需要聲明一下
在這里插入圖片描述

extern float Motor1Speed ;
extern float Motor2Speed ;

然后打開串口助手
在這里插入圖片描述
注:

根據(jù)電機(jī)和實(shí)際小車調(diào)整速度測(cè)量與占空比設(shè)置函數(shù)
在這里插入圖片描述
在這里插入圖片描述
我們第七章這樣就完成了 ,把程序燒錄電機(jī)就可以完成測(cè)速了。
下篇第八章我們講解 PID速度控制

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 編碼器
    +關(guān)注

    關(guān)注

    44

    文章

    3529

    瀏覽量

    133261
  • 測(cè)速
    +關(guān)注

    關(guān)注

    0

    文章

    37

    瀏覽量

    14040
  • STM32F103C8T6
    +關(guān)注

    關(guān)注

    105

    文章

    160

    瀏覽量

    82456
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    有關(guān)AB相磁編碼器STM32F103C8T6之間脈沖計(jì)數(shù)問題

    AB相磁編碼器STM32F103C8T6引腳應(yīng)該怎么連接?我看手冊(cè)通用定時(shí)四個(gè)通道都可以實(shí)現(xiàn)輸入捕獲功能,那是否能實(shí)現(xiàn)
    發(fā)表于 09-17 12:29

    如何實(shí)現(xiàn)STM32F103C8T6編碼器測(cè)速?

    如何實(shí)現(xiàn)STM32F103C8T6編碼器測(cè)速?
    發(fā)表于 12-13 07:21

    STM32F103C8T6引腳

    本文介紹STM32F103C8T6引腳圖、STM32F103C8T6開發(fā)板電路圖及各部分引腳功能圖介紹,
    發(fā)表于 08-03 15:53 ?43.7w次閱讀
    <b class='flag-5'>STM32F103C8T6</b><b class='flag-5'>引腳</b>圖

    STM32F051C8T6引腳圖及功能定義

    本文為你簡(jiǎn)述STM32F051C8T6芯片參數(shù)、STM32F051C8T6引腳圖及封裝。
    發(fā)表于 08-03 19:02 ?3.1w次閱讀
    <b class='flag-5'>STM32F051C8T6</b><b class='flag-5'>引腳</b>圖及<b class='flag-5'>功能</b>定義

    stm32f103c8t6封裝及最小系統(tǒng)原理圖

    系統(tǒng)原理圖。 STM32F103C8T6封裝 STM32F103C8T6封裝為L(zhǎng)QFP48-48引腳小外形四方扁平封裝外形,如下圖: STM32F103C8T6最小系統(tǒng)原理圖 單片機(jī)的
    發(fā)表于 11-23 15:50 ?34.8w次閱讀

    STM32F103C8T6核心板的資料合集免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是STM32F103C8T6核心板的資料合集免費(fèi)下載包括了:STM32F103C8T6核心板測(cè)試程序(PC13閃爍),STM32F103C8T6核心板測(cè)試程序(RTC
    發(fā)表于 06-04 08:00 ?520次下載
    <b class='flag-5'>STM32F103C8T6</b>核心板的資料合集免費(fèi)下載

    STM32F103C8T6原理圖

    STM32F103C8T6原理圖免費(fèi)下載。
    發(fā)表于 06-02 10:01 ?173次下載

    stm32f103c8t6引腳圖及功能

    STM32F103C8T6是一款基于ARM Cortex-M 內(nèi)核STM32系列的32位的微控制,程序存儲(chǔ)容量是64KB,需要電壓2V~3.6V,工作溫度為-40°
    的頭像 發(fā)表于 06-29 17:05 ?14.5w次閱讀
    <b class='flag-5'>stm32f103c8t6</b><b class='flag-5'>引腳</b>圖及<b class='flag-5'>功能</b>

    利用STM32F103C8T6最小系統(tǒng)板點(diǎn)亮流水燈

    ;STM8產(chǎn)品型號(hào)命名規(guī)則(參考:STM32單片機(jī)最小系統(tǒng)詳解)可知: STM32F103C8T6這個(gè)命名中:STM32代表STM32家族,
    發(fā)表于 11-17 17:06 ?58次下載
    利用<b class='flag-5'>STM32F103C8T6</b>最小系統(tǒng)板點(diǎn)亮流水燈

    利用STM32F103C8T6最小系統(tǒng)板點(diǎn)亮流水燈

    ;STM8產(chǎn)品型號(hào)命名規(guī)則(參考:STM32單片機(jī)最小系統(tǒng)詳解)可知: STM32F103C8T6這個(gè)命名中:STM32代表STM32家族,
    發(fā)表于 11-17 18:06 ?97次下載
    利用<b class='flag-5'>STM32F103C8T6</b>最小系統(tǒng)板點(diǎn)亮流水燈

    STM32F103C8t6程序下載

    STM32F103C8t6程序下載
    發(fā)表于 11-24 18:21 ?229次下載
    <b class='flag-5'>STM32F103C8t6</b>程序下載

    STM32F103C8T6定時(shí)TIM4通道1、2輸出PWM

    STM32F103C8T6定時(shí)TIM4通道1、2輸出PWM這美妙的波形,真好,我他喵的終于把你弄出來了。STM32F103C8T6使用定時(shí)
    發(fā)表于 12-02 18:21 ?72次下載
    <b class='flag-5'>STM32F103C8T6</b>定時(shí)<b class='flag-5'>器</b>TIM4通道1、2<b class='flag-5'>輸出</b><b class='flag-5'>PWM</b>

    stm32f103c8t6引腳功能圖以及在arduino IDE編程環(huán)境下引腳調(diào)用

    stm32f103c8t6引腳功能圖以及在arduino IDE編程環(huán)境下引腳調(diào)用例如:pinMode(PB1, INPUT);
    發(fā)表于 12-28 20:05 ?127次下載
    <b class='flag-5'>stm32f103c8t6</b><b class='flag-5'>引腳</b><b class='flag-5'>功能</b>圖以及在arduino IDE編程環(huán)境下<b class='flag-5'>引腳</b>調(diào)用

    使用stm32f103c8t6設(shè)計(jì)的藍(lán)牙小車

    使用stm32f103c8t6設(shè)計(jì)的藍(lán)牙小車,具有前進(jìn)后退,左轉(zhuǎn)右轉(zhuǎn)等功能
    發(fā)表于 08-07 16:08 ?25次下載

    stm32f103c8t6怎么連接噪聲傳感

    連接噪聲傳感STM32F103C8T6需要以下步驟: 確定傳感STM32F103C8T6之間的連接接口。噪聲傳感通常使用模擬信號(hào)
    的頭像 發(fā)表于 12-21 16:10 ?1081次閱讀