日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年07月19日(星期六)

2018年07月19日 | STM32定時器---正交編碼器模式詳解

發(fā)布者:陳書記 來源: eefocus關(guān)鍵字:STM32  定時器  正交編碼器模式 手機看文章 掃描二維碼
隨時隨地手機看文章

編碼器分類: 
按工作原理:光電式、磁電式和觸點電刷式 
按碼盤的刻孔方式:增量式和絕對式兩類 
由于博主接觸面還不是很廣,一共就用過兩個種類的編碼器,都是屬于光電的 
差分編碼器:一般由8根線連接 信號線分別為 A+ A- B+ B- Z+ Z- 以及VCC和GND 
這里有一種不需要Z信號的,6線差分A+ A- B+ B- VCC 和GND 
正交編碼器:一般是5根線連接,信號線分別為A B Z VCC和GND

編碼器線數(shù): 就是旋轉(zhuǎn)一圈你的A(B)會輸出多少個脈沖 ,這里的A B就是上面的輸出脈沖信號線,它們轉(zhuǎn)一圈發(fā)出的脈沖數(shù)一樣的,不過存在90°相位差 通常都是360線的 線數(shù)越高代表編碼器能夠反應的位置精度越高

這里寫圖片描述

相位差為90° 通過判斷哪個信號在前 哪個信號在后 來決定TIM->COUNT是++ 還是 – 
360線 AB一圈各為360個,Z信號為一圈一個

編碼器信號: 
A 脈沖輸出 
B 脈沖輸出 
Z 零點信號 當編碼器旋轉(zhuǎn)到零點時,Z信號會發(fā)出一個脈沖表示現(xiàn)在是零位置 這個零點位置是固定,廠商指定的 
VCC 電源通常分為24V的和5V的 
GND 地線

這里需要注意: 
1.這里的正交編碼器是如果是24V的工作電壓還需要用光耦隔離,24V轉(zhuǎn)為3V3在接到STM32的定時器兩個通道上 
2.脈沖輸出是OC門輸出,需要上拉電阻 
3.Z信號接到STM32的外部中斷口上,很容易受到干擾 ,通常需要接一個電容到GND

這里給出一個24V轉(zhuǎn)3.3V的隔離電路,用到的是6N136光耦

這里寫圖片描述

硬件連接(這里使用的STM32F103ZET6的TIM4的CH1和CH2): 
PB6–A 
PB7–B 
PA1–Z

這里寫圖片描述

代碼詳解: 

TIM4初始化代碼如下:


#include "stm32f10x.h"

#include "encode.h"

#include "misc.h"

#include "nvic.h"

#include "sys.h" 

#include "delay.h"


void TIM4_Mode_Config(void)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

    TIM_ICInitTypeDef TIM_ICInitStructure;      


    //PB6 ch1  A,PB7 ch2 

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);//使能TIM4時鐘  

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//使能GPIOA時鐘


    GPIO_StructInit(&GPIO_InitStructure);//將GPIO_InitStruct中的參數(shù)按缺省值輸入

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;         

    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//PA6 PA7浮空輸入  

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOB, &GPIO_InitStructure);                           


    NVIC_Config(2);


    TIM_DeInit(TIM4);

    TIM_TimeBaseStructInit(&TIM_TimeBaseStructure);

    TIM_TimeBaseStructure.TIM_Period = 359*4;  //設定計數(shù)器重裝值   TIMx_ARR = 359*4

    TIM_TimeBaseStructure.TIM_Prescaler = 0; //TIM3時鐘預分頻值

    TIM_TimeBaseStructure.TIM_ClockDivision =TIM_CKD_DIV1 ;//設置時鐘分割 T_dts = T_ck_int    

    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上計數(shù) 

    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);              


    TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);//使用編碼器模式3,上升下降都計數(shù)

    TIM_ICStructInit(&TIM_ICInitStructure);//將結(jié)構(gòu)體中的內(nèi)容缺省輸入

    TIM_ICInitStructure.TIM_ICFilter = 6;  //選擇輸入比較濾波器 

    TIM_ICInit(TIM4, &TIM_ICInitStructure);//將TIM_ICInitStructure中的指定參數(shù)初始化TIM3


//  TIM_ARRPreloadConfig(TIM4, ENABLE);//使能預裝載

    TIM_ClearFlag(TIM4, TIM_FLAG_Update);//清除TIM3的更新標志位

    TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);//運行更新中斷

    //Reset counter

    TIM4->CNT = 0;//


    TIM_Cmd(TIM4, ENABLE);   //啟動TIM4定時器


}

/*  

void TIM3_Mode_Config(void)

{

    ///TIM3 clock source enable 

    RCC->APB1ENR|=1<<1;       //TIM3時鐘使能

    // Enable 1GPIOA, clock 

    RCC->APB2ENR|=1<<2;    //使能PORTA時鐘


    // Configure PA.06,07 as encoder input 

    GPIOA->CRL&=0XF0FFFFFF;//PA6

    GPIOA->CRL|=0X04000000;//浮空輸入

    GPIOA->CRL&=0X0FFFFFFF;//PA7

    GPIOA->CRL|=0X40000000;//浮空輸入


    // Enable the TIM3 Update Interrupt 

    //這兩個東東要同時設置才可以使用中斷

    TIM3->DIER|=1<<0;   //允許更新中斷                

    TIM3->DIER|=1<<6;   //允許觸發(fā)中斷


    TIM3_NVIC_Config();



    //Timer configuration in Encoder mode 

    TIM3->PSC = 0x0;//預分頻器

    TIM3->ARR = 15-1;//設定計數(shù)器自動重裝值 

    TIM3->CR1 &=~(3<<8);// 選擇時鐘分頻:不分頻

    TIM3->CR1 &=~(3<<5);// 選擇計數(shù)模式:邊沿對齊模式


    TIM3->CCMR1 |= 1<<0; //CC1S='01' IC1FP1映射到TI1

    TIM3->CCMR1 |= 1<<8; //CC2S='01' IC2FP2映射到TI2

    TIM3->CCER &= ~(1<<1);  //CC1P='0'  IC1FP1不反相,IC1FP1=TI1

    TIM3->CCER &= ~(1<<5);  //CC2P='0'  IC2FP2不反相,IC2FP2=TI2

    TIM3->CCMR1 |= 3<<4; // IC1F='1000' 輸入捕獲1濾波器

    TIM3->SMCR |= 3<<0;  //SMS='011' 所有的輸入均在上升沿和下降沿有效

    TIM3->CNT = 0;

    TIM3->CR1 |= 0x01;    //CEN=1,使能定時器


}*/


void TIM4_Init(void)

{

  TIM4_Mode_Config();

}


這里的NVIC_Config(2)是我個人寫的一種多種中斷配置的方法單獨放在nvic.c中需要了解的可以自己看看工程


這里通常要問的是兩點 

1.TIM_TimeBaseStructure.TIM_Period = 359*4 

2.TIM_EncoderInterfaceConfig(TIM4, TIM_EncoderMode_TI12, TIM_ICPolarity_BothEdge ,TIM_ICPolarity_BothEdge);//使用編碼器模式3,上升下降都計數(shù)


很多人不理解為要360線的編碼器為什么這里的重裝值乘以4 讀出來的為什么又要/4,其實這兩個要結(jié)合起來解釋 

首先看看這個函數(shù)TIM_EncoderInterfaceConfig,它有4個參數(shù) 

1.選擇哪個定時器 即TIM4 

2.編碼器模式有三種 見下圖 

3.TIM_IC1的極性 

4.TIM_IC2的極性 

這里設置的是編碼器模式3,且TI1和TI2都是雙邊沿觸發(fā)–即上下邊沿都計數(shù)

這里寫圖片描述

還有一個大家不是很懂的圖,我來分析一下

這里寫圖片描述

1.有效邊沿 其實就是對應上面設置的編碼器的三種模式 
2.相對信號的電平,這里沒有理解手冊意思,我把它理解為于它的高低電平意味著將PB6和PB7接口對換,PB7接A PB6接B 這樣一來就意味著原來的正轉(zhuǎn)變成反轉(zhuǎn) 計數(shù)上升變?yōu)橄陆?/p>

這里寫圖片描述

這里寫圖片描述

TIx 就相當于輸入信號的 TIM4->CH1 TIM4->CH2 
TIxF 濾波后信號 
TIxFPx經(jīng)過帶極性選擇的邊緣檢測器過后的產(chǎn)生的信號

3.至于TI1FP1和TI2FP2信號在上身沿計數(shù)還是下降沿計數(shù)受兩點影響 極性(是否反向) 邊緣檢測(上升沿還是下降沿) 
我們這里設置的是不反向 在雙邊沿計數(shù),即在A上升下降 B的上身下降都計數(shù)

而計數(shù)為什么是x4倍 ,下圖結(jié)合上面的配置詳細說明了

這里寫圖片描述

由此完成了編碼器的配置

至于讀取編碼器角度的時間,要根據(jù)實際需要來設置

編碼器線數(shù)為 w線/圈 
轉(zhuǎn)速為 V 圈/min 
讀取間隔時間 t(線間隔時間)

t <= 60/WV 單位為秒

還有Z信號歸零,在遇到Z信號的時候,將定時器的CNT=0,這樣就能保證位置與CNT實際對應上了 

中斷代碼如下


//外部中斷1,編碼器Z相歸零  優(yōu)先級--①  0 0

void EXTI1_IRQHandler(void)

{


    TIM4->CNT = 0;//每次遇到相對零(Z信號)就將計數(shù)歸0

    TIM_Cmd(TIM4, ENABLE);

    EXTI_ClearITPendingBit(EXTI_Line1);


}



//編碼器接口模式     優(yōu)先級--2   1  1

void TIM4_IRQHandler(void)

{   

    if(TIM4->SR&0x0001)//溢出中斷

    {

        ;

    }   

    TIM4->SR&=~(1<<0);//清除中斷標志位    

}

1

最后附上工程代碼百度云盤跟CSDN下載地址: 

百度云盤:http://pan.baidu.com/s/1bowhzDP 

CSDN:http://download.csdn.net/detail/wang328452854/9417395


關(guān)鍵字:STM32  定時器  正交編碼器模式 引用地址:STM32定時器---正交編碼器模式詳解

上一篇:STM32f429-SDRAM+LTDC總結(jié)
下一篇:關(guān)于STM32正交編碼的問題

推薦閱讀

2018俄羅斯世界杯最終定格在了高盧雄雞法國 4:1格子軍團克羅地亞,法國隊第二次獲得世界杯冠軍。果然,世界杯冠軍從來沒有黑馬!世界杯需要的是足球文化的積淀,歷代球員的經(jīng)驗積累,心理的比拼,難有一黑到底的馬!???一個月的世界杯賽程中,相比大家都選購了不錯的大屏4K電視觀戰(zhàn)世界杯,其中哪些產(chǎn)品給大家留下了深刻的印象呢?本期我們就來盤點一...
2019年5月20日,位于上海浦東新區(qū)的“順豐DHL-海柔庫寶上海自動化倉”正式上線運營。該自動倉由海柔創(chuàng)新攜手順豐DHL供應鏈中國(以下簡稱順豐DHL)共同打造,位于順豐DHL總部附近,是順豐DHL與海柔創(chuàng)新戰(zhàn)略合作示范項目,也是繼年初雙方攜手在香港打造自動化配件倉后的又一里程碑。目前,隨著倉儲物流環(huán)節(jié)的柔性化、智能化,智能倉儲機器人的需求正不斷增...
燒寫PIC單片機,其實PIC Kit3具備脫機燒寫功能!這個功能對生產(chǎn)部門可能意義不大,但是對研發(fā)來說還是會經(jīng)常用到的。便于小批量燒寫,比如燒寫測試用的10-20 pcs樣機,會很方便?!炯虞d鏡像和啟動PIC kit3的Program to go 模式】:首先,在MPLAB 8 或者MPLAB X的IDE開發(fā)工程環(huán)境下,將待燒寫的鏡像程序預先寫入kit3的內(nèi)部存儲內(nèi),即可實現(xiàn)類似PM3...
十二、ARM偽指令ARM偽指令不是ARM指令集中的指令,只是為了編程方便編譯器定義了偽指令,使用時可以像其他ARM指令一樣使用,但在編譯時這些偽指令將被等效的ARM指令代替。1、符號定義偽指令A、全局變量定義GBLA(GBLL/GBLS) 全局變量名 GBLA 、GBLL 和GBLS 偽指令用于定義一個ARM 程序中的全局變量,并將其初始化。其中: GBLA 偽指令用于定...

史海拾趣

小廣播
設計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved