會員登陸
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站導航
最新下載
訪問統計 (自2012/5/3)


正在流覽:   1 名訪客





電位變化中斷-誤觸發
新會員
註冊日期:
2016/05/03 21:00
所屬群組:
註冊會員
文章: 18
等級: 2; EXP: 97
HP : 0 / 49
MP : 6 / 152
離線
各位先進大家好

我想用電位變化中斷來做Encoder的的功能,但是我的波型很不美麗

如圖:
Open in new window

















波型有緩升緩降,而且光盤轉到某些角度會有幾十mV的震盪
幾十mV的震盪一直造成我的中斷誤觸發
例如:正常狀態下 電位變化中斷後數值加1,但當我電壓不穩時就會暴增一大段數值。

最合適的方式是處理電路波型,但是看別人在相同的條件下還能正常運作
我就想不通了。

能否設定電位變化中斷的靈敏度呢? 或者可以只判斷VDD-VSS的數位High- low訊號

我用的pic16f687 腳位是RB4腳

1月13日 16:31:44
轉換PDF檔 列印


Re: 電位變化中斷-誤觸發
資深會員
註冊日期:
2010/06/30 16:18
來自 CAE, Microchip Technology Inc.
所屬群組:
站務管理者
註冊會員
文章: 1521
等級: 33; EXP: 22
HP : 161 / 805
MP : 507 / 16239
離線
嘗試改用AD, 然用程式實作史密特觸發機制

1月14日 06:55:21
轉換PDF檔 列印


Re: 電位變化中斷-誤觸發
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13936
等級: 72; EXP: 17
HP : 1067 / 1779
MP : 4645 / 67925
離線
剛查了一下 RB4 在做 interrupt-on change 功能時並沒有 Schmitt Trigger input 的準位遲滯功能。光盤交替時的震盪勢必外加硬體濾波器或事以軟體處理彈跳方式來過濾掉。

這樣說吧! 這濾波處理電路看是要用硬體電路處理掉成方波輸入,還是用軟體方式處理。如果用軟體處裡滾輪慢慢轉時跟快速轉動時的脈波時間是不一樣的。你可以把滾輪輸入當做是鍵盤的輸入,偵測到變化時開始做彈跳處理直到準位穩定時再判定是 Hi 還是 Low。後面程式在去判斷是向前轉還是向後轉再去做 Counter 的加減處理。

1月14日 15:49:55
轉換PDF檔 列印


Re: 電位變化中斷-誤觸發
新會員
註冊日期:
2016/05/03 21:00
所屬群組:
註冊會員
文章: 18
等級: 2; EXP: 97
HP : 0 / 49
MP : 6 / 152
離線
感謝AdamSyu與版主的回覆

To:版主
是的,我有用處理彈跳的方式,觸發中斷時先Delay一段時間待電位穩定後再到我的副程式去判別high&low,確實能處理正負向誤判的問題,但另一個BUG是我的光盤轉到某個特定角度下,可能光耦合的品質沒有很好,電位會停在約2V且大約20mV的震盪,我覺得這是剛好卡在電位hi與low判別的臨界點上,電位震盪導致我的中斷一直不停的重複觸發,有時數值是一直累加,或者卡在我中斷程式的Delay中不停的循環,變成我主程式中其他的程式都被中斷程式卡著無法處理其他動作,我還沒想到更好的方式處理這個BUG。

if(RABIE && RABIF)
{
DelayNmSec(2);
TQEI();
RABIF=0;
}

/****************************
Delay
*****************************/
void DelayNmSec(unsigned int N)
{
unsigned int j;
while(
N--)
for(
j=0;j < MILLISEC;j++);
}


To:AdamSyu
感謝您提供的意見,我大概明白您的意思,好像可行喔
因為我需要在電位變化當下去比較A與B的電位判別正反轉,我想我ADC取樣頻率要設的盡量快,在AD值達到我預設的high與low時能即刻去做一次判別正反轉與數值加減的動作。
測試完再來討論~

1月14日 18:29:39
轉換PDF檔 列印


Re: 電位變化中斷-誤觸發
版主
註冊日期:
2004/04/30 10:53
來自 CAE, Microchip
所屬群組:
站務管理者
註冊會員
MICROCHIP
文章: 13936
等級: 72; EXP: 17
HP : 1067 / 1779
MP : 4645 / 67925
離線
你這個不算彈跳處理,只是做延遲而已, 遇到震盪會沒轍的。 你可以在網站搜尋一下"彈跳“ 應該會有蠻多範例可以參考的。 最主要的是這個彈跳你要怎樣處理後才可以得到正確的準位。

1月14日 19:52:33
轉換PDF檔 列印


Re: 電位變化中斷-誤觸發
新會員
註冊日期:
2016/05/03 21:00
所屬群組:
註冊會員
文章: 18
等級: 2; EXP: 97
HP : 0 / 49
MP : 6 / 152
離線
TO 版主:
我爬了文看了彈跳處理的範例後,悟了

依照我的波型我分成兩段處理:
1.準位穩定後判斷正反向
2.判斷完正反向後,用Timer的倒計時做彈跳處理,有震盪則刷新倒計時,如無震盪再做數值的加減。

大概的想法如下:
引用:

void interrupt ISR(void)
{
if(RABIE && RABIF)
{
SW1=1; //中斷觸發
SW2=0; //計數觸發
debounce_one=10; //等待準位穩定
RABIF=0;
}

if(TMR1IE && TMR1IF)
{
TMR1IF=0;
debounce_one--;
debounce_two--;
}
}

int main(void)
{
while(1)
{
if(SW==1 && debounce_one==0)
{
SW1=0;
SW2=1; // 計數觸發
判斷正向OR反向;
debounce_two = 20; // 防震盪造成的中斷
}

if(SW2 == 1 && 正向 && debounce_two == 0)
{
SW2=0;
Value++;
}

if(SW2 == 1 && 反向 && debounce_two == 0)
{
SW2=0;
Value--;
}
}

1月14日 22:31:14
轉換PDF檔 列印






無法在此發表文章
可以在此觀看文章
無法回覆文章
無法編輯自己的文章
無法刪除自己的文章
無法發起投票調查
無法在此投票
無法上傳附加檔案
無法不經審核直接發表文章

[進階搜尋]


搜尋
線上教學影片
網頁捷徑
教育訓練
其它網站連結
電話: 02-25000405
產品技術問題產品技術支援專線:0800-717718 台北02-25088600 新竹03-5778366 Ext. 8600 高雄07-2137830 MicrochipDIRECT 專線: 07-2137830
Powered by XOOPS © 2001-2012 The XOOPS Project