国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

這篇具有很好參考價值的文章主要介紹了STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、微項目實現(xiàn)目標(biāo):

檢測旋轉(zhuǎn)編碼器模式下,檢測旋轉(zhuǎn)編碼器的轉(zhuǎn)動計數(shù)值及轉(zhuǎn)速。并且區(qū)分轉(zhuǎn)向,一側(cè)轉(zhuǎn)動增加cout,轉(zhuǎn)速值為正,一側(cè)轉(zhuǎn)動減少count,轉(zhuǎn)速值為負;

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

?

二、微項目硬件配置需求:

1,stm32F103C8T6核心板一塊

2,0.96寸OLED顯示,用于顯示計數(shù)

3,旋轉(zhuǎn)編碼器,反饋正交信號脈沖

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

三、前置知識:

1,編碼器計數(shù)模式框圖

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

?①信號流:

兩路GIPO輸入---濾波器----邊沿檢測極性選擇---輸入TI1FP1和TI2FP2給到編碼器接口---根據(jù)相位模式(T1和T2的相位之差)判斷CNT是向上計數(shù)還是向下計數(shù)-----經(jīng)過分頻器處理,最后實現(xiàn)計數(shù)

②計數(shù)模式

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

?如果一直向下計數(shù)到0,在繼續(xù)計數(shù)時,則寄存器數(shù)據(jù)由于無符號整型緣故,會變成65535,由于數(shù)據(jù)以補碼的形式存儲,則強轉(zhuǎn)為int時刻,會變成-1;

③旋轉(zhuǎn)編碼器的輸入波形情況

正轉(zhuǎn)時刻,A相輸出超出B相輸出90度

反轉(zhuǎn)時刻,A相輸出滯后B相輸出90度

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

?④設(shè)置正相模式與反相模式

就是對于計數(shù)模式的一次反向處理,并對應(yīng)到原本的計數(shù)模式上(一般用的較少)

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

反向之后

STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速

?

?

四、代碼邏輯分析:

①打開TIM3和GPIOA的時鐘

②配置GPIOA的PA5和PA6

③初始化時基模塊(注意,在編碼器模式下,不需要配置時鐘源,輸入的TI1FP1或TI2FP2作為時鐘),主要是指ARR和PSC

④初始化輸入捕獲模塊,通道1 和通道2都需要配置

⑤配置配置編碼器接口

⑥開啟時鐘模塊

五、代碼示例:

①打開TIM3和GPIOA的時鐘

//初始化時鐘TIM3 ,PA
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	

②配置GPIOA的PA5和PA6,上拉輸入

	//配置PA6\PA7輸入GPIO
	GPIO_InitTypeDef GPIO_InitStruct;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IPU;
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_6 |GPIO_Pin_7;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
	
	GPIO_Init( GPIOA, &GPIO_InitStruct);

③初始化時基模塊(注意,在編碼器模式下,不需要配置時鐘源,輸入的TI1FP1或TI2FP2作為時鐘),主要是指ARR和PSC

//初始化時基模塊
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
	TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1 ;
	TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//在編碼器模式下,此參數(shù)無作用
	TIM_TimeBaseInitStruct.TIM_Period=65536-1;//ARR
	TIM_TimeBaseInitStruct.TIM_Prescaler=1-1;//PSC,不分頻
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter=0;
	TIM_TimeBaseInit(TIM3, & TIM_TimeBaseInitStruct);
	

④初始化輸入捕獲模塊,通道1 和通道2都需要配置

	//輸入捕獲單元配置
	TIM_ICInitTypeDef TIM_ICInitStruct;
	TIM_ICStructInit(& TIM_ICInitStruct);//先進行默認初始化
	TIM_ICInitStruct.TIM_Channel=TIM_Channel_1;
	TIM_ICInitStruct.TIM_ICFilter=0xf;
	
	TIM_ICInit(TIM3,&TIM_ICInitStruct);//TIM3-CH1通道
	
	TIM_ICInitStruct.TIM_Channel=TIM_Channel_2;
	TIM_ICInitStruct.TIM_ICFilter=0xf;
	TIM_ICInit(TIM3,&TIM_ICInitStruct);//TIM3-CH2通道

⑤配置配置編碼器接口

	//配置編碼器接口
	TIM_EncoderInterfaceConfig( TIM3, TIM_EncoderMode_TI12,TIM_ICPolarity_Rising
                                , TIM_ICPolarity_Rising);

⑥開啟時鐘模塊

TIM_Cmd(TIM3,ENABLE);

⑦獲取速度模塊

本質(zhì)上,獲取的是CNT的計數(shù)值,但是如果1S讀取一次,并且清空為0 ,則實現(xiàn)了速度測算的功能

1-注意此處的強制轉(zhuǎn)化為有符號數(shù)據(jù)(反碼存儲)

2-需要配合定時器中斷1S使用(或者延時1S執(zhí)行一次,當(dāng)然中斷的形式更佳)

int16_t getspeedn(void)
{	
	int16_t temp;
	temp= TIM_GetCounter(TIM3);
	TIM_SetCounter(TIM3,0);
	return temp;
}

⑧主函數(shù)中配置

1-TIM2_IRQHandler()一秒執(zhí)行

2-speed要整除4,原因是數(shù)據(jù)采樣時刻,一次轉(zhuǎn)動被采樣4次文章來源地址http://www.zghlxwxcb.cn/news/detail-475626.html

#include "stm32f10x.h"                  // Device header
#include "delay.h"
#include "OLED.H"
#include "encode.h"
#include "timer.h"

int16_t speed=0;

int main()
{
	OLED_Init();
	encoder_init();
	timer_init();
	OLED_ShowString(1,1,"count:000");
	OLED_ShowString(2,1,"speed:0000rpm");
	
	while(1)
	{
		OLED_ShowSignedNum(2,7,speed/4,3);
		
		
	}
}
//中斷服務(wù)函數(shù)
 void TIM2_IRQHandler(void)
 {
	if(TIM_GetITStatus(TIM2, TIM_IT_Update)==SET)
	{
		speed= getspeedn();
	}
	TIM_ClearITPendingBit( TIM2,TIM_IT_Update );
 }
 
 

到了這里,關(guān)于STM32-微項目07-旋轉(zhuǎn)編碼器計數(shù)及測速的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32之增量式編碼器電機測速

    STM32之增量式編碼器電機測速

    編碼器,是一種用來測量機械旋轉(zhuǎn)或位移的傳感器。它能夠測量機械部件在旋轉(zhuǎn)或直線運動時的位移位置或速度等信息,并將其轉(zhuǎn)換成一系列電信號。 . 按監(jiān)測原理分類 光電編碼器 光電編碼器,是一種通過光電轉(zhuǎn)換將輸出軸上的機械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器

    2024年02月13日
    瀏覽(23)
  • 【STM32】【HAL庫】定時器編碼器模式測速

    【STM32】【HAL庫】定時器編碼器模式測速

    目錄 概述 HAL設(shè)置 ?定時器的編碼器模式 定時器設(shè)置 ?常用函數(shù) 代碼 電機AB相增量型編碼器的介紹和解碼方法在這里介紹過了 電機編碼器 https://blog.csdn.net/m0_57585228/article/details/125791283 測速可以使用外部中斷進行脈沖計數(shù) 很多型號的單片機中有專門的電路來計算脈沖的速度和

    2023年04月18日
    瀏覽(36)
  • stm32f103單片機—編碼器測速

    stm32f103單片機—編碼器測速

    stm32f103ZET6開發(fā)板(非指定) MG513P3012V型號電機(帶霍爾編碼器)(非指定) 此種測速方法要求單片機的定時器具有編碼器模式,對于stm32f1系列,具備編碼器模式的定時器有TIM1/2/3/4/5/8, 定時器使用通道1、2來實現(xiàn)編碼器功能 ,接線時注意把A/B相接到定時器通道1/2的引腳。 電

    2024年02月06日
    瀏覽(32)
  • Stm32-使用TB6612驅(qū)動電機及編碼器測速

    Stm32-使用TB6612驅(qū)動電機及編碼器測速

    最近在 學(xué)習(xí)編碼電機以及嘗試使用編碼電機測速 。遇到了很多問題,花費了很多時間,在這里做一個記錄,對自己學(xué)習(xí)到的知識進行一個總結(jié) 找了很多資料,看了很多視頻,這些太多了,以至于讓我不知道究竟哪一個是正確的,今天看這個,明天看這個,導(dǎo)致自己的學(xué)習(xí)效

    2023年04月16日
    瀏覽(30)
  • STM32定時器捕獲編碼器模式測速和方向測不準(zhǔn)問題

    STM32定時器捕獲編碼器模式測速和方向測不準(zhǔn)問題

    ** 問題概述 關(guān)于STM32編碼器模式電機測速的資料網(wǎng)上一抓一大把,卻發(fā)現(xiàn)真的拿過來用還是有問題的,比如剛剛做了個東西,是個個頭比較大的麥克納姆輪車,控制運動就需要精確的測量轉(zhuǎn)速和方向,我用的是直流有刷、減速比90、11線霍爾編碼器的減速電機。 原本想著用個

    2024年02月15日
    瀏覽(30)
  • STM32定時器編碼器模式實現(xiàn)直流有刷電機測速(HAL庫)

    STM32定時器編碼器模式實現(xiàn)直流有刷電機測速(HAL庫)

    最近在做一個單片機大作業(yè),要用到直流有刷,在這里把學(xué)習(xí)編碼器的知識記錄一下,學(xué)習(xí)參考資料: 正點原子DMF407電機控制專題教程_V1.0 我所使用的編碼器是市面上常見的 磁電增量式編碼器 ,其有AB兩相,用于輸出電機轉(zhuǎn)動時的 脈沖數(shù) ,AB兩相的先后順序決定了電機的

    2023年04月24日
    瀏覽(33)
  • STM32 EC11 旋轉(zhuǎn)編碼器

    STM32 EC11 旋轉(zhuǎn)編碼器

    代碼在最后,復(fù)制可直接食用 以及我的電路圖 在研究EC11的時序之前首先要了解一點,EC11按旋轉(zhuǎn)的輸出動作可以分為兩種。一種是轉(zhuǎn)兩格,A、B對C端輸出一個完整脈沖(轉(zhuǎn)一格就只是由低電平-高電平或由高電平-低電平);另一種就是轉(zhuǎn)一格,A、B對C端輸出一個完整脈沖。

    2024年02月02日
    瀏覽(29)
  • STM32移植LVGL+旋轉(zhuǎn)編碼器接口對接

    STM32移植LVGL+旋轉(zhuǎn)編碼器接口對接

    寫在前面:本菜鳥結(jié)合了許多大佬的文章,成功實現(xiàn)了基于LVGL的GUI設(shè)計,小開心~淺淺記錄一下!~ 本文以單片機STM32F103VET6為核心,利用ST7796芯片驅(qū)動分辨率為480*320的LCD液晶屏模塊,移植LVGL,對接顯示接口,對接外部接口——旋轉(zhuǎn)編碼器,完成以上兩步,就可以實現(xiàn)LVGL的顯

    2024年02月10日
    瀏覽(45)
  • 關(guān)于stm32旋轉(zhuǎn)編碼器計次亂跳問題(消抖)

    旋轉(zhuǎn)編碼器A口接GPIOB0,B口接GPIOB1。設(shè)置中斷類型為上升下降沿均觸發(fā)。 輸出是用0.96寸oled輸出 A腳設(shè)置為上升下降沿均會進中斷,下降上升一個變換周期,判斷這個周期的A腳,B腳的始末狀態(tài),來判斷正反轉(zhuǎn)一次。 A口輸出的波形用來中斷,B口輸出的波形用來判斷正轉(zhuǎn)還是反轉(zhuǎn)

    2024年02月16日
    瀏覽(29)
  • 【STM32】HAL庫自學(xué)記錄-旋轉(zhuǎn)編碼器的使用

    【STM32】HAL庫自學(xué)記錄-旋轉(zhuǎn)編碼器的使用

    通過本文可學(xué)會兩種實現(xiàn)判斷旋轉(zhuǎn)編碼器正轉(zhuǎn)反轉(zhuǎn)的方法,可根據(jù)自己的應(yīng)用場景來選擇使用哪種方法。 1、芯片:STM32F103RCT6 2、STM32CubeMx軟件 3、IDE: MDK-Keil軟件 4、旋轉(zhuǎn)編碼器模塊 5、XCOM V1.4串口軟件 圖中C端為GND。 方向 :A相和B相相差一個相位,一般來說是90°。A相信號在

    2024年02月11日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包