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

STM32編碼器模式(帶方向/正交編碼)

這篇具有很好參考價值的文章主要介紹了STM32編碼器模式(帶方向/正交編碼)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

  • 看前說明:這里重點介紹的時STM32的定時器編碼器模式,是根據(jù)STMF10x參考手冊,如果有使用過編碼器或編碼器不一樣的可以直接跳過前面的編碼器介紹,直接看理論分析與程序部分。

1、編碼器介紹

STM32編碼器模式(帶方向/正交編碼)

  • 這里需要注意的參數(shù)
  1. 輸出脈沖線數(shù):1024線:編碼器每旋轉(zhuǎn)一周輸出的脈沖的個數(shù),這個數(shù)據(jù)就是你在編寫的定時器的重裝載值
  • 兩種編碼器的區(qū)別
    • 從圖中看就會來的更加直接:
      1. 帶方向的編碼器只有一路的脈沖輸出,另外一路就是編碼器的正反轉(zhuǎn)的信號,零位信號就是編碼器的機(jī)械零位。
        STM32編碼器模式(帶方向/正交編碼)
  1. 正交編碼器兩路的脈沖輸出,在判斷電機(jī)的正反轉(zhuǎn)時,是更加A、B兩相的波形來的,其實就是看哪路波形超前,這里用32的定時器編碼器功能就只需要去查計數(shù)器的方向位來判斷電機(jī)的正反轉(zhuǎn)。
    STM32編碼器模式(帶方向/正交編碼)STM32編碼器模式(帶方向/正交編碼)
  2. 引腳說明
    STM32編碼器模式(帶方向/正交編碼)

2、脈沖計數(shù)對應(yīng)電機(jī)速度的數(shù)據(jù)兩種處理方式

(1) 定時器中斷法,計算電機(jī)的圈數(shù)(過程小題大做,不推薦)

  • 前面提到了編碼器的線數(shù)為1024線(編碼器每轉(zhuǎn)一周就會輸出1024個脈沖),那么你的重裝載值為(1024-1),當(dāng)計數(shù)值達(dá)到1024就會發(fā)生溢出中斷,也就是說識別到了脈沖數(shù)為1024個(編碼器轉(zhuǎn)了一圈)。每發(fā)生一次中斷,就說明電機(jī)轉(zhuǎn)了一圈

(1)脈沖計數(shù)法,直接根據(jù)單位時間內(nèi)所采集到的脈沖數(shù)作為電機(jī)的轉(zhuǎn)速(更加精準(zhǔn),推薦)

  • 編碼器在實際的測數(shù)使用時確實是根據(jù),電機(jī)轉(zhuǎn)一圈:編碼器轉(zhuǎn)多少圈的方式來實際測量電機(jī)的轉(zhuǎn)速的,但是在其本質(zhì)就還是編碼器的輸出的脈沖數(shù),所以直接計算編碼器的單位時間的脈沖數(shù)推算電機(jī)的速度是一樣的,數(shù)據(jù)來的更加直接、精準(zhǔn)。

3、STM32定時器編碼器模式理論分析

(1)定時器編碼器模式選擇

STM32編碼器模式(帶方向/正交編碼)STM32編碼器模式(帶方向/正交編碼)

  • 首先是定時器編碼器模式的選擇,其實就是選擇在那一個通道計數(shù),還是兩個通道都要計數(shù)也就是這三種模式。
    • 對于帶方向的就只有一路脈沖,所以選擇其中一路通道就ok了。
    • 對于正交編碼器而言有兩路脈沖,所以就選擇第三中方式,兩路通道都計數(shù)。

(2)定時器編碼器輸入極性的選擇

  • 看懂這張圖才是,確定輸入極性的關(guān)鍵所在:所謂極性就是選擇在輸入脈沖信號的上升沿計數(shù)還是下降沿計數(shù)。
    STM32編碼器模式(帶方向/正交編碼)

(3)定時器編碼器輸入極性的寄存器配置

STM32編碼器模式(帶方向/正交編碼)
STM32編碼器模式(帶方向/正交編碼)文章來源地址http://www.zghlxwxcb.cn/news/detail-423857.html

CC1S=01(TIMx_CCMR1寄存器,IC1FP1映射到TI1) 
CC2S=01(TIMx_CCMR1寄存器,IC2FP2映射到TI2) 
CC1P=0(TIMx_CCER寄存器,IC1FP1不反相,IC1FP1=TI1) 
CC2P=0(TIMx_CCER寄存器,IC2FP2不反相,IC2FP2=TI2) 
SMS=011(TIMx_SMCR寄存器,所有的輸入均在上升沿和下降沿有效). 
CEN=1(TIMx_CR1寄存器,計數(shù)器使能)
  • 這里解釋一下
    • TIx 就相當(dāng)于輸入信號的 TIM4->CH1 TIM4->CH2;
    • TIxF 濾波后信號;
    • TIxFPx經(jīng)過帶極性選擇的邊緣檢測器過后的產(chǎn)生的信號;
      STM32編碼器模式(帶方向/正交編碼)

4、結(jié)合手冊函數(shù)刨析庫函數(shù)

(1)STM32定時器編碼器模式的庫函數(shù)配置代碼

/*TIM2初始化為編碼器接口*/
void Encoder_Init_TIM2(void)
{
	//結(jié)構(gòu)體變量的創(chuàng)建
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;  
	TIM_ICInitTypeDef TIM_ICInitStructure;  
	GPIO_InitTypeDef GPIO_InitStructure;
	//RCC時鐘使能
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);//使能定時器4的時鐘
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);//使能PA端口時鐘
	
 	//編碼器引腳的配置,對于定時器的通道管腳在用戶手冊上的==8.3.7定時器復(fù)用功能重映射==
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1;	//端口選擇
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空輸入
	GPIO_Init(GPIOA, &GPIO_InitStructure);				//根據(jù)設(shè)定參數(shù)初始化GPIOA
	
	//定時器的基本配置,這里主要介紹定時器的編碼器模式,不做過多解釋
	TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);
	TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // 預(yù)分頻器 
	TIM_TimeBaseStructure.TIM_Period = 0xffff; //設(shè)定計數(shù)器自動重裝值
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;//選擇時鐘分頻:不分頻
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//TIM向上計數(shù)  
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
	
	//編碼器模式選擇與配置
	//參數(shù)一TIMx:定時器的選擇
	//參數(shù)二TIM_EncoderMode:編碼器模式的選擇
	//參數(shù)三TIM_IC1Polarity:通道一的極性選擇
	//參數(shù)四TIM_IC2Polarity:通道二的極性選擇
//具體配置->正交編碼器:配置如下
	TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI12, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);
//帶方向的編碼器配置如下->區(qū)別只在于帶方向的編碼器只有一個脈沖輸入,而正交編碼器有兩個脈沖輸入
	TIM_EncoderInterfaceConfig(TIM2, TIM_EncoderMode_TI1, TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

	TIM_ICStructInit(&TIM_ICInitStructure);
	TIM_ICInitStructure.TIM_ICFilter = 10;
	TIM_ICInit(TIM2, &TIM_ICInitStructure);
	TIM_ClearFlag(TIM2, TIM_FLAG_Update);//清除TIM的更新標(biāo)志位
	TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
	//Reset counter
	TIM_SetCounter(TIM2,0);
	TIM_Cmd(TIM2, ENABLE); 
} 

(2)刨析

  1. 轉(zhuǎn)到void TIM_EncoderInterfaceConfig(TIM_TypeDef* TIMx, uint16_t TIM_EncoderMode, uint16_t TIM_IC1Polarity, uint16_t TIM_IC2Polarity)函數(shù)下可以看到如下代碼:
/* Get the TIMx SMCR register value */
  tmpsmcr = TIMx->SMCR;
  
  /* Get the TIMx CCMR1 register value */
  tmpccmr1 = TIMx->CCMR1;
  
  /* Get the TIMx CCER register value */
  tmpccer = TIMx->CCER;
  • 再看下面來自用戶手冊中的截圖,就不用我再繼續(xù)挖下去了。
    STM32編碼器模式(帶方向/正交編碼)

5、編碼器速度的讀取

  • 前面已經(jīng)說過了編碼器的脈沖計數(shù)對應(yīng)電機(jī)速度的數(shù)據(jù)處理方法,這里就繼續(xù)說明了。
  • 速度是單位時間為前提的,我這里采用的是直接計算單位時間對應(yīng)的脈沖數(shù)來推算電機(jī)的速度的。這里的單位時間也就是采樣率的意思,就是我們間隔多少時間去采集然后清零脈沖計數(shù)值一次。這里的采樣率不能太高,也不能太低。對電機(jī)的控制,一般采樣率=5毫秒越小就越接近瞬時速度,為什么不能過小想必不用說大家也知道。所以這里就需要一個定時器來計算采樣周期
//配置定時器1每5毫秒中斷一次,在中斷函數(shù)中讀取編碼器數(shù)值
void Time1_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseStrure;
	NVIC_InitTypeDef NVIC_InitStruct;
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	//定時器的基本配置
	TIM_TimeBaseStrure.TIM_Period = 1000-1;//計數(shù)的次數(shù)
	TIM_TimeBaseStrure.TIM_Prescaler = 7200-1;//控制頻率72000000/7200=10000;頻率=10000HZ
	TIM_TimeBaseStrure.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseStrure.TIM_ClockDivision = 0;
	TIM_TimeBaseStrure.TIM_RepetitionCounter = 0;//重復(fù)計數(shù)次數(shù)
	TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStrure);
	
	TIM_ClearITPendingBit(TIM1,TIM_IT_Update);//清空中斷標(biāo)志位
	TIM_ITConfig(TIM1,TIM_IT_Update|TIM_IT_Trigger,ENABLE);//開啟中斷更新和觸發(fā)中斷源
	
	NVIC_InitStruct.NVIC_IRQChannel = TIM1_UP_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
	NVIC_Init(&NVIC_InitStruct);
	TIM_Cmd(TIM1,ENABLE);
}
int Read_Encoder(void)
{
	int value_1;
	value_1=(int)TIM_GetCounter(TIM2);
	TIM_SetCounter(TIM2,0);
	return value_1;
}
void TIM1_UP_IRQHandler()
{
	int circle_count ;
	if(TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET)
	{
		circle_count = Read_Encoder();
		TIM_ClearITPendingBit(TIM1,TIM_IT_Update);//清空中斷標(biāo)志位
	}
}

到了這里,關(guān)于STM32編碼器模式(帶方向/正交編碼)的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

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

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

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

    2023年04月18日
    瀏覽(35)
  • 【嵌入式】STM32計時器編碼器接口模式使用

    【嵌入式】STM32計時器編碼器接口模式使用

    使用STM32調(diào)試電機(jī)或傳感器時經(jīng)常會使用到計數(shù)器的編碼器接口模式,本文主要記錄該模式的固件庫配置方法,并給出使用該模式獲取光柵測距值的實例。 硬件: STM32F103C8T6 光柵測距傳感器 編碼器接口模式為STM32計時器的一種特殊使用模式,該模式下可對編碼器輸出的脈沖信

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

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

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

    2023年04月24日
    瀏覽(33)
  • 初出茅廬的小李博客之STM32CubeMx配置定時器的編碼器模式

    初出茅廬的小李博客之STM32CubeMx配置定時器的編碼器模式

    上次文章寫了編碼器是如何工作的,今天就來用STM32F103C8T6的TIM3的通道1跟通道2編寫一個編碼器識別程序。 話不多說,上教程! 選擇外部高速時鐘源HSE 選擇中斷模式觸發(fā)下降沿有效 默認(rèn)是上拉輸入 添加用戶標(biāo)簽為SWITCH 使能NVIC配置 選擇編碼器模式 分頻值設(shè)置為2-1 計數(shù)值設(shè)

    2024年02月12日
    瀏覽(26)
  • stm32-編碼器測速

    stm32-編碼器測速

    編碼電機(jī) 旋轉(zhuǎn)編碼器 A,B相分別接通道一和二的引腳,VCC,GND接單片機(jī)VCC,GND 以前的代碼是通過觸發(fā)外部中斷,然后在中斷函數(shù)里手動進(jìn)行計次。使用編碼器接口的好處就是節(jié)約軟件資源。對于頻繁執(zhí)行,操作簡單的任務(wù),一般設(shè)計一個硬件電路模塊來自動完成。 使用定時器

    2024年03月19日
    瀏覽(27)
  • STM32 TIM編碼器接口

    STM32 TIM編碼器接口

    單片機(jī)學(xué)習(xí)! 目錄 文章目錄 前言 一、編碼器接口簡介 1.1 編碼器接口作用 1.2 編碼器接口工作流程 1.3 編碼器接口資源分布 1.4?編碼器接口輸入引腳 二、正交編碼器 2.1 正交編碼器功能 2.2 引腳作用 2.3 如何測量方向 2.4 正交信號優(yōu)勢 2.5 執(zhí)行邏輯 三、編碼器定時器框圖 3.1 編

    2024年04月14日
    瀏覽(23)
  • STM32——TIM編碼器接口

    STM32——TIM編碼器接口

    Encoder Interface 編碼器接口 編碼器接口可接收增量(正交)編碼器的信號,根據(jù)編碼器旋轉(zhuǎn)產(chǎn)生的正交信號脈沖, 自動控制CNT自增或自減 ,從而指示編碼器的位置、旋轉(zhuǎn)方向和旋轉(zhuǎn)速度 每個高級定時器和通用定時器都擁有 1個編碼器接口 ,C8T6擁有4個編碼器接口 兩個輸入引腳

    2024年01月19日
    瀏覽(56)
  • 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霍爾編碼器電機(jī)測速原理

    ????????本次選用的編碼器電機(jī)為13線的霍爾編碼器電機(jī),電機(jī)減速比為30:1,轉(zhuǎn)動一圈輸出13*30=390個脈沖。輪胎直徑為75mm,輪胎周長為pi*d=3*75=225mm.定時器采用四倍頻計數(shù),則一圈輸出390*4=1560個脈沖。具體編碼器知識這里就不多說了。 ?????????根據(jù)測速原理:假設(shè)編

    2024年02月15日
    瀏覽(33)
  • stm32編碼器電機(jī)測速(hal庫)

    stm32編碼器電機(jī)測速(hal庫)

    記錄一下今天參考別人的代碼實現(xiàn)了四個電機(jī)的測速。 ? 編碼器被廣泛應(yīng)用于電機(jī)測速,實現(xiàn)電機(jī)閉環(huán)控制 。所以不論是自己做小車還是后續(xù)參加各種比賽,必須要學(xué)會編碼器測速。 ????????編碼電機(jī)其實就是一個帶有編碼器的電機(jī),我的這個電機(jī)是一個帶霍爾傳感器的

    2024年02月13日
    瀏覽(36)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包