基於MC9S12G使用編碼器(控制)輸出PWM

2021-10-19 08:02:12 字數 1264 閱讀 3158

基於mc9s12g使用編碼器(控制)輸出pwm

首先是編碼器的原理

a和b是對應兩個光敏接收管,ab之間的距離s2小於s0和s1,所以當順時針旋轉的時候,a和b對應的初始值是1 ,1,a會首先進入初始位置左側的s0區域,即a和b的值為0,1,接下來ab同時處於s0區域,即為0,0,接下來a先進入s1區域,b仍停留在s0區域,此時的值為1,0。以這樣的迴圈表示順時針,相對應的也可以得出逆時針的序列。總結下來就是:

通過判斷上一時刻的值與下一時刻的值可以判斷旋鈕的方向,驅動大概如下,未經過驗證:

#

include

"xx.h"

//extern pwm;

#define

pin_a

gpio_x

#define

pin_b

gpio_y

unsigned

char flag =0;

//表示旋鈕狀態

unsigned

char flag =0;

//表示為正轉還是反轉

void

encoder_scan()

}else

if(flag ==2)

}else

if(pin_a ==0)

//1 1 1 1

else

//0 1 1 0

}else

if(pin_a ==

1&& pin_b ==0)

else

//即上一次為a == 1 且b == 1

}else

//(pin_a == 0 && pin_b == 1)

else

}}

這裡以mc9s12g64為例,將編碼器的光敏引腳與主晶元的gpio(input)相連,通過判斷gpio的值來控制pwm的占空比。

編碼器的掃瞄函式可以在晶元的實時中斷函式rti timeout interrupt中呼叫,然後在主函式中傳送pwm占空比,具體的pwm驅動見晶元手冊。

MC9S12G時鐘配置

一 enable外部時鐘 使cpmuosc暫存器的osce位置一 二 計算需要的頻率 以24mhz為例 pllclk 24mhz 2 x oscclk 振盪器頻率,即你的外部晶振 x synr 1 refdv 1 三 計算出synr,refdv後 把synr得值賦給cpmusynr的前六位,把ref...

MC9S12G定時器中斷設定

一 關閉定時器模組 時tscr1的ten位為0 二 設定iosx為輸出比較引腳 以7為例 tios ios7 1 三 繫結輸出比較引腳 tctl1 om7 0 tctl1 ol7 1 四 設定計數器的比較值 在24mhz的系統時間下,0xbb為1ms 中斷週期 0x4926 128 24mhz 10...

關於MC9S12G128的低功耗模式

第一次寫部落格,哈哈哈,剛入行汽車電子,是乙個小白。希望跟各位大觸互相交流學習.最近沒事研究了一波g128 的低功耗模式。mc9s12g128晶元具有以下三種低功耗模式 1,執行 等待模式 等待模式與執行模式類似,除了cpu執行被暫停並可以有選擇地執行禁用一些模組,以便只有必要的模組時鐘。2,停止模...