• 方案介紹
    • 標(biāo)題第七章-編碼器測速
  • 附件下載
  • 推薦器件
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

第七章-編碼器測速 STM32 PWM輸出 藍(lán)牙通信 超聲波測距 STM32cubemx

2024/06/19
3763
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

聯(lián)系方式.txt

共1個文件

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

還有一種方法:

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

每次計數(shù)值清空

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

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

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

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

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

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

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

	Motor_Set(0,0);
	//1.保存計數(shù)器值
	Encoder1Count =(short)__HAL_TIM_GET_COUNTER(&htim4);
	Encoder2Count =(short)__HAL_TIM_GET_COUNTER(&htim2);
	//2.清零計數(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)動電機(jī)1或者電機(jī)2 、串口助手可以看到輸出信息了
在這里插入圖片描述

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

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

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

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

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

float Motor1Speed = 0.00;
float Motor2Speed = 0.00;

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

	//計算速度
	Motor1Speed = (float)Encode1Count*100/9.6/11/4;
	Motor2Speed = (float)Encode2Count*100/9.6/11/4;
	
	printf("Motor1Speed:%.2frn",Motor1Speed);
	printf("Motor2Speed:%.2frn",Motor2Speed);

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

7.5-定時器中斷定時測量速度

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

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

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

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

在這里插入圖片描述

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

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

/*******************
*  @brief  定時器回調(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ī)和實際小車調(diào)整速度測量與占空比設(shè)置函數(shù)
在這里插入圖片描述
在這里插入圖片描述
我們第七章這樣就完成了 ,把程序燒錄電機(jī)就可以完成測速了。
下篇第八章我們講解 PID速度控制

聯(lián)系:Q,1930299709

  • 聯(lián)系方式.txt
    下載

推薦器件

更多器件
器件型號 數(shù)量 器件廠商 器件描述 數(shù)據(jù)手冊 ECAD模型 風(fēng)險等級 參考價格 更多信息
TLP291(GR-TP,SE 1 Toshiba America Electronic Components OPTOISOLATOR 3.75KV TRANS 4-SO

ECAD模型

下載ECAD模型
$0.49 查看
KSZ8567STXI 1 Microchip Technology Inc IC ETHERNET SWITCH 7PORT 128TQFP

ECAD模型

下載ECAD模型
$12.44 查看
TLP185(V4GHTL,SE(T 1 Toshiba America Electronic Components Transistor Output Optocoupler, 1-Element, 3750V Isolation
暫無數(shù)據(jù) 查看
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(jī)(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦

方案定制

去合作
方案開發(fā)定制化,2000+方案商即時響應(yīng)!