欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 74HC595芯片繼電器模塊外接電源無法正確控制繼電器吸合 [打印本頁]

作者: izhonguo    時間: 2019-3-25 21:12
標題: 74HC595芯片繼電器模塊外接電源無法正確控制繼電器吸合
各位大神好,小弟用74HC595這個串入并出的芯片控制繼電器的吸合,但是繼電器的外部三個端子上沒有接任何電源的時候是可以正確按照我代碼的控制順序進行繼電器的吸合。視頻見https://v.youku.com/v_show/id_XNDExMDk2MjUyNA==.html
當外部24V獨立DC電源接通后,可以看到在對應的繼電器位置,會出現混亂,具體每次表現不一致,但是不能按照24V外部電源不接通的情況進行吸合, 視頻見 https://v.youku.com/v_show/id_XNDExMDk2MTM1Mg==.html
這個是因為24V的直流電源對HC595芯片的引腳輸出產生了干擾嗎?線路檢查了很多次,完全沒有問題。繼電器規格是可以3A 250VAC的,所以這么低的電壓應該也不至于影響到繼電器的控制信號啊。 希望有經驗的大佬指點指點。

多謝!

作者: 7358655    時間: 2019-3-25 22:27
你把接負載后變化頻率調低點,或者說把繼電器打開關閉時間給長點,再檢查你電路繼電器線圈上反接有二極管沒,這兩個建議足以解決你的問題。
作者: izhonguo    時間: 2019-3-25 23:25
4個級聯的情況也試驗了,程序里循環寫兩組數據,第一組發0xff,0x00,0x00,0xff,然后延時幾秒后,第二組數據0x00,0xff,0xff,0x00。 在繼電器外部的24VDC電源沒有接上的情況下,繼電器按照程序設計的進行吸合。視頻見https://v.youku.com/v_show/id_XNDEwNTQzODAzNg==.html?spm=a2hzp.8244740.0.0

一旦外部24V直流電源接通,其實就是把正極從繼電器的共同端吸合至常開端,接通24V電源控制其他設備。就會出現程序初始化就繼電器全部吸合的狀態,然后感覺是到了延時函數的時候繼電器瘋狂的吸合,感覺像是延時函數中的循環在不停的往HC595的DS端寫入0和1導致。視頻見:https://v.youku.com/v_show/id_XNDEwNTQzOTU5Ng==.html?spm=a2hzp.8244740.0.0

這一周都在反復改代碼重新接線調整,但是一直失敗。。。是一直失敗。。。查了網上說的繼電器在斷在的時候線圈會產生反向電動勢, 關鍵問題是程序初始化燒入單片機后,都沒有斷開的步驟直接就全部吸合了。


百思不得其解。望大家指點一二。謝謝!

作者: wc86110    時間: 2019-3-25 23:29
上視頻不如上電路圖?季康碾娐范际褂锚毩㈦娫矗⒉捎霉怆姼綦x措施避免干擾,視頻都沒看到這些
作者: izhonguo    時間: 2019-3-26 08:22
7358655 發表于 2019-3-25 22:27
你把接負載后變化頻率調低點,或者說把繼電器打開關閉時間給長點,再檢查你電路繼電器線圈上反接有二極管沒 ...

繼電器買的是封裝好的,就是一塊595的芯片外加一塊驅動繼電器的芯片,沒有光耦。所以封裝好的繼電器應該是有反接二極管吧。我看看型號,再查一下。謝謝!
作者: izhonguo    時間: 2019-3-26 08:33
wc86110 發表于 2019-3-25 23:29
上視頻不如上電路圖?季康碾娐范际褂锚毩㈦娫,并采用光電隔離措施避免干擾,視頻都沒看到這些

接線很簡單,所有驅動繼電器的12伏電源是獨立一組,然后該12伏電源通過板子上的芯片降壓然后驅動芯片的vcc,外接繼電器的24V也是獨立的一組電源。
光電隔離措施是指驅動繼電器和hc595芯片之間嗎?這個板子是買的現成的,問了老板,他說不需要啊。
作者: 笨笨兔    時間: 2019-3-26 08:54
控制幾十個繼電器都無問題,估計是你的電路有瑕疵,上電路吧!
再個:你的繼電器接的什么負載?
作者: wulin    時間: 2019-3-26 09:03
首先要找干擾源,從你表述的現象看是繼電器觸點開關產生的火花干擾(直流電尤甚)。這種干擾的頻譜范圍很寬,獨立DC電源并不能消除空間輻射干擾。建議:1.在繼電器動、靜觸點間加裝阻容吸收電路。2.MCU與74HC595的信號線及信號地線加共模磁環(信號線及信號地線成對),盡量縮短74HC595之間聯級信號線及信號地線加共模磁環。3.降低信號傳輸阻抗(MCU的IO口設為強推挽,信號線與地之間跨接1K電阻)。4.改為光耦隔離,MOS管代替繼電器。
作者: izhonguo    時間: 2019-3-26 11:40
笨笨兔 發表于 2019-3-26 08:54
控制幾十個繼電器都無問題,估計是你的電路有瑕疵,上電路吧!
再個:你的繼電器接的什么負載?

一個負載大概也就是幾百mA的電流,不通過繼電器用直流的24V正負極直接接負載端沒有問題,而且電源功率很足,計算過即使所有板子的繼電器同時開也不可滿足電流需求。電路我得畫一下,剛接觸硬件這行業,好多工具還沒有。謝謝!
作者: izhonguo    時間: 2019-3-26 11:45
wulin 發表于 2019-3-26 09:03
首先要找干擾源,從你表述的現象看是繼電器觸點開關產生的火花干擾(直流電尤甚)。這種干擾的頻譜范圍很寬 ...

強烈感謝wulin總工您的回復,您說的好多名詞我得先搜搜看怎么做。新手入行,要學習的太多了。 真的十分感謝您的耐心指點!
作者: yzwzfyz    時間: 2019-3-27 08:46
按沙發的指點做。
作者: izhonguo    時間: 2019-3-29 09:50
yzwzfyz 發表于 2019-3-27 08:46
按沙發的指點做。

我嘗試了把繼電器吸合過后的時間調整的很長,大概有5秒左右的時間才會跳轉到下一個控制指令,但是吸合的一瞬間如果繼電器的外部端子還是有電源接通的話,干擾還是繼續存在。我嘗試過了吸合后,把外部電源的線輕輕的放在繼電器的常開端子上,有時候沒干擾,有時候還是會引起其他的繼電器打開。負載端反接二極管還沒嘗試,手邊沒有二極管,已經下單買了,等收到后試一下。。。謝謝!


作者: wulin    時間: 2019-3-29 11:20
izhonguo 發表于 2019-3-29 09:50
我嘗試了把繼電器吸合過后的時間調整的很長,大概有5秒左右的時間才會跳轉到下一個控制指令,但是吸合的 ...

你既然已經明確的知道干擾源來自繼電器觸點火花,為什么不在此處設法解決?其它方法都是隔靴搔癢。
作者: wc86110    時間: 2019-3-29 12:48
izhonguo 發表于 2019-3-29 09:50
我嘗試了把繼電器吸合過后的時間調整的很長,大概有5秒左右的時間才會跳轉到下一個控制指令,但是吸合的 ...

樓主所謂的獨立電源是不是使用同一個電源引出的不同電壓?尤其用的是開關電源驅動大負載對整個電路的穩定性影響肯定不小
是在繼電器兩端并接二極管
作者: izhonguo    時間: 2019-4-1 10:29
wulin 發表于 2019-3-29 11:20
你既然已經明確的知道干擾源來自繼電器觸點火花,為什么不在此處設法解決?其它方法都是隔靴搔癢。

嗯嗯,上周按照您的指點,在網上買了排除干擾的一些硬件,但是還沒有收到。所以想試試其他的方法是否可以解決?刂茊纹瑱C的代碼現在簡化之后,如果通過串口發送數據到單片機執行相應的繼電器閉合的話,外部24V接在繼電器的外部端子上,竟然沒有問題。但是如果直接把數據寫死在程序里,就會出現控制的問題。即使發送的是同樣的數據。寫死在程序里的數據如果要實現兩組隔段時間輸出的話,中間要加一個延時函數,有沒有可能是延時函數導致的單片機輸出0/1,從而引起的繼電器不受控?

/*-----------------------------------------------
工程名:   STC操作74HC595級聯 控制繼電器程序
-----------------------------------------------*/
#include <reg51.H>
#define uint unsigned int
#define uchar unsigned char
uint status[5]={00};        //測試程序模式選擇
uchar table0[] ="OK\n";        //用于串口助手返回驗證
uchar table1[]="ERROR\n";//用于串口助手返回驗證
bit flag=0;
uint rnum=5;
/*-----------------------------------------------
STC單片機 硬件設備引腳定義如下
-----------------------------------------------*/
        sbit   OE   = P3^4;           //使能線  
        sbit   SCK  = P3^6;           //時鐘線
        sbit   RCK  = P3^7;           //鎖存線  
        sbit   DATA = P3^5;           //數據線
        sbit   POWER = P0^0;  //閉合模塊總電源繼電器,模塊通電
        sbit   RPOWER = P0^1;  //閉合模塊總電源繼電器,模塊通電

/*-----------------------------------------------
全部變量函數定義
-----------------------------------------------*/
/*-----------------------------------------------
函數名:初始化程序
-----------------------------------------------*/
/*******************串口初始化函數*************************/
void URATinit()
{  
        PCON &= 0x7F;                //波特率不倍速9600
        SCON = 0x50;                //8位數據,可變波特率
        TMOD= 0x20;                        //設定定時器1為8位自動重裝方式
        TL1 = 0xFD;                        //設定定時初值
        TH1 = 0xFD;                        //設定定時器重裝值
        ET1 = 0;                           //禁止定時器1中斷
        TR1 = 1;                           //啟動定時器1
        EA = 1;                            //開總中斷
        ES = 1;                            //開串口中斷
}

/**********串口發送函數**************/
void SendOneByte(uchar i)
{
    SBUF = i;                //發送數據
    while(!TI);        //等待發送完成
    TI = 0;                        //發送中斷請求標志位清0
}

/*-----------------------------------------------
函數名:single 74HC595寫入字節函數
-----------------------------------------------*/
void SEND_HC595(uchar dat)
{        
                        uchar i;
                        for(i=0;i<8;i++)
                {
             dat <<= 1;
             DATA  = CY; //溢出位賦值數據輸出端
             SCK = 1; //移位時鐘
             SCK = 0;
                }
}
/*-----------------------------------------------
函數名:74HC595寫入字節函數
-----------------------------------------------*/

void HC595()
{     
                   uchar i,j;
                if(flag==1)
                {
                        for(i=0;i<3;i++)
                {
                    SendOneByte(table0);//返回PC "OK"(用串口助手文本模式接收)
                }
                }
                ES=0;
                for(j=0;j<rnum;j++)
                {
                         SEND_HC595(status[j]);
                }
                RCK=1;
                OE=0;
                RCK=0;
                ES=1;
            flag=0;
}

/*-----------------------------------------------
函數名:main 主函數
-----------------------------------------------*/
void main(void)
{
        POWER = 1;  //閉合模塊總電源繼電器,模塊通電
        RPOWER = 1; //閉合電磁鐵模塊總電源繼電器,模塊通電
        OE=1;
        SCK = 0;  //初始化移位時鐘端
    RCK  = 0;  //初始化鎖存輸出端
        URATinit();         //初始化串口
        while(1)
        {
                HC595();
        }
}
/*-----------------------------------------------
函數名:中斷函數
-------------------------------------------------*/
void receive() interrupt 4
{
        static uchar i=0;  //靜態計數變量
        RI=0;        //接收中斷請求標志位清0
        status=SBUF;  //接收到的數據串保存在模式選擇中
                if(status[0]==0xAA)
                {
                    i++;
                        if(i>=rnum)
                        {
                          flag=1;
                                i=0;      //計數變量清0
                        }
                }
}
作者: izhonguo    時間: 2019-4-1 10:32
wc86110 發表于 2019-3-29 12:48
樓主所謂的獨立電源是不是使用同一個電源引出的不同電壓?尤其用的是開關電源驅動大負載對整個電路的穩定 ...

不是。。獨立電源是從220V直接降壓到24V的一組電源,控制繼電器板子的12V電源也是從220V直接降到12V的一組電源,兩個是完全獨立的。。只不過都是從插排上接的市電。二極管我買了1A/50V的整流二極管,還沒有收到。收到后,我也試試增加是否能排除干擾。謝謝!
作者: wulin    時間: 2019-4-1 14:51
izhonguo 發表于 2019-4-1 10:29
嗯嗯,上周按照您的指點,在網上買了排除干擾的一些硬件,但是還沒有收到。所以想試試其他的方法是否可以 ...

這段程序改這樣才合理些。
  1. /*-----------------------------------------------
  2. 工程名:   STC操作74HC595級聯 控制繼電器程序
  3. -----------------------------------------------*/
  4. #include <reg51.H>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. #define rnum 5
  8. uint status[5];        //串口接收緩存
  9. uchar table0[] ="OK\n";        //用于串口助手返回驗證
  10. uchar table1[]="ERROR\n";//用于串口助手返回驗證
  11. bit flag=0;

  12. /*-----------------------------------------------
  13. STC單片機 硬件設備引腳定義如下
  14. -----------------------------------------------*/
  15. sbit   OE   = P3^4;           //使能線  
  16. sbit   SCK  = P3^6;           //時鐘線
  17. sbit   RCK  = P3^7;           //鎖存線  
  18. sbit   DATA = P3^5;           //數據線
  19. sbit   POWER = P0^0;  //閉合模塊總電源繼電器,模塊通電
  20. sbit   RPOWER = P0^1;  //閉合模塊總電源繼電器,模塊通電

  21. /*-----------------------------------------------
  22. 全部變量函數定義
  23. -----------------------------------------------*/
  24. /*-----------------------------------------------
  25. 函數名:初始化程序
  26. -----------------------------------------------*/
  27. /*******************串口初始化函數*************************/
  28. void URATinit()
  29. {  
  30.         PCON &= 0x7F;                //波特率不倍速9600
  31.         SCON = 0x50;                //8位數據,可變波特率
  32.         TMOD= 0x20;                        //設定定時器1為8位自動重裝方式
  33.         TL1 = 0xFD;                        //設定定時初值
  34.         TH1 = 0xFD;                        //設定定時器重裝值
  35.         ET1 = 0;                           //禁止定時器1中斷
  36.         TR1 = 1;                           //啟動定時器1
  37.         EA = 1;                            //開總中斷
  38.         ES = 1;                            //開串口中斷
  39. }

  40. /**********串口發送函數**************/
  41. void SendOneByte(uchar i)
  42. {
  43.     SBUF = i;                //發送數據
  44.     while(!TI);        //等待發送完成
  45.     TI = 0;                        //發送中斷請求標志位清0
  46. }

  47. /*-----------------------------------------------
  48. 函數名:single 74HC595寫入1個字節函數
  49. -----------------------------------------------*/
  50. void SEND_HC595(uchar dat)
  51. {        
  52.         uchar i;
  53.         for(i=0;i<8;i++)
  54.         {
  55.                 dat <<= 1;
  56.                 DATA  = CY; //溢出位賦值數據輸出端
  57.                 SCK = 1; //移位時鐘
  58.                 SCK = 0;
  59.         }
  60. }
  61. /*-----------------------------------------------
  62. 函數名:74HC595寫入4個字節函數
  63. -----------------------------------------------*/

  64. void HC595()
  65. {     
  66.         uchar i;
  67.         if(flag==1)
  68.         {
  69.                 flag=0;
  70.                 ES=0;
  71.                 for(i=0;i<3;i++)
  72.                 {
  73.                         SendOneByte(table0);//返回PC "OK"(用串口助手文本模式接收)
  74.                 }
  75.                 for(i=1;i<rnum;i++)
  76.                 {
  77.                         SEND_HC595(status[i]);//輸出緩存status[1]~[4]數據
  78.                 }
  79.                 RCK=1;
  80.                 OE=0;
  81.                 RCK=0;
  82.                 ES=1;
  83.         }
  84. }

  85. /*-----------------------------------------------
  86. 函數名:main 主函數
  87. -----------------------------------------------*/
  88. void main(void)
  89. {
  90.         POWER = 1;  //閉合模塊總電源繼電器,模塊通電
  91.         RPOWER = 1; //閉合電磁鐵模塊總電源繼電器,模塊通電
  92.         OE=1;
  93.         SCK = 0;  //初始化移位時鐘端
  94.         RCK  = 0;  //初始化鎖存輸出端
  95.         URATinit();         //初始化串口
  96.         while(1)
  97.         {
  98.                 HC595();
  99.         }
  100. }
  101. /*-----------------------------------------------
  102. 函數名:中斷函數
  103. -------------------------------------------------*/
  104. void receive() interrupt 4
  105. {
  106.         static uchar i=0;  //靜態計數變量
  107.         RI=0;        //接收中斷請求標志位清0
  108.         status[i]=SBUF;  //接收到的數據串保存在模式選擇中
  109.         if(status[0]==0xff)//驗證數據頭,后4字節為有效數據
  110.         {
  111.                 i++;
  112.                 if(i>=rnum)
  113.                 {
  114.                         flag=1;
  115.                         i=0;      //計數變量清0
  116.                 }
  117.         }
  118. }
復制代碼


作者: zl2168    時間: 2019-4-1 21:13
595驅動力不足
作者: 笨笨兔    時間: 2019-4-2 14:40
給繼電器線圈加反向二極管吧?
看起來你的負載不是感性負載。。。。。。
作者: ysandi    時間: 2019-4-2 15:55
你不接24V會正常,說明程序沒問題。我估計問題是出在繼電器這塊板上。你仔細找一找,你接入24V電源的接口是否與電路板的其他地方有相連(比如電路板的正極)。
作者: izhonguo    時間: 2019-4-2 19:25
wulin 發表于 2019-4-1 14:51
這段程序改這樣才合理些。
/*-----------------------------------------------
工程名:   STC操作74H ...

wulin總工,您好,這個代碼是我一行一行試出來的,之前按照很完美的邏輯并沒有辦法運行,我就開始從最簡單的步驟一步一步往上加,比如說剛開始簡化到只讀取程序內寫死的一個字節的代碼,然后慢慢加到中斷,加到四個模塊,我估計八個模塊也能用,但是板子沒那么多,所以只用到了四個模塊。之前很完美的程序包含了OK返回邏輯和ERROR返回邏輯,經過我一行一行代碼增加去試驗,之前我那個代碼是目前沒有辦法消除外部干擾情況下還能達到目的最齊全的了。如果增加了ERROR返回邏輯,又開始報錯。同樣如果把除了返回OK的代碼之外的放進去判斷flag==1的邏輯里(就像您寫的,不過status和table0應該是后面都忘記了加[ i],更符合邏輯的代碼),就會報錯。。。這個實在是變成玄學了。這是是一鏡哦耶版的視頻,真的無法解釋了。。https://v.youku.com/v_show/id_XNDEyMjg5NTQ1Mg==.html

我試驗出來的代碼:(自動發送數據,間隔位1m)


對應繼電器狀態:


更符合邏輯的代碼:


對應繼電器的狀態:



作者: izhonguo    時間: 2019-4-2 19:31
笨笨兔 發表于 2019-4-2 14:40
給繼電器線圈加反向二極管吧?
看起來你的負載不是感性負載。。。。。。

二極管我買了1A/50V的整流二極管, 但是繼電器線圈怎么加方向二極管?這個是直接封裝好的繼電器,只有外部三個端口,共同端COM, 常閉端NC, 常開端NO。是說把NO和COM兩個端口加反向二極管?可是這兩個端子無所謂正負啊,我就是導通了負載的正極電源線而已,應該沒有正反級的說法吧。。負載端我倒是可以試驗一下反接二極管,但是還沒有收到。。。
作者: izhonguo    時間: 2019-4-2 19:33

不應該是驅動力不足啊,我看他這個板子上595的輸出端口是直接接在了另一塊驅動芯片LN2803上,單獨一組12V的直流電源驅動的。請看我12樓的電路圖。
作者: izhonguo    時間: 2019-4-2 19:36
ysandi 發表于 2019-4-2 15:55
你不接24V會正常,說明程序沒問題。我估計問題是出在繼電器這塊板上。你仔細找一找,你接入24V電源的接口是 ...

經過過去兩周的無數次試驗,應該確定是24V的電源接通到繼電器的端子上,對內部產生了信號干擾。因為24V的接線是不會接觸到板子上的任何電路的,繼電器這個動/靜觸電是唯一接觸24V的地方,而且繼電器的規格上寫的是可以到250V的電壓,電流的承載能力應該是我負載的100倍至少。


作者: izhonguo    時間: 2019-4-2 19:43
ysandi 發表于 2019-4-2 15:55
你不接24V會正常,說明程序沒問題。我估計問題是出在繼電器這塊板上。你仔細找一找,你接入24V電源的接口是 ...

而且板子我買了三家不同的,都是這個問題,可以復現。我這周一嘗試了直接用HC595的芯片插面包板上,自己將輸出的八個引腳接到一組帶光耦分離的繼電器板子上,不過我現在還沒有能把595面包板上對應的引腳電壓給輸出正確,程序還是同樣的程序,但是燒入單片機之后輸出到芯片上拿萬用表量并不能實現我控制的引腳高低電平。 我用的是P3^4,P3^5,P3^6,P3^7這幾個IO口,但是沒有接上拉下拉電阻。
作者: izhonguo    時間: 2019-4-2 22:23
wulin 發表于 2019-4-1 14:51
這段程序改這樣才合理些。
/*-----------------------------------------------
工程名:   STC操作74H ...

奇怪,我回復了一條很長很詳細的帖子,但是一直沒有出現,我后面回復的幾個帖子都通過審核了。。。所以只能靠記憶重新寫一次。
代碼是我接了繼電器的外部電源后發現有問題,從最簡單的開始一行一行測試的。這個是我目前能加到最多的邏輯而且能按照我期待的工作的(在沒有增加排除干擾的其他硬件的前期下)。之前把其他的執行代碼也放在了flag==1的括弧內,但是會出現繼電器亂跳的情況。(wulin總工您代碼里那個status和table0數組里循環寫的時候應該有個在后面吧,可能是筆誤)。我重新嘗試了復原一遍把執行的代碼放進去flag==1的邏輯內,就會出現視頻中這種劈里啪啦亂吸的現象,但是我的那個代碼是完全相同的情況下,能夠按照我想要的結果執行,F在這是變成玄學了嘛?越符合邏輯的代碼,反而會出錯。我之前還把ERROR這個返回的信息也寫進去了,但是無論如何都會報錯。具體表現為一旦載入了程序就會立馬開始不斷收到ERRPR的錯誤在串口接收的窗口內。一鏡哦耶版的視頻在這兒,論壇不支持上傳視頻,所以傳在優酷上了,可能有開頭廣告,抱歉。https://v.youku.com/v_show/id_XNDEyMjg5NTQ1Mg==.html?spm=a2ha1.12675304.uerCenter.5!3~5~5!2~DL~DD~A&firsttime=118.93

為了方便閱讀,我截圖幾張放在帖子里:
1. 之前15樓的不太符合邏輯的代碼,自動發送01 02 03 04數組,時間間隔為1s.


2.執行結果(外部24V接通,沒有增加任何防干擾的措施):


3.修改為更符合邏輯的代碼(發送同樣的數據):


4.執行結果(每次開的繼電器不一致,截圖不夠完善,視頻看的更清楚):






作者: ysandi    時間: 2019-4-3 08:57
izhonguo 發表于 2019-4-2 19:36
經過過去兩周的無數次試驗,應該確定是24V的電源接通到繼電器的端子上,對內部產生了信號干擾。因為24V的 ...

去掉24v電源,就用板上的12V電源引到繼電器,串一個小功率負載試試。我經常用繼電器控制220V電源,都沒出現過這樣的問題。




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1