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

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 31958|回復(fù): 33
收起左側(cè)

ACS712+單片機(jī)實(shí)現(xiàn)電流檢測(cè)與報(bào)警的電路原理圖與源碼

  [復(fù)制鏈接]
ID:139086 發(fā)表于 2018-3-24 11:18 | 顯示全部樓層 |閱讀模式
ACS712電流檢測(cè)與報(bào)警模塊系統(tǒng)的外觀:
0.jpg

ACS712電路原理圖:
0.jpg


ACS712單片機(jī)源程序如下:
  1. 實(shí)現(xiàn)功能:檢測(cè)電流,數(shù)碼管顯示電流值
  2. 使用芯片:STC12C2054AD  
  3. 產(chǎn)品模塊編號(hào):kzs1211-75150k (雙路輸入,繼電器單路輸出,三個(gè)按鍵,四位數(shù)碼管模塊)
  4. 晶振:片內(nèi)晶振

  5. #include<STC12C56.h>                 //庫(kù)文件
  6. #include <intrins.h>
  7. #define uchar unsigned char//宏定義無(wú)符號(hào)字符型
  8. #define uint unsigned int  //宏定義無(wú)符號(hào)整型
  9. #define FOSC 11059200L
  10. #define BAUD  9600

  11. #define ADC_POWER   0x80            //ADC 電源控制位
  12. #define ADC_FLAG    0x10            //ADC 轉(zhuǎn)換結(jié)束標(biāo)志位
  13. #define ADC_START   0x08            //ADC 開(kāi)始轉(zhuǎn)換控制位
  14. #define ADC_SPEEDLL 0x00            //1080個(gè)時(shí)鐘周期轉(zhuǎn)換一次
  15. #define ADC_SPEEDL  0x20            //810 個(gè)時(shí)鐘周期轉(zhuǎn)換一次
  16. #define ADC_SPEEDH  0x40            //540個(gè)時(shí)鐘周期轉(zhuǎn)換一次
  17. #define ADC_SPEEDHH 0x60            //270個(gè)時(shí)鐘周期轉(zhuǎn)換一次

  18. sfr ADC_DATA=0xc6;           //70個(gè)時(shí)鐘周期轉(zhuǎn)換一次
  19. void display(void);                  //顯示函數(shù)
  20. void t_to_dis(uint num);

  21. #define DUAN P2                   //P0口控制段
  22. #define WEI  P1                   //P2口控制位
  23. /********************************************************************
  24.                             初始定義
  25. *********************************************************************/
  26. //數(shù)碼管顯示段碼
  27. code uchar seg7code[11]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0XBF};
  28. //數(shù)碼管位控制端
  29. sbit wei1=P1^0;
  30. sbit wei2=P1^1;
  31. sbit wei3=P1^2;
  32. sbit wei4=P1^3;  
  33. //繼電器輸出控制端                           
  34. sbit OUT=P3^7;
  35. //按鍵輸入控制端
  36. sbit key1=P3^2;
  37. sbit key2=P3^3;
  38. sbit key3=P3^4;
  39. //兩路輸入控制端可做ad采樣
  40. sbit IN1=P1^6;
  41. sbit IN2=P1^5;
  42. sbit IC=P1^7;
  43. uchar numb[4];              //定義字符串用于數(shù)值轉(zhuǎn)換
  44. uint tcnt;
  45. uchar cnt,times,date;
  46. uint ad,ad2;
  47. float ad1;
  48. /********************************************************************
  49.                             命令定義
  50. *********************************************************************/
  51. #define CMD_IDLE     0         //EEPROM無(wú)操作
  52. #define CMD_READ     1         //讀取字節(jié)
  53. #define CMD_PROGRAM  2         //寫(xiě)入字節(jié)
  54. #define CMD_ERASE    3         //擦除字節(jié)
  55. /********************************************************************
  56.                        編程周期由晶振決定
  57. *********************************************************************/
  58. #define ENABLE_IAP 0X83         //編程周期由晶振決定(如果<12MHZ選用此項(xiàng))
  59. #define IAP_ADDRESS 0X0000                      //內(nèi)部EEPROM地址

  60. /********************************************************************
  61.                             操作函數(shù)
  62. *********************************************************************/
  63. void IapIdle()
  64. {
  65.         IAP_CONTR=0;
  66.         IAP_CMD=0;
  67.         IAP_TRIG=0;
  68.         IAP_ADDRH=0X80;
  69.         IAP_ADDRL=0;
  70. }
  71. /********************************************************************
  72.                             讀取一個(gè)字節(jié)函數(shù)
  73. *********************************************************************/
  74. uchar IapReadByte(uint addr)
  75. {
  76.         uchar dat;  
  77.         IAP_CONTR=ENABLE_IAP;
  78.         IAP_CMD=CMD_READ;
  79.         IAP_ADDRL=addr;
  80.         IAP_ADDRH=addr>>8;
  81.         IAP_TRIG=0X46;
  82.         IAP_TRIG=0XB9;
  83.         _nop_();
  84.         _nop_();
  85.         _nop_();
  86.         dat=IAP_DATA;
  87.         IapIdle();
  88.         return dat;
  89. }
  90. /********************************************************************
  91.                             寫(xiě)入一個(gè)字節(jié)函數(shù)
  92. *********************************************************************/
  93. void IapProgramByte(uint addr,uchar dat)
  94. {
  95.         IAP_CONTR=ENABLE_IAP;
  96.         IAP_CMD=CMD_PROGRAM;
  97.         IAP_ADDRL=addr;
  98.         IAP_ADDRH=addr>>8;
  99.         IAP_DATA=dat;
  100.         IAP_TRIG=0X46;
  101.         IAP_TRIG=0XB9;
  102.         _nop_();
  103.         _nop_();
  104.         _nop_();
  105.         IapIdle();
  106. }
  107. /********************************************************************
  108.                             擦除一個(gè)字節(jié)函數(shù)
  109. *********************************************************************/
  110. void IapEraseSector(uint addr)
  111. {
  112.         IAP_CONTR=ENABLE_IAP;
  113.         IAP_CMD=CMD_ERASE;
  114.         IAP_ADDRL=addr;
  115.         IAP_ADDRH=addr>>8;
  116.         IAP_TRIG=0X46;
  117.         IAP_TRIG=0XB9;
  118.         _nop_();
  119.         _nop_();
  120.         _nop_();
  121.         IapIdle();
  122. }
  123. /********************************************************************
  124.                             延時(shí)函數(shù)
  125. *********************************************************************/
  126. void delay(uint x)//延時(shí)程序 0.1秒
  127. {
  128.         uint m,n,s;
  129.         for(m=x;m>0;m--)
  130.         for(n=20;n>0;n--)
  131.         for(s=248;s>0;s--);
  132. }
  133. /********************************************************************
  134.                          AD轉(zhuǎn)換初始化程序
  135. *********************************************************************/
  136. void InitADC()
  137. {
  138.     P1=P1M0|=0xf0;
  139.         P1M1=0x00;
  140.         ADC_DATA=0;        //AD數(shù)據(jù)寄存器清空
  141.     ADC_CONTR=ADC_POWER|ADC_SPEEDHH|ADC_START;//打開(kāi)AD電源,轉(zhuǎn)換周期XX
  142.     delay(10);                //延時(shí)
  143. }
  144. /********************************************************************
  145.                          AD轉(zhuǎn)換控制程序
  146. *********************************************************************/
  147. uint GetADCResult(uchar px)          //轉(zhuǎn)換輸出的數(shù)據(jù) (PX為通道口)
  148. {
  149.     uint t;
  150.         ADC_CONTR=ADC_POWER | ADC_SPEEDHH | px | ADC_START;//開(kāi)始轉(zhuǎn)換
  151.     _nop_();                        //延時(shí)一個(gè)機(jī)器周期
  152.     _nop_();                                                //延時(shí)一個(gè)機(jī)器周期
  153.     _nop_();                                                //延時(shí)一個(gè)機(jī)器周期
  154.     _nop_();                                                //延時(shí)一個(gè)機(jī)器周期
  155.         while (!(ADC_CONTR & ADC_FLAG));//等待轉(zhuǎn)換結(jié)束
  156.         ADC_CONTR &= ~ADC_FLAG;       //關(guān)閉AD轉(zhuǎn)換
  157.         t=(ADC_DATA<<2)|ADC_LOW2;
  158.         return t;
  159. }                  
  160. /********************************************************************
  161.                            IO口初始化函數(shù)
  162. *********************************************************************/   
  163. void init_all(void)
  164. {               
  165.     P2M1=0;
  166.         P2M0=0xff;
  167.         P1M1=0x80;
  168.         P1M0=0x0f;
  169.         P3M1&=0x7f;
  170.         P3M0|=0x80;
  171. }
  172. /********************************************************************
  173.                            定時(shí)器T1初始化
  174. *********************************************************************/
  175. void timer0init(void)
  176. {
  177.          TMOD=0X01;                  //設(shè)定定時(shí)器工作方式
  178.          TH0 =(655336-1000)/256;
  179.      TL0 =(655336-1000)%256;
  180.          ET0=1;
  181.          TR0=1;
  182.          EA=1;
  183. }
  184. /********************************************************************
  185.                             主函數(shù)
  186. *********************************************************************/
  187. void main()
  188. {         
  189.    
  190.     init_all();         //初始化IO
  191.         timer0init();//定時(shí)器初始化
  192.    // InitADC();  //AD初始化
  193.           date=IapReadByte(0);
  194.          
  195.         while(1)
  196.         {  
  197.              if(key1==0)
  198.                  {
  199.                    delay(20);
  200.                    if(key1==0)
  201.                    {
  202.                             while(!key1);
  203.                          date++;
  204.                          if(date>=25)
  205.                            date=25;
  206.                          IapEraseSector(0);
  207.                          IapProgramByte(0,date);
  208.                    }
  209.                  }
  210.                   if(key2==0)
  211.                  {
  212.                    delay(20);
  213.                    if(key2==0)
  214.                    {
  215.                             while(!key2);
  216.                          date--;
  217.                          if(date<=2)
  218.                            date=2;
  219.                          IapEraseSector(0);
  220.                          IapProgramByte(0,date);
  221.                    }
  222.                  }
  223.                   t_to_dis(date);   //數(shù)值變換
  224. //                 ad=GetADCResult(7);
  225. //                 if(times>=250)
  226. //                 {
  227. //                    times=0;
  228. //                        ad=ad-2;
  229. //                    ad1=(ad*50.0)/1024-25;
  230. //                    ad1=ad1*100;
  231. //                    t_to_dis(ad1);   //數(shù)值變換
  232. //                 }
  233.     }
  234. }
  235. /********************************************************************
  236. ……………………

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

所有資料51hei提供下載:
電流報(bào)警模塊資料.rar (2.37 MB, 下載次數(shù): 705)


評(píng)分

參與人數(shù) 2黑幣 +10 收起 理由
shadeb + 5 很給力!
LIUXue12345634 + 5 贊一個(gè)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:321828 發(fā)表于 2018-7-20 09:57 | 顯示全部樓層
看看,,,,,
回復(fù)

使用道具 舉報(bào)

ID:81365 發(fā)表于 2018-7-20 16:49 | 顯示全部樓層
XUEXI學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:377614 發(fā)表于 2018-7-22 22:59 | 顯示全部樓層
這個(gè)可以作為商業(yè)用途嗎?我感覺(jué)蠻好的
回復(fù)

使用道具 舉報(bào)

ID:394505 發(fā)表于 2018-9-6 13:31 | 顯示全部樓層
學(xué)習(xí)了。!
回復(fù)

使用道具 舉報(bào)

ID:381274 發(fā)表于 2018-9-18 13:46 | 顯示全部樓層
這個(gè)能測(cè)最低多少瓦的負(fù)載?感性負(fù)載測(cè)量測(cè)量準(zhǔn)確么
回復(fù)

使用道具 舉報(bào)

ID:415940 發(fā)表于 2018-10-26 18:41 | 顯示全部樓層
請(qǐng)教版主    板子鏈接有嗎 我搜不到
回復(fù)

使用道具 舉報(bào)

ID:409028 發(fā)表于 2018-11-12 19:51 | 顯示全部樓層
        很給力!
回復(fù)

使用道具 舉報(bào)

ID:409028 發(fā)表于 2018-11-12 19:52 | 顯示全部樓層

XUEXI學(xué)習(xí)了哈哈哈
回復(fù)

使用道具 舉報(bào)

ID:465191 發(fā)表于 2019-1-9 16:05 | 顯示全部樓層
感謝分享  學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:465191 發(fā)表于 2019-1-10 10:02 | 顯示全部樓層
這個(gè)很有用 真是太及時(shí)了
回復(fù)

使用道具 舉報(bào)

ID:277230 發(fā)表于 2019-1-21 19:33 | 顯示全部樓層
正好在找這一塊的資料。 謝謝大佬,仔細(xì)閱讀肯定有長(zhǎng)進(jìn)~
回復(fù)

使用道具 舉報(bào)

ID:79874 發(fā)表于 2019-1-22 14:31 | 顯示全部樓層
能提供畫(huà)的PCB啊
回復(fù)

使用道具 舉報(bào)

ID:486105 發(fā)表于 2019-3-7 11:02 | 顯示全部樓層
過(guò)來(lái)看看
回復(fù)

使用道具 舉報(bào)

ID:490231 發(fā)表于 2019-3-29 14:04 | 顯示全部樓層
非常不錯(cuò)的
回復(fù)

使用道具 舉報(bào)

ID:190160 發(fā)表于 2019-4-11 16:46 | 顯示全部樓層
感謝分享,學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:190160 發(fā)表于 2019-4-11 16:50 | 顯示全部樓層
值得學(xué)習(xí),研究研究這個(gè)算法
回復(fù)

使用道具 舉報(bào)

ID:110606 發(fā)表于 2019-4-17 14:21 | 顯示全部樓層
已下載,學(xué)習(xí)啦,謝謝
回復(fù)

使用道具 舉報(bào)

ID:448229 發(fā)表于 2019-5-14 16:10 | 顯示全部樓層
學(xué)習(xí)了學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

ID:139201 發(fā)表于 2019-5-27 10:18 | 顯示全部樓層
剛好有用到,學(xué)習(xí)學(xué)習(xí)
回復(fù)

使用道具 舉報(bào)

ID:579642 發(fā)表于 2019-7-8 01:07 | 顯示全部樓層
主要學(xué)習(xí)下交流電流的檢測(cè)算法
回復(fù)

使用道具 舉報(bào)

ID:653902 發(fā)表于 2019-12-2 00:22 | 顯示全部樓層
現(xiàn)在正好再使用ACS712模塊方面遇到一些問(wèn)題,學(xué)習(xí)一下樓主的經(jīng)驗(yàn)。
回復(fù)

使用道具 舉報(bào)

ID:668067 發(fā)表于 2019-12-19 10:04 | 顯示全部樓層
匯編語(yǔ)言可以轉(zhuǎn)換這個(gè)嗎?
回復(fù)

使用道具 舉報(bào)

ID:682323 發(fā)表于 2020-4-29 12:01 | 顯示全部樓層
不錯(cuò),學(xué)習(xí)的好東西
回復(fù)

使用道具 舉報(bào)

ID:60263 發(fā)表于 2020-5-9 14:47 | 顯示全部樓層
ACS712模塊,精度高嗎?可以用來(lái)做電流表嗎?
回復(fù)

使用道具 舉報(bào)

ID:142485 發(fā)表于 2020-5-10 20:16 | 顯示全部樓層
不錯(cuò),報(bào)警功能怎么設(shè)置
回復(fù)

使用道具 舉報(bào)

ID:669690 發(fā)表于 2020-6-11 22:23 | 顯示全部樓層
下載看看,謝謝
回復(fù)

使用道具 舉報(bào)

ID:214628 發(fā)表于 2020-9-17 09:39 | 顯示全部樓層
謝謝樓主,正好需要研究一下。
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-1-6 15:47 | 顯示全部樓層
樓主不來(lái)了!
回復(fù)

使用道具 舉報(bào)

ID:890524 發(fā)表于 2021-4-9 13:26 | 顯示全部樓層
大佬666在學(xué)習(xí)ACS712怎么用,就刷到這個(gè)帖子了
回復(fù)

使用道具 舉報(bào)

ID:912508 發(fā)表于 2021-4-26 16:16 | 顯示全部樓層
謝謝大佬,剛好在看ACS712怎么用
回復(fù)

使用道具 舉報(bào)

ID:454295 發(fā)表于 2021-5-6 11:01 | 顯示全部樓層
求個(gè)原理圖文件
回復(fù)

使用道具 舉報(bào)

ID:70035 發(fā)表于 2021-6-22 15:57 | 顯示全部樓層
看了,51單片機(jī)的簡(jiǎn)單應(yīng)用。不過(guò)感謝樓主共享。
回復(fù)

使用道具 舉報(bào)

ID:1070487 發(fā)表于 2023-4-8 13:34 | 顯示全部樓層
acs712模塊電流傳感器
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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