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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機(jī)+ACS712電流采樣檢測監(jiān)控開發(fā)工控板源碼等資料下載

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
【ACS712簡介】
ACS712具有精確的低偏置線性霍爾傳感器電路,且其銅制的電流路徑靠近晶片的表面。通過該銅制電流路徑施加的電流能夠生成可被集成霍爾IC感應(yīng)并轉(zhuǎn)化為成比例電壓的磁場。通過將磁性信號靠近霍爾傳感器,實(shí)現(xiàn)器件精確度優(yōu)化。精確的成比例電壓由穩(wěn)定斬波型低偏置BiCMOS霍爾IC提供,該IC出廠時已進(jìn)行精確度編程。
當(dāng)通過用作電流感測通路的主要銅制電流路徑(從引腳1和2,到3和4)的電流不斷上升時,器件的輸出具有正斜率(>VIOUT(Q))。該傳導(dǎo)通路的內(nèi)電阻通常是1.2 mΩ,具有較低的功耗。銅線的粗細(xì)允許器件在可達(dá)5×的過電流條件下運(yùn)行。傳導(dǎo)通路的接線端與傳感器引腳(引腳5到8)是電氣絕緣的。這讓ACS712電流傳感器可用于那些要求電氣絕緣卻未使用光電絕緣器或其它昂貴絕緣技術(shù)的應(yīng)用。
ACS712采用小型的表面安裝SOIC8封裝。引腳架鍍采用100%霧錫電鍍,可與標(biāo)準(zhǔn)無鉛(Pb)印刷電路板裝配流程兼容。在內(nèi)部,該器件為無鉛產(chǎn)品,倒裝法使用當(dāng)前豁免于RoHS的高溫含鉛焊球除外。器件在出廠裝運(yùn)前已完全校準(zhǔn)。



包含以下單片機(jī)控制源碼:


電流檢測MODBUS協(xié)議:
l  串口波特率:1位起始位、8位數(shù)據(jù)位1位停止位、無效驗(yàn)
l  默認(rèn)地址:0x01
l  通訊接口:RS485
l  通信協(xié)議:MODBUS-RTU模式
l  讀取下位機(jī)檢測電流值:
l  上位機(jī)發(fā)送:
  地址
  
  功能
  
  寄存器地址
  
  讀取數(shù)據(jù)個數(shù)
  
  CRC校驗(yàn)
  
  0x01
  
  0x03
  
  高:0x00
  
  低:0x01
  
  高:0x00
  
  低:0x01
  
  0xD5
  
  0x CA
  








l  下位機(jī)返回:
  地址
  
  功能
  
  字節(jié)數(shù)
  
  電流值
  
  CRC校驗(yàn)
  
  0x01
  
  0x03
  
  0x02
  
  高:0x00
  
  低:0x00
  
  0xB8
  
  0x44
  








讀取下位機(jī)設(shè)定值:
上位機(jī)發(fā)送:
  地址
  
  功能
  
  寄存器地址
  
  讀取數(shù)據(jù)個數(shù)
  
  CRC校驗(yàn)
  
  0x01
  
  0x03
  
  高:0x00
  
  低:0x02
  
  高:0x00
  
  低:0x01
  
  0x25
  
  0x CA
  








下位機(jī)返回:
  地址
  
  功能
  
  字節(jié)數(shù)
  
  溫度值
  
  CRC校驗(yàn)
  
  0x01
  
  0x03
  
  0x02
  
  高:0x00
  
  低:0x00
  
  0xB8
  
  0x44
  










l  控制繼電器打開
l  上位機(jī)發(fā)送
  地址
  
  功能
  
  寄存器地址
  
  讀取數(shù)據(jù)個數(shù)
  
  CRC校驗(yàn)
  
  0x01
  
  0x05
  
  高:0x00
  
  低:0x00
  
  高:0xff
  
  低:0x00
  
  0x8C
  
  0x 3A
  








l  下位機(jī)返回
  地址
  
  功能
  
  寄存器地址
  
  讀取數(shù)據(jù)個數(shù)
  
  CRC校驗(yàn)
  
  0x01
  
  0x05
  
  高:0x00
  
  低:0x00
  
  高:0xff
  
  低:0x00
  
  0x8C
  
  0x 3A
  









l  控制繼電器關(guān)閉
l  上位機(jī)發(fā)送
  地址
  
  功能
  
  寄存器地址
  
  讀取數(shù)據(jù)個數(shù)
  
  CRC校驗(yàn)
  
  0x01
  
  0x05
  
  高:0x00
  
  低:0x00
  
  高:0x00
  
  低:0x00
  
  0xCD
  
  0x CA
  








l  下位機(jī)返回
  地址
  
  功能
  
  寄存器地址
  
  讀取數(shù)據(jù)個數(shù)
  
  CRC校驗(yàn)
  
  0x01
  
  0x05
  
  高:0x00
  
  低:0x00
  
  高:0x00
  
  低:0x00
  
  0xCD
  
  0x CA
  










設(shè)定電流報警值
上位機(jī)發(fā)送
  地址
  
  功能
  
  寄存器地址
  
  設(shè)定10A
  
  CRC校驗(yàn)
  
  0x01
  
  0x06
  
  高:0x00
  
  低:0x02
  
  高:0x00
  
  低:0x0A
  
  0XA8
  
  0x 0D
  








下位機(jī)返回
  地址
  
  功能
  
  寄存器地址
  
  返回設(shè)定2A
  
  CRC校驗(yàn)
  
  0x01
  
  0x06
  
  高:0x00
  
  低:0x02
  
  高:0x00
  
  低:0x0A
  
  0Xca8
  
  0x 0D
  










數(shù)碼管正常交流電流帶MOUDBUS -(0到5A量程)無加倍共陰單片機(jī)源程序如下:
  1.     /********************************************************************
  2. ********************************************************************/
  3. #include "hader\\main.h"
  4. #include<math.h>
  5. #define uchar unsigned char//宏定義無符號字符型
  6. #define uint unsigned int  //宏定義無符號整型
  7. #define FOSC 11059200L
  8. #define BAUD  9600

  9. #define ADC_POWER   0x80            //ADC 電源控制位
  10. #define ADC_FLAG    0x10            //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位
  11. #define ADC_START   0x08            //ADC 開始轉(zhuǎn)換控制位
  12. #define ADC_SPEEDHH 0x60            //270個時鐘周期轉(zhuǎn)換一次

  13. sfr ADC_DATA=0xc6;           //70個時鐘周期轉(zhuǎn)換一次
  14. void display(void);         //顯示函數(shù)
  15. void t_to_dis(uint num);

  16. #define DUAN P2                   //P0口控制段
  17. #define WEI  P1                   //P2口控制位
  18. /********************************************************************
  19.                             初始定義
  20. *********************************************************************/
  21. //數(shù)碼管顯示段碼
  22. code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
  23. uchar numb[4];              //定義字符串用于數(shù)值轉(zhuǎn)換
  24. uint cnt=0,times=0;
  25. uint ad,ad2=0,ad3=0,ad22=0;
  26. float ad1=0;
  27. bit flag,write;        //定時標(biāo)志位
  28. uint16 idata setcurent,setcurent1;
  29. uchar  idata keystat[3];

  30. uint ii=0;jj=0;
  31. uint  adcj[200];
  32. uint adcj2[13];

  33. bit bt1ms,flag,flag1;        //定時標(biāo)志位
  34. uint8        idata sendBuf[32],receBuf[16]; //發(fā)送接收緩沖區(qū)
  35. uint8        idata receTimeOut;                //接收超時
  36. uint16 idata setcurent;
  37. // 串行中斷程序
  38. void initInt(void)
  39. {
  40.     SCON = 0x50;
  41.         TMOD = 0x21;
  42.          PCON = 0;
  43.         TH0 =(655336-1000)/256;
  44.     TL0 =(655336-1000)%256;
  45.         TH1=  0xfd;       
  46.         TL1 = 0xfd;                             //波特率 9600
  47.         TR0 = 1;
  48.         TR1=1;                       
  49.     ET0 = 1;
  50.         ES = 1;
  51.         EA = 1;               
  52. }
  53. //初始化
  54. void initProg(void)
  55. {       
  56.     P2M1=0;
  57.         P2M0=0xff;
  58.         P1M1=0x80;
  59.         P1M0=0x0f;
  60.         P3M1&=0x7f;
  61.         P3M0|=0x80;
  62.         initInt(); //初始化定時器
  63. }

  64. /********************************************************************
  65.                             超時處理
  66. *********************************************************************/
  67. void timeProc(void)
  68. {       
  69.         if(bt1ms)        //如果1ms到
  70.         {
  71.                 bt1ms = 0;
  72.         if(receTimeOut>0)        //如果接收超時值>0
  73.         {
  74.             receTimeOut--;        //接收超時-1(1ms減1次)
  75.             if(receTimeOut==0 && receCount>0)   //判斷通訊接收是否超時
  76.             {
  77.                 receCount = 0;      //將接收地址偏移寄存器清零
  78.                                 checkoutError = 0;
  79.             }
  80.         }
  81.         }
  82. }   // void TimerProc(void)
  83. /********************************************************************
  84.                             延時函數(shù)
  85. *********************************************************************/
  86. void delay(uint x)//延時程序 0.1秒
  87. {
  88.         uint m,n,s;
  89.         for(m=x;m>0;m--)
  90.         for(n=20;n>0;n--)
  91.         for(s=248;s>0;s--);
  92. }
  93. void xs(uchar);
  94. /********************************************************************
  95.                          AD轉(zhuǎn)換初始化程序
  96. *********************************************************************/
  97. void InitADC()
  98. {
  99.     P1=P1M0|=0xf0;
  100.         P1M1=0x00;
  101.         ADC_DATA=0;        //AD數(shù)據(jù)寄存器清空
  102.     ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;//打開AD電源,轉(zhuǎn)換周期XX
  103.     delay(10);                //延時
  104. }
  105. /********************************************************************
  106.                          AD轉(zhuǎn)換控制程序
  107. *********************************************************************/
  108. uint GetADCResult(uchar px)          //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
  109. {
  110.     uint t;
  111.         ADC_CONTR=ADC_POWER | ADC_SPEEDHH | px | ADC_START;//開始轉(zhuǎn)換
  112.     _nop_();                        //延時一個機(jī)器周期
  113.     _nop_();                                                //延時一個機(jī)器周期
  114.     _nop_();                                                //延時一個機(jī)器周期
  115.     _nop_();                                                //延時一個機(jī)器周期
  116.         _nop_();                        //延時一個機(jī)器周期
  117.         while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
  118.         ADC_CONTR &= ~ADC_FLAG;       //關(guān)閉AD轉(zhuǎn)換
  119.         t=(ADC_DATA<<2)|ADC_LOW2;
  120.         return t;
  121. }                  
  122. /********************************************************************
  123.                             按鍵掃描
  124. *********************************************************************/
  125. void key_scan(void)
  126. {
  127.   if(key1==0) //功能按鍵,顯示調(diào)整和實(shí)測值
  128.   {
  129.     if(++keystat[0]>=30)
  130.     {
  131.       keystat[0] = 1;
  132.     }
  133.   }
  134.    else
  135.    if((key1)&&(keystat[0]))
  136.    {
  137.             keystat[0] = 0;
  138.          flag1=!flag1;
  139.    }
  140.   if(flag1==1)
  141.   {
  142.       //增加設(shè)定電流值
  143.           if(key2==0) //增加設(shè)定電流值
  144.           {
  145.                   if(++keystat[1]>=80)
  146.                   {
  147.                            keystat[1]=1;
  148.                         setcurent=setcurent+5 ;  
  149.                         if(setcurent>3000)
  150.                           setcurent=5;
  151.                         write = 1;
  152.                    }                                                 
  153.           }
  154.          else if((key2)&&(keystat[1]))
  155.                  {
  156.                          keystat[1] = 0;
  157.          }

  158.           //減小設(shè)定電流值
  159.           if(key3==0) //減小設(shè)定電流值
  160.           {
  161.                    if(++keystat[2]>=80)
  162.                    {
  163.                                    keystat[2] = 1;
  164.                                 setcurent = setcurent-5;  
  165.                                 if(setcurent<=5)
  166.                                   setcurent=3000;
  167.                                 write = 1;
  168.                    }
  169.           }
  170.           else if((key3)&&(keystat[2]))
  171.                    {
  172.                          keystat[2] = 0;
  173.                    }
  174.   }
  175. }

  176. void Selectsort(uint A[],uchar n)
  177. {
  178.      uchar i,j,min;
  179.          uint temp;
  180.      for(i=0;i<n;i++)
  181.      {
  182.           min=i;
  183.           for(j=i+1;j<=n;j++)  /* 從j往前的數(shù)據(jù)都是排好的,所以從j開始往下找剩下的元素中最小的 */
  184.           {
  185.                if(A[min]>A[j])  /* 把剩下元素中最小的那個放到A[i]中 */
  186.                {
  187.                 temp=A[i];
  188.                 A[i]=A[j];
  189.                 A[j]=temp;
  190.                }
  191.           }
  192.     }  
  193. }
  194. /********************************************************************
  195.                             主函數(shù)
  196. *********************************************************************/
  197. void main()
  198. {       
  199.     uint i;
  200.         uchar j,t;
  201.     initProg();
  202.     InitADC();  //AD初始化
  203.         setcurent=IapReadByte(0);
  204.         setcurent=setcurent*255+IapReadByte(1);
  205.         while(1)
  206.         {         
  207.               if(flag1)                     //顯示設(shè)定值
  208.                    t_to_dis(setcurent);   //數(shù)值變換
  209.                   else           //否則顯示實(shí)測值
  210.                     t_to_dis(ad2);   //數(shù)值變換
  211.                  if(flag==0)
  212.                  {
  213.                   if(ad2>=setcurent)  //判斷是否大于設(shè)定電流值
  214.                     OUT=0;
  215.                    else
  216.                     OUT=1;
  217.                  }
  218.                  if(write)
  219.                  {
  220.                     write=0;
  221.                         IapEraseSector(0);
  222.                         IapProgramByte(0,setcurent/255);
  223.                         IapProgramByte(1,setcurent%255);
  224.                   }
  225.                  timeProc();
  226.                   checkComm0Modbus();
  227.             ad=GetADCResult(7);
  228.                 i=ad*10;
  229.                 if(i>=5120&&i<=7020)
  230.                 {
  231.                   adcj[j++]=i;
  232.                 }
  233.                 if(j>20)
  234.                 {
  235.                   j=0;
  236.                   Selectsort(adcj,20);
  237.                   adcj2[t++]=adcj[20];
  238.                   if(t>3)
  239.                    {
  240.                     t=0;
  241.                         Selectsort(adcj2,3);
  242.                     ad1 = 25*((adcj2[3]-5120)/10240.0)/0.185;
  243.                         ad1=ad1*0.707*3;
  244.                  ad2=abs(ad1);
  245.                   }
  246.                 }
  247.         }
  248. }
  249. /********************************************************************
  250.                             求值函數(shù)
  251. *********************************************************************/
  252. void t_to_dis(uint num)
  253. {       
  254.         numb[0]=num/1000;        ;            //顯示千位
  255.         numb[1]=num/100%10;                //顯示百位;                //顯示百位
  256.         numb[2]=num/10%10;                    //顯示十位
  257.         numb[3]=num%10;             //顯示個位
  258. }
  259. /********************************************************************
  260.                            定時器T0中斷函數(shù)
  261. *********************************************************************/
  262. void timer0(void)interrupt 1  
  263. {          
  264.      TH0=(65536-800)/256;
  265.          TL0=(65536-800)%256;
  266.      cnt++;
  267.          ii++;
  268.          if(ii==1000)
  269.          {
  270.            jj=2;
  271.          }
  272.          if(cnt>4)
  273.           {
  274.             cnt=1;
  275.             bt1ms=1;       
  276.          }
  277.      switch(cnt)
  278.          {
  279.     case 1: WEI&=0XF0; DUAN=seg7code[numb[2]]; wei2=1; break; //分十位
  280.           case 2: WEI&=0XF0; DUAN=seg7code[numb[1]]&0x7f; wei3=1; break;//分個位&0x7f
  281.           case 3: WEI&=0XF0; DUAN=seg7code[numb[0]]; wei4=1; break;//秒十位
  282.           default:  cnt=0;break;
  283.         }
  284.      key_scan();//按鍵掃描
  285. }
  286. /********************************************************************
  287.                           串口中斷函數(shù)
  288. *********************************************************************/
  289. void commIntProc() interrupt 4
  290. {

  291.         if(TI)
  292.         {
  293.                 TI = 0;
  294.                 if(sendPosi < sendCount) //如果發(fā)送位置小于發(fā)送計(jì)數(shù),那么繼續(xù)發(fā)送
  295.                 {
  296.                         sendPosi++;
  297.                         SBUF = sendBuf[sendPosi];
  298.                 }
  299.                 else //否則發(fā)送完畢,置接收狀態(tài)
  300.                 {
  301.                         receCount = 0;   //清接收地址偏移寄存器
  302.                         checkoutError = 0;
  303.                 }
  304.         }
  305.         else if(RI)
  306.         {
  307.                 RI = 0;
  308.                 receTimeOut = 10;    //通訊超時值
  309.                 receBuf[receCount] = SBUF;
  310.                 receCount++;          //接收地址偏移寄存器加1
  311.                 receCount &= 0x0f;    //最多一次只能接收16個字節(jié)
  312.         }
  313. }
  314. /********************************************************************
  315.                               結(jié)束
  316. *********************************************************************/
復(fù)制代碼


一、【簡要說明】
1、 尺寸:長72cmX寬67cmX高2cm
2、 主要芯片:STC12C5604AD
3、 工作電壓:直流12伏(板上有LM7805穩(wěn)壓芯片);
4、 特點(diǎn):

    可編程(通過下載排針可下載程序)
    具有兩路信號輸入端(也可檢測兩路模擬量)
    三個按鍵輸入            
    一路繼電器輸出,可控制兩路交流220V/10A一下設(shè)備
    一路電流檢測輸入(ACS712電流傳感器)
    板子帶有防反接二極管
    標(biāo)準(zhǔn)的11.0592晶振
    板子晶振11.0592,有uart接口,可以方便連接uart轉(zhuǎn)485模塊
    有復(fù)位按鍵
    帶四位數(shù)碼管顯示

5、可以根據(jù)顧客提出要求實(shí)現(xiàn)想要實(shí)現(xiàn)的功能
注:模塊有三種功能,顧客購買時,請聯(lián)系客服,詳細(xì)說明所需功能,
功能一:按鍵設(shè)定電流值(無通信)
功能二:讀取電流設(shè)定報警值
功能三:可根據(jù)顧客需要定制功能,詳細(xì)功能介紹,請看下文

全部資料51hei下載地址:
相關(guān)資料.rar (212.33 KB, 下載次數(shù): 88)
電流檢測MODBUS協(xié)議.docx (17.08 KB, 下載次數(shù): 71)
程序包.rar (744.23 KB, 下載次數(shù): 98)
03、數(shù)碼管正常交流電流帶MOUDBUS -(0到5A量程)無加倍共陰.rar (95.56 KB, 下載次數(shù): 87)


評分

參與人數(shù) 1黑幣 +5 收起 理由
denyeah + 5 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:286869 發(fā)表于 2018-3-2 10:55 | 只看該作者
您這是什么單片機(jī)??有51單片機(jī) 和acs712的程序嗎?    求教!!!! 急!!!
回復(fù)

使用道具 舉報

板凳
ID:145887 發(fā)表于 2018-6-12 15:25 | 只看該作者
圖紙?
回復(fù)

使用道具 舉報

地板
ID:377614 發(fā)表于 2018-7-23 00:00 | 只看該作者
本人想要購買,請樓主留下聯(lián)系方式,我記著做畢業(yè)論文哦,萬分感謝呢
回復(fù)

使用道具 舉報

5#
ID:140085 發(fā)表于 2018-11-12 09:58 | 只看該作者
我想問下有沒有modbus通訊的模擬量輸入輸出模塊
回復(fù)

使用道具 舉報

6#
ID:382454 發(fā)表于 2018-11-12 21:02 來自手機(jī) | 只看該作者
淘寶一堆這樣的模塊
回復(fù)

使用道具 舉報

7#
ID:90212 發(fā)表于 2024-3-12 12:12 | 只看該作者
能直接測220V交流的電流嗎?
回復(fù)

使用道具 舉報

8#
ID:149642 發(fā)表于 2024-3-12 17:16 | 只看該作者
主力前線 發(fā)表于 2018-7-23 00:00
本人想要購買,請樓主留下聯(lián)系方式,我記著做畢業(yè)論文哦,萬分感謝呢

弄個這樣的出來就可以碩士畢業(yè)了?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲一区二区三区四区五区 | 日韩精品在线播放 | 国产第一页在线观看 | 91欧美精品成人综合在线观看 | 日韩成人在线观看 | 午夜影院在线观看 | 久久成人av电影 | 久久久久se | 国产一区二区三区久久久久久久久 | 久久伊人影院 | 日日碰狠狠躁久久躁96avv | 99热精品在线 | 国产精品亚洲一区二区三区在线 | 欧美激情国产日韩精品一区18 | 亚洲精品久久嫩草网站秘色 | 日韩视频免费 | 在线视频一区二区 | 日韩精品一区二区三区四区 | 国产a视频| 狠狠干2020| 亚洲一二三区在线观看 | 中文字幕在线观看一区 | 欧美亚洲另类丝袜综合网动图 | 蜜桃在线一区二区三区 | 天天躁日日躁狠狠很躁 | 在线观看国产精品一区二区 | 国产精品日韩高清伦字幕搜索 | 欧美在线观看一区 | 亚洲风情在线观看 | 作爱视频免费观看 | 日韩三区| 欧美久久一级特黄毛片 | 三级免费| 91精品国产91久久久久久不卞 | 免费中文字幕 | 九色在线观看 | www.9191 | 久久噜噜噜精品国产亚洲综合 | 国产精品久久久久久久模特 | 亚洲一区综合 | 91久久综合|