基於STM32f4的編碼器應用

2021-10-01 05:55:44 字數 1580 閱讀 4850

(1)增量型:

每轉過單位的角度就發出乙個脈衝訊號,通常為a相、b相(某些包括z相)輸出。a相、b相為相互延遲1/4週期的脈衝輸出(即正交訊號),根據延遲關係可以區別正反轉,而且通過取a相、b相的上公升和下降沿可以進行2或4倍頻。z相為單圈脈衝,即每圈發出乙個脈衝,常用於校正累計誤差。

(2)絕對值型:

對應一圈,每個基準的角度發出乙個唯一與該角度對應二進位制的數值,通過外部記圈器件可以進行多個位置的記錄和測量。

有時候我們新買乙個編碼器,我們可以通過示波器檢視編碼器的脈衝波形;給編碼器接上電源,示波器地與編碼器地連線,編碼器輸出端與示波器探頭連線即可。

encoder_timer_overflow計數溢位次數,設定為389*4是因為我的編碼器的390線的,方便計算。編碼器模式設定為模式3。

#include

"encode.h"

#include

"sys.h"

int encoder_timer_overflow;

//編碼器溢位次數(每389*4溢位一次)

u16 previous_count;

//上次tim3->cnt的值

void

tim3_encode_init

(u16 arr,u16 psc)

void

tim3_irqhandler

(void

)//定時器3中斷服務函式

tim_clearitpendingbit

(tim3,tim_it_update)

;//清除中斷標誌位

}u32 read_encoder

(void

)

主函式:

#include

"sys.h"

#include

"delay.h"

#include

"usart.h"

#include

"led.h"

#include

"lcd.h"

#include

"motor.h"

#include

"timer.h"

#include

"pwm.h"

#include

"key.h"

#include

"encode.h"

extern

int encoder_timer_overflow;

int pwm=

100;

u32 encode;

float speed,t;

intmain

(void)}

tim_setcompare1

(tim4,pwm);}

}void

tim5_irqhandler

(void

)//定時器5中斷服務函式

tim_clearitpendingbit

(tim5,tim_it_update)

;//清除中斷標誌位

}

讀取編碼器的子函式放在定時中斷中,可以方便計算出中斷時間內編碼器的單位時間轉數值。

基於stm32f407建立stm32F427工程

分為三個部分 1.啟動檔案 2.fwilib 包含兩個資料夾inc和src。src裡面是stm32資源的c檔案,inc則是32資源的h檔案 3.user這也是我不太理解的部分 ddbugconfig只包含了用於debug的初始化,則是f4的系統檔案。我是在f407的基礎上改的 總的來說 1.改了晶元...

stm32f4 定時捕獲

概述 1000hz 20 80 占空比現象 1000hz 51 58 占空比現象 關於本文的更多詳情請往下看。筆者針對於初學者提供的例程都是去掉了許多不必要的功能,精簡了官方的 對初學者一看就明白,以簡單明瞭的工程供大家學習。stm32f4 tim輸入波形捕獲 脈衝頻率 占空比 例項 訪問密碼 st...

STM32F4定時器學習

高階定時器 time1 time8 通用定時器 time2time5,tim9tim14 基本定時器 time6 和 time7 等 tim2 tim5 的暫存器介紹 控制暫存器 1 timx cr1 只用到了 timx cr1 的最低位,也就是計數器使能位,該位必須置 1,才能讓定時器開始計數。d...