找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 5322|回復(fù): 5
打印 上一主題 下一主題
收起左側(cè)

紅外對(duì)射模塊做小變壓器繞線計(jì)數(shù)器時(shí),重復(fù)中斷的解決方法

[復(fù)制鏈接]
回帖獎(jiǎng)勵(lì) 1 黑幣 回復(fù)本帖可獲得 1 黑幣獎(jiǎng)勵(lì)! 每人限 1 次
跳轉(zhuǎn)到指定樓層
#
    前幾天看到論壇里的舊帖《自己動(dòng)手制作 “POV LED” 旋轉(zhuǎn)LED顯示屏》,文中樓主提到......外部中斷函數(shù)產(chǎn)生了兩次以上......
    估計(jì)就是霍爾傳感器接到外部中斷IO上。實(shí)際磁鋼每次經(jīng)過(guò)霍爾元件時(shí),單片機(jī)觸發(fā)了兩次或多次外部中斷。這使我想起前一陣子的自制繞線機(jī)的事情。
    前一陣子,有個(gè)電路上需要壓電陶瓷片,得用自制磁芯變壓器。初級(jí)10繞制00圈,次級(jí)是30和60圈。
    希望繞線時(shí)能控制銅線位置,這樣初級(jí)每層銅線比較整齊,所以要求繞線速度必須要低。后來(lái)發(fā)現(xiàn)用兩節(jié)七號(hào)鎳氫電池給TT直流減速電機(jī)供電,轉(zhuǎn)速差不多一秒一圈。速度低,比較合適,我可以拉著銅線,適時(shí)調(diào)整繞線銅線位置。
    減速電機(jī)軸一端套上碼盤,另一端套上變壓器骨架的。當(dāng)時(shí),先用的紅外對(duì)射模塊(其他名稱有測(cè)速傳感器模塊 計(jì)數(shù)器模塊 電機(jī)測(cè)試模塊 槽型光耦模塊等等),碼盤上有20個(gè)孔,用黑膠帶封了19個(gè),只留下一個(gè)孔,這樣碼盤轉(zhuǎn)動(dòng)一圈,紅外模塊只會(huì)輸出一次下降沿。
    單片機(jī)程序下載后,運(yùn)行時(shí)發(fā)現(xiàn),實(shí)際數(shù)碼管上的計(jì)數(shù)數(shù)值不是按一遞增的,大多數(shù)時(shí)候是按二遞增的,偶爾會(huì)按一遞增或按三、四遞增的。
以為是紅外模塊有故障,換了一個(gè),現(xiàn)象依舊。換傳感器,在碼盤邊緣粘上一個(gè)小磁鋼,換用霍爾傳感器模塊,單片機(jī)運(yùn)行時(shí)也是同樣的現(xiàn)象。
    奇怪了,當(dāng)時(shí)因?yàn)橹庇米儔浩鳎瑳]再分析故障了,在代碼里面計(jì)數(shù)數(shù)值除以二,結(jié)果再顯示在數(shù)碼管上。按此方法繞制了磁芯變壓器,裝上電路可正常工作的。后來(lái)就沒有再查找這個(gè)計(jì)數(shù)故障了。

    直到看到那個(gè)舊帖,才想起來(lái),也有人遇到同樣的問題了(樓主當(dāng)時(shí)還是個(gè)初中生,真厲害。。。
    但對(duì)樓主分析的原因不敢茍同,于是翻了翻單片機(jī)教程和幾本書,有了自己的想法。
    以下是個(gè)人看法,業(yè)余水平,歡迎各位看官拍磚。
    無(wú)論是紅外對(duì)射模塊,還是霍爾傳感器,其實(shí)電路上就是運(yùn)放比較器,比較器是能穩(wěn)定可靠工作的,應(yīng)該不是故障源頭。問題應(yīng)該集中在紅外發(fā)射接收對(duì)管和霍爾元件裝置上。
    紅外發(fā)射管發(fā)射的紅外線光束是散射的。不像激光那樣筆直和纖細(xì)。減速軸上安裝的碼盤也沒有和紅外對(duì)射模塊嚴(yán)格定位,做到碼盤平面與對(duì)射光軸嚴(yán)格垂直。由于碼盤還在運(yùn)動(dòng),難免有抖動(dòng)的。那么光電接收管收到的紅外光很可能既有發(fā)射管直射過(guò)來(lái)的,也包括從碼盤小孔側(cè)壁上反射過(guò)來(lái)的,甚至還可能還包括衍射過(guò)來(lái)的紅外光。
    主要因?yàn)闄C(jī)械抖動(dòng)或振動(dòng),紅外線的傳播有了多個(gè)路徑,多個(gè)路徑傳播的紅外線中就有那么幾個(gè)光線強(qiáng)度足以致模塊輸出了低電平信號(hào),也就有了下降沿。霍爾元件和磁鋼也是類似的。若是有示波器或邏輯分析儀,抓取一段,就能看到這個(gè)直觀現(xiàn)象的。
    還記得機(jī)械按鍵嘛,使用時(shí)必須“消抖”,否則就可能出現(xiàn)多次中斷的情況。既然如此,那就“消抖”是了。
    人手按按鍵,前后幾十毫秒的時(shí)間,和機(jī)械按鍵不一樣的是,這里機(jī)械抖動(dòng)或振動(dòng)很可能不到一毫秒,需要實(shí)測(cè)才知道的。我沒有那些測(cè)試設(shè)備,那么就用笨辦法,一個(gè)一個(gè)地試驗(yàn)。哪位有條件的,抽空抓取一段看看。所以,消抖的方法不能像機(jī)械按鍵那么簡(jiǎn)單的。
    我想到的辦法是單穩(wěn)態(tài)電路。
收到外部觸發(fā)信號(hào)后,電路被觸發(fā),進(jìn)入單穩(wěn)態(tài);
單穩(wěn)態(tài)時(shí)間要稍長(zhǎng),這樣就無(wú)視后來(lái)的幾個(gè)觸發(fā)信號(hào)了;
單穩(wěn)態(tài)時(shí)間也不能太長(zhǎng),以免影響下一次正常的觸發(fā)信號(hào)。


    我用的是555時(shí)基集成電路,多試了幾個(gè)電容和電阻,調(diào)整了RC參數(shù),計(jì)數(shù)就正確了。最后用的是0.1微法的電解電容和150歐姆的電阻,計(jì)算時(shí)間常數(shù)是1.1*0.1*150=16.5微秒。想通了,就簡(jiǎn)單了!


    后來(lái),換用碼盤,沒有遮孔的,計(jì)數(shù)也正常了。減速電機(jī)換用4節(jié)鎳氫電池供電,提高轉(zhuǎn)速(大概2、3圈每秒),計(jì)數(shù)也是正常的。
準(zhǔn)備繞線了。


視頻太大附件也傳不了的。
繞完了。

當(dāng)然了,若是用在其他更高速的地方,估計(jì)還得再調(diào)整RC參數(shù)的。

單片機(jī)源程序如下:
  1. #include<reg52.h>     
  2. sbit flashLed=P1^1;                  //閃爍燈   
  3. unsigned char T0RH = 0;  //T0重載值的高字節(jié)
  4. unsigned char T0RL = 0;  //T0重載值的低字節(jié)
  5. unsigned int uiCount=0;
  6. bit flag200ms=0;                                                                                          
  7. unsigned char code Tab[18]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0x7F,0xFF};  
  8. unsigned char ledChar[8]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
  9. /* 配置并啟動(dòng)T0,ms-T0定時(shí)時(shí)間 */
  10. void ConfigTimer0(unsigned int ms)
  11. {
  12.     unsigned long tmp;   
  13.     tmp = 11059200 / 12;      
  14.     tmp = (tmp * ms) / 1000;   
  15.     tmp = 65536 - tmp;         
  16.     tmp = tmp + 18;            
  17.     T0RH = (unsigned char)(tmp>>8);   
  18.     T0RL = (unsigned char)tmp;
  19.     TMOD &= 0xF0;   
  20.     TMOD |= 0x01;   
  21.     TH0 = T0RH;     
  22.     TL0 = T0RL;
  23.     ET0 = 1;     
  24.     TR0 = 1;      
  25. }  
  26. void LedScan()
  27. {
  28.     static unsigned char i = 0;  //動(dòng)態(tài)掃描索引
  29.         unsigned char location=0x01;
  30.     P0=0xFF;        //關(guān)閉所有段選位,顯示消隱  
  31.         P2=0xff;
  32.         location=location<<i;
  33.         location=~location;
  34.         P0=ledChar[i];
  35.         P2=location;   
  36.         i++;
  37.         i=i%8;  
  38. }
  39. /* T0中斷服務(wù)函數(shù),執(zhí)行數(shù)碼管掃描顯示 */
  40. void InterruptTimer0() interrupt 1
  41. {
  42.         static unsigned char tc=0;
  43.         tc++;
  44.     TH0 = T0RH;  //重新加載重載值
  45.     TL0 = T0RL;
  46.         if(tc==200)
  47.         {
  48.                 tc=0;
  49.                 flag200ms=1;
  50.                 flashLed=~flashLed;
  51.         }  
  52.     LedScan();   //數(shù)碼管掃描顯示
  53. }
  54. //外部中斷函數(shù)
  55. void INT0_Count() interrupt 0
  56. {         
  57.         uiCount++;
  58. }
  59. void main(void)
  60. {
  61.         unsigned char k=0;
  62.         unsigned int uiTmp=0;
  63.         EX0=1;        //允許外部中斷INT0中斷       
  64.         IT0=1;        //外部中斷INT0采用脈沖負(fù)跳變觸發(fā)方式
  65.         EA = 1;      
  66.         uiCount=0;
  67.     ConfigTimer0(1);  //配置T0定時(shí)1ms  
  68.     while (1)
  69.     {
  70.                 if(flag200ms)
  71.                 {
  72.                         flag200ms=0;
  73.                         uiTmp=uiCount;
  74.                         for(k=0;k<8;k++)
  75.                                 ledChar[k]=0xff;        
  76.                         ledChar[7]=Tab[uiTmp%10];
  77.                         if(uiTmp>=10)                          
  78. ……………………

  79. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:
繞線計(jì)數(shù)器a51程序.zip (24.56 KB, 下載次數(shù): 29)


評(píng)分

參與人數(shù) 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

5#
ID:620993 發(fā)表于 2020-3-8 07:30 | 只看該作者
動(dòng)手能力真強(qiáng)。學(xué)習(xí)一下
回復(fù)

使用道具 舉報(bào)

地板
ID:691791 發(fā)表于 2020-3-7 22:01 | 只看該作者
謝謝樓主,多多分享
回復(fù)

使用道具 舉報(bào)

板凳
ID:679425 發(fā)表于 2020-3-7 10:18 | 只看該作者
謝謝樓主,多多分享,謝謝
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:227864 發(fā)表于 2018-8-1 11:58 | 只看該作者
謝謝樓主,多多分享,謝謝
回復(fù)

使用道具 舉報(bào)

樓主
ID:365914 發(fā)表于 2018-7-22 22:52 | 只看該作者
支持下
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表