久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3486|回復: 0
收起左側

單片機軟保護電機的自動抽水系統原理圖與程序設計

[復制鏈接]
ID:341842 發表于 2020-12-15 18:02 | 顯示全部樓層 |閱讀模式
分享一個小項目與大家一起學習交流,因為個人工作等原此還是為初稿,未做進一步的升級完善優化。如后期有時間增加一些功能往智能型,顯示,水位等。

設計初終:發現市面賣的一些產品,要么價格高,要么保護電機方案采用硬件,硬件探頭容易引起失效,還在電極被污化后沒有很好起到保護,所以造成一些如電機線路損壞,水漫金山。這些現象都在設備后期使用久后的根問題。為此下面采用軟件邏輯及檢測判斷的思路來有效的設計一個保護,把保護級別為最高,這樣就算有故障也保護財產的安全,降成不必要損失。


設計核心:
1.采用新唐N76e003單片機方案:性價比高,芯片功能強大,足夠滿足些系統的設計;
2.水位檢測方案:采用電極檢測(ps:初稿只做適用性開發,未做水位顯示);
3.供電方案:采用5V系統 及電極檢測,安全性及利用(ps:好多閑置的手機充電器);
4.控制方案:采用小功率繼電器+接觸器方案;
5.程序方案:帶保護電機方案,電極故障判斷;

設計思路原理:
1.電路板電源部份:只需更換對應參數的轉換LDO芯片等相關器參數,電源可以改9V、12V。
2.繼電器部分:沒有選擇用大功率30A的設計,而選用小功能率的原因是電機一般都啟動電流大,理論上30A繼電器也是夠的,但大功率的繼電觸點還是不及于小型接觸來得穩定可靠(ps:這個用久你就知道)所以選擇小功率繼電器,繼電器-->接觸器-->電機。
3.電極檢測部份:采用三極管利用極管原理,做為電極檢測(ps:這個部份可以加處光耦效會更好)。
4.指示部份:采用LED指示,狀態:運行,停止,故障,模式。
5.按鍵部分:手動/自動模式,電極故障時可啟用手動模式,手動模式狀態下,開啟后在預定或電極檢測一定后自動停止運行。

附件:
設計的原理圖
設計程序源碼
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
51hei.png 51hei.png

單片機源程序如下:
  1. /********************************************************************************
  2. * @                            水塔自動抽水控制器
  3. * @項目: shuita
  4. * @描述:  1.通過檢測高低水位信號  
  5.                                          2.實現繼電器的開關,控制電機的開啟關閉
  6. * @版本:V2.0
  7. * @備注:開機默認為內部高速HIRC(16M)
  8. ********************************************************************************/
  9. #include "N76E003.h"
  10. #include "Common.h"
  11. //#include "Delay.h"
  12. #include "timer.h"
  13. #include "SFR_Macro.h"
  14. #include "Function_Define.h"

  15. #include "relay.h"
  16. #include "led.h"
  17. #include "key.h"
  18. #include "waterlevel.h"
  19. #include "watchdog.h"

  20. /******************************************************************************
  21. *@  狀態/標記/變量定義
  22. *@
  23. ******************************************************************************/

  24. ////高水位時間必須大于低水位時間 20200625  增加高低水故障判斷時間分開
  25. #define H_OVERTIME 60 //單位:分  max=255/60=4h15分
  26. #define L_OVERTIME 30 //單位:分  max=255/60=4h15分

  27. //debug
  28. //#define H_OVERTIME   3        //單位:分  max=255/60=4h15分
  29. //#define L_OVERTIME   1                //單位:分  max=255/60=4h15分

  30. //全局變量
  31. uint8_t timerCountBuff; //高/低水位定時器計數
  32. bit openWorkFlag = 0;
  33. bit stopWorkFlag = 0;
  34. bit autoModeLock = 1; //1為自動

  35. uint8_t workStep = 0;

  36. /*****************************************************************************
  37. *@  函數聲明
  38. *@
  39. ******************************************************************************/
  40. void allGPIOConfig(void);
  41. void motorAutoWork(void);
  42. void motorManualWork(void);

  43. /*****************************************************************************
  44. *@  main 函數
  45. *@
  46. ******************************************************************************/
  47. void main(void)
  48. {
  49.         openWorkFlag = 0;
  50.         timerCountBuff = 0;

  51.         allGPIOConfig();
  52.         allTimerInit();
  53.         keyInit();
  54.         watchdogInit();

  55.         while (1)
  56.         {

  57.                 keyProceWork();
  58.                 if (autoModeLock)
  59.                 {
  60.                         feedDog();
  61.                         ioLedAutoON;
  62.                         motorAutoWork();
  63.                 }
  64.                 else //if(autoModeLock == 0)
  65.                 {
  66.                         feedDog();
  67.                         ioLedAutoOFF;
  68.                         motorManualWork();
  69.                 }
  70.                 feedDog();
  71.         }
  72. }

  73. /*******************************************************************************************************************
  74. *@  名稱:void allGPIOConfig(void)
  75. *@        功能:實現所需io初始化
  76. *@        描述:
  77. *@        輸入:none
  78. *@        輸出:none
  79. ******************************************************************************************************************/
  80. void allGPIOConfig(void)
  81. {
  82.         //Set_All_GPIO_Quasi_Mode;
  83.         relayInit(); //繼電器初始化
  84.         ledInit();         //指示燈初始化
  85.         waterLevelInit();
  86. }

  87. /************************************************************************************
  88.   @函數:void motorAutoWork(void)
  89.   @輸入:times  高水位計時時間
  90.         @返回:none
  91.         @描述:
  92.                                  1.缺水: 低水位電極檢測到無水,后啟運抽水
  93.                                  2.有水:低水位電極檢測到有水,則不進行抽水
  94.                                  3.上水:過程中在設定時同檢測,高低電極如果異常則停止自動抽水顯示故障
  95.                                  4.上水-停水:正常過程中判斷高水位電極是否電平,如有則停止抽水

  96.         @設計:byJin
  97.         @日期:2020/04/10
  98. **********************************************************************************/
  99. void motorAutoWork(void)
  100. {
  101.         bit waterLevelFlag = 0;

  102.         switch (workStep)
  103.         {
  104.         case 0:
  105.         {
  106.                 //缺水判斷
  107.                 waterLevelFlag = lowLevelCheck();
  108.                 if (waterLevelFlag == 0)
  109.                 {
  110.                         workStep = 1;
  111.                 }
  112.                 else if (waterLevelFlag == 1)
  113.                 {
  114.                         workStep = 0;
  115.                 }
  116.                 break;
  117.         }
  118.         case 1: //水滿 -停水
  119.         {
  120.                 waterLevelFlag = highLevelCheck();
  121.                 if (waterLevelFlag == 0) //未到高水位繼續運行
  122.                 {
  123.                         TR0 = 1;
  124.                         relayWork(1);
  125.                         runWorkLedFlash();
  126.                         workStep = 1;

  127.                         //低水位電極異常,指定時間檢測無效則停機保護
  128.                         if (timerCountBuff == L_OVERTIME && lowLevelCheck() == 0)
  129.                         {
  130.                                 TR0 = 0;
  131.                                 timerCountBuff = 0;
  132.                                 workStep = 2;
  133.                         }

  134.                         //高水位電極異常,指定時間檢測無效則停機保護
  135.                         if (timerCountBuff == H_OVERTIME && highLevelCheck() == 0)
  136.                         {
  137.                                 TR0 = 0;
  138.                                 timerCountBuff = 0;
  139.                                 workStep = 2;
  140.                         }
  141.                 }
  142.                 //電極探到高水位
  143.                 else if (waterLevelFlag == 1)
  144.                 {
  145.                         TR0 = 0;
  146.                         relayWork(0);
  147.                         ioLedStopON;
  148.                         ioLedRunOFF;
  149.                         workStep = 0;
  150.                 }
  151.                 break;
  152.         }
  153.         case 2:
  154.         { //電極探頭異常,存在故障 自動模式無法使用
  155.                 TR0 = 0;
  156.                 relayWork(0);
  157.                 ioLedStopON;
  158.                 ioLedRunOFF;
  159.                 ioLedHitchON; //故障燈亮
  160.                 workStep = 2; //切換回自動后故障未解除也不能工作,此值未改變
  161.         }
  162.         break;
  163.         default:
  164.                 relayWork(0);
  165.                 break;
  166.         }
  167. }

  168. /************************************************************************************
  169.         @函數:void motorManualWork(void)
  170.   @輸入:times  高水位計時時間
  171.         @返回:none
  172.         @描述:
  173.                                  1.手啟自停 -->停采用高電極或延時判斷
  174.                                  2.高水位電極有效,則按開無效不進行啟動
  175.         @設計:byJin
  176.         @日期:2020/04/10
  177. **********************************************************************************/
  178. void motorManualWork(void)
  179. {
  180.         if (openWorkFlag && highLevelCheck() == 0 && timerCountBuff < H_OVERTIME && stopWorkFlag == 0) //高水位電極未檢測到滿且手動開啟,則啟動

  181.         { //啟動進中,按開無效,只能按關才有效
  182.                 TR0 = 1;
  183.                 relayWork(1);
  184.                 runWorkLedFlash();
  185.         }

  186.         else

  187.         {
  188.                 //                 if(timerCountBuff == H_OVERTIME || highLevelCheck() == 1 ||stopWorkFlag == 1) //高水位電極檢測滿則-- 停止
  189.                 //                        {                                                                                                                                                                                                                                                        //采用3種方法停止:定時停止、高水位電極檢測停止和手動按關停止
  190.                 TR0 = 0;
  191.                 relayWork(0);
  192.                 ioLedStopON;
  193.                 ioLedRunOFF;
  194.                 ioLedHitchOFF;
  195.                 timerCountBuff = 0;
  196.                 openWorkFlag = 0;
  197.                 stopWorkFlag = 0;
  198.                 return;
  199.                 //                        }
  200.         }
  201. }
復制代碼
51hei.png

全部資料51hei下載地址:
shuita.rar (1.48 MB, 下載次數: 15)

評分

參與人數 1黑幣 +100 收起 理由
admin + 100 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰人人做 | 日韩小视频 | 亚洲成人免费在线观看 | 噜噜噜噜狠狠狠7777视频 | 桃花av在线 | 91毛片在线观看 | 久久激情视频 | 日本不卡高字幕在线2019 | 中日av| 亚洲国产精品美女 | 久久精品99 | 成人在线视频网站 | www.久草.com| www.日韩系列 | 成人激情视频在线观看 | 国产精品一区二区三区四区五区 | h网站在线观看 | 久久精品国产一区 | 久久久久久免费毛片精品 | 夜夜精品浪潮av一区二区三区 | 欧美日韩三级视频 | 欧美性视频在线播放 | 美日韩免费 | 成人精品网 | 久久精品久久精品久久精品 | 在线观看亚 | 91免费入口| 毛片黄片| 日韩欧美国产精品一区 | 中文字幕不卡在线观看 | pacopacomama在线 | 亚洲视频 欧美视频 | 久久国产亚洲 | 国产原创在线观看 | 婷婷综合五月天 | 成人在线观看免费视频 | 成人中文字幕在线观看 | 国产精品久久久久久久久久久久久久 | 一区二区三区久久久 | 亚洲天堂一区二区 | 在线国产欧美 |