基於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,停止模...