日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]如圖,STM32的每個TIMER都有正交編碼器輸入接口,TI1,TI2經(jīng)過輸入濾波,邊沿檢測產(chǎn)生TI1FP1,TI2FP2接到編碼器模塊,通過配置編碼器的工作模式,即可以對編碼器進(jìn)行正向/反向計數(shù)。如下圖,編碼器使用了A,B兩相信號

如圖,STM32的每個TIMER都有正交編碼器輸入接口,TI1,TI2經(jīng)過輸入濾波,邊沿檢測產(chǎn)生TI1FP1,TI2FP2接到編碼器模塊,通過配置編碼器的工作模式,即可以對編碼器進(jìn)行正向/反向計數(shù)。


如下圖,編碼器使用了A,B兩相信號,但是我只需要對TI1信號進(jìn)行計數(shù)(第一行),我也是剛發(fā)現(xiàn)了這個錯誤,原來對兩個信號都計數(shù),導(dǎo)致碼盤轉(zhuǎn)一周得到不止100個脈沖(100線的光電碼盤)。通過STM32的編碼器模塊比較兩想的電平信號就可以很容易地計算出編碼器的運(yùn)行情況了。


下面是我調(diào)試OK的代碼:


void Encoder_Configration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

TIM_ICInitTypeDef TIM_ICInitStructure;


//PC6 A相 PC7 B相

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOC,&GPIO_InitStructure);







TIM_TimeBaseStructure.TIM_Prescaler = 0x0; // No prescaling

TIM_TimeBaseStructure.TIM_Period = 10000;

TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);


TIM_EncoderInterfaceConfig(TIM8, TIM_EncoderMode_TI12,

TIM_ICPolarity_Rising, TIM_ICPolarity_Rising);

TIM_ICStructInit(&TIM_ICInitStructure);

TIM_ICInitStructure.TIM_ICFilter = 6;//ICx_FILTER;

TIM_ICInit(TIM8, &TIM_ICInitStructure);


// Clear all pending interrupts

TIM_ClearFlag(TIM8, TIM_FLAG_Update);

TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);

//Reset counter

TIM2->CNT = 0;


TIM_Cmd(TIM8, ENABLE);


}


n_Counter = TIM_GetCounter(TIM8);

Diled_Disp_Num((float)n_Counter);



另外一個值得注意的問題是,STM32 的定時器是16位的,意思是只能計數(shù)到65535,有兩種方法,一是采用鏈?zhǔn)降姆绞接脙蓚€定時器將16位擴(kuò)展為32位,還有一種簡單的方法就是開啟定時器的溢出中斷,每中斷一次就代表編碼器運(yùn)轉(zhuǎn)了特定的角度。

比如編碼器是400線的,將ARR寄存器設(shè)置為400,每溢出中斷一次就代表電機(jī)轉(zhuǎn)了一圈,以此類推。

另外,關(guān)于輸入脈沖的檢測,其實是類似的,只不過在STM32內(nèi)部是專門用了一個外部觸發(fā)模塊來實現(xiàn)的,如圖一中紫色框的標(biāo)注,編碼器模塊應(yīng)該是在這個模塊上的升級,下面是配置代碼:


void TIM3_ETR_GetDropCounts_Configuration(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

//test PA0 TIM8_ETR

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD, &GPIO_InitStructure);


TIM_TimeBaseStructure.TIM_Prescaler = 0x00;

TIM_TimeBaseStructure.TIM_Period = 0xFFFF;

TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;

TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;

TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // Time base configuration


TIM_ETRClockMode2Config(TIM3, TIM_ExtTRGPSC_OFF, TIM_ExtTRGPolarity_NonInverted, 0);


TIM_SetCounter(TIM3, 0);


TIM_Cmd(TIM3, ENABLE);

}


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉