找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STM32單片機(jī)智能電表交流電壓電流程序設(shè)計(jì)(電流 電壓互感器TV1005M+TA1005M)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
5、基于STM32F103單片機(jī)智能電表交流電壓電流設(shè)計(jì)
本設(shè)計(jì)由STM32單片機(jī)核心板電路+交流電壓電流檢測模塊電路+WIFI模塊電路+指示燈電路組成。
1、通過電壓互感器TV1005M和電流互感器TA1005M分別檢測交流電壓和交流電流值,
2、手機(jī)APP和WiFi模塊互聯(lián)后,可以實(shí)時(shí)顯示交流電壓、交流電流、功率和電量實(shí)時(shí)顯示在手機(jī)上。
3、當(dāng)功率超過200W時(shí),繼電器自動(dòng)斷開。功率不超過200W時(shí),可以手動(dòng)控制繼電器的開關(guān)。
4、手機(jī)和WiFi模塊連接后,手機(jī)上顯示計(jì)時(shí)時(shí)間。


名稱:AUAISOUT000
IP及端口號:10.10.10.11:8080

接受內(nèi)容:
V:123A:12345P:1234567Q:1234567.89T:123R:1

說明:(只增加R部分命令及發(fā)送內(nèi)容,其他未變動(dòng))   
V:123        表示123V交流電壓    字符5個(gè)長度不變 如12V 表示V:012
A:12345        表示12.345A交流電流     
P:1234567    表示1234.567W 瞬時(shí)功率 即縮小1000倍   
Q:1234567.89    表示1.23456789    度 縮小1000000倍 因?yàn)槎鹊膯挝槐容^大kwh
T:1234        表示1234S 單片機(jī)設(shè)備運(yùn)行時(shí)間
R:1        表示繼電器接通 供電中 0表示斷開即過載

發(fā)送內(nèi)容:*或者#     #斷開供電    *接通供電

元件清單:
極性電容    10uF
電阻    1K
STM32核心板    STM32_CORE
交流電壓電流檢測模塊    交流電壓電流檢測
ESP8266/WIFI模塊    WIFI_ESP8266
220V公頭線    2芯公頭
220V母頭線    2芯母頭
2.54單排座    3pin
2.54單排座    4pin
2.54單排座    5pin
2.54單排座    20pin
覆銅板或萬用板    /
普通USB線_大頭    /
導(dǎo)線(只萬用板有)    /
焊錫    /

單片機(jī)源程序如下:
  1. #include "led.h"
  2. #include "delay.h"
  3. #include "sys.h"
  4. #include "usart.h"
  5. #include "lcd.h"
  6. #include "adc.h"
  7. #include <stdio.h>
  8. #include "timer.h"

  9. //char tabDataV[5];//打印電壓數(shù)組
  10. //char tabDataA[7];//打印電流數(shù)組
  11. //char tabDataP[9];//打印功率數(shù)組
  12. //char tabDataQ[12];//打印電量數(shù)組
  13. //char tabDataT[6];//打印時(shí)間數(shù)組
  14. char tabData[42];//打印時(shí)間數(shù)組

  15. unsigned int ACcurrent;                //市電電流
  16. unsigned int ACvolt;                //市電電壓
  17. unsigned long PowerWt=0;//功率
  18. float PowerQd=0;//功率
  19. unsigned char relayFlag=1;
  20. int main(void)
  21. {
  22.         u16 adcx;
  23.         float temp;
  24.         delay_init();                     //延時(shí)函數(shù)初始化         
  25.         uart_init(9600);                 //串口初始化為115200
  26.   TIM3_Int_Init(499,7199);//50ms           
  27.         LED_Init();                                  //初始化與LED連接的硬件接口
  28.   LED0=0;
  29.          Adc_Init();                                  //ADC初始化            

  30.         RELAY=1; //繼電器打開
  31.         relayFlag=1;        //繼電器狀態(tài)標(biāo)識
  32.         delay_ms(4000);
  33.         
  34.         printf("AT+CIPMUX=1\r\n");                   //允許鏈接
  35.         delay_ms(1000);
  36.         printf("AT+CIPSERVER=1,8080\r\n");           //創(chuàng)建端口號8080
  37.         delay_ms(1000);
  38.         while(1)
  39.         {
  40.                 adcx=Get_Adc_Average(ADC_Channel_1,10);// PA1 交流電壓檢測口 ad轉(zhuǎn)換10次求平均值
  41.                 temp=(float)adcx*(3.3/4096);
  42.                 ACvolt=(unsigned int)(temp*303);//*303 互感器計(jì)算獲取 以及1K電阻 用示波器檢測校準(zhǔn)得到
  43.                 if(ACvolt<15) ACvolt=0;
  44.                
  45.                 adcx=Get_Adc_Average(ADC_Channel_2,10);        // PA2                                                       求平均值
  46.                 temp=(float)adcx*(3.3/4096);
  47.                 if(temp>0.02)
  48.                 {
  49.                         ACcurrent=(unsigned int)((temp-0.02)*3100);//*3950 互感器計(jì)算獲取擴(kuò)大1000倍 以及1K電阻 用示波器檢測校準(zhǔn)得到 0.02去除波動(dòng) 防止誤判斷
  50.                 }
  51.                 else
  52.                 {
  53.                                 ACcurrent=0;
  54.                 }
  55.                 if(ACcurrent<50)ACcurrent=0;//濾除電流
  56.                 PowerWt=ACvolt*ACcurrent;                 //功率
  57.                
  58.                 if(dealFlag==1)//處理標(biāo)志
  59.                 {
  60.                         dealFlag=0;
  61.                         PowerQd=(float)PowerWt*1/60.0/60.0+PowerQd;        //累計(jì)電量 1表示1s 因?yàn)殡娏鲾U(kuò)大了1000倍 因此該處也擴(kuò)大了1000倍 且此處功率單位為W 除以1000為千瓦 結(jié)果為度 1度=1千瓦時(shí)
  62.                 }
  63.                
  64.                 if(times>=9999)
  65.                 {times=0;}
  66.                
  67.                 if(PowerWt/1000>200)
  68.                 {        
  69.                         RELAY=0;                        //關(guān)閉繼電器
  70.                         relayFlag=0;
  71.                 }               

  72.                 sprintf(tabData,"V:%03dA:%05dP:%07luQ:%010.2fT:%04dR:1",ACvolt,ACcurrent,PowerWt,PowerQd,times);               
  73. //                sprintf(tabDataA,"A:%05d",ACcurrent);//電流
  74. //                sprintf(tabDataP,"P:%07lu",PowerWt);//功率
  75. //                sprintf(tabDataQ,"Q:%010.2f",PowerQd);//電量                        
  76. //                sprintf(tabDataT,"T:%04d",times);//時(shí)間
  77.                 if(relayFlag==1)
  78.                 {sprintf(tabData,"V:%03dA:%05dP:%07luQ:%010.2fT:%04dR:1",ACvolt,ACcurrent,PowerWt,PowerQd,times);                }//打印數(shù)據(jù)
  79.                 else
  80.                 {sprintf(tabData,"V:%03dA:%05dP:%07luQ:%010.2fT:%04dR:0",ACvolt,ACcurrent,PowerWt,PowerQd,times);                }//打印數(shù)據(jù)
  81.         
  82.                
  83.                 printf("AT+CIPSEND=0,42\r\n");                //發(fā)送固定字節(jié)數(shù)據(jù)的at命令
  84.                 delay_ms(200);
  85.                 printf(tabData);                                        //發(fā)送數(shù)據(jù)
  86.                 delay_ms(200);

  87.                 LED0=!LED0;                //數(shù)據(jù)發(fā)送        
  88.                 delay_ms(200);                //延時(shí)
  89.         }                                                                                            
  90. }        
復(fù)制代碼
  1. #include "adc.h"
  2. #include "delay.h"
  3.    
  4.                   
  5. //初始化ADC
  6. //這里我們僅以規(guī)則通道為例
  7. //我們默認(rèn)將開啟通道0~3                                                                                                                                          
  8. void  Adc_Init(void)
  9. {         
  10.         ADC_InitTypeDef ADC_InitStructure;
  11.         GPIO_InitTypeDef GPIO_InitStructure;

  12.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA |RCC_APB2Periph_ADC1        , ENABLE );          //使能ADC1通道時(shí)鐘


  13.         RCC_ADCCLKConfig(RCC_PCLK2_Div6);   //設(shè)置ADC分頻因子6 72M/6=12,ADC最大時(shí)間不能超過14M

  14.         //PA1 作為模擬通道輸入引腳                        
  15.         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1|GPIO_Pin_2;
  16.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;                //模擬輸入引腳
  17.         GPIO_Init(GPIOA, &GPIO_InitStructure);        

  18.         ADC_DeInit(ADC1);  //復(fù)位ADC1,將外設(shè) ADC1 的全部寄存器重設(shè)為缺省值

  19.         ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;        //ADC工作模式:ADC1和ADC2工作在獨(dú)立模式
  20.         ADC_InitStructure.ADC_ScanConvMode = DISABLE;        //模數(shù)轉(zhuǎn)換工作在單通道模式
  21.         ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;        //模數(shù)轉(zhuǎn)換工作在單次轉(zhuǎn)換模式
  22.         ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;        //轉(zhuǎn)換由軟件而不是外部觸發(fā)啟動(dòng)
  23.         ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;        //ADC數(shù)據(jù)右對齊
  24.         ADC_InitStructure.ADC_NbrOfChannel = 1;        //順序進(jìn)行規(guī)則轉(zhuǎn)換的ADC通道的數(shù)目
  25.         ADC_Init(ADC1, &ADC_InitStructure);        //根據(jù)ADC_InitStruct中指定的參數(shù)初始化外設(shè)ADCx的寄存器   

  26.   
  27.         ADC_Cmd(ADC1, ENABLE);        //使能指定的ADC1
  28.         
  29.         ADC_ResetCalibration(ADC1);        //使能復(fù)位校準(zhǔn)  
  30.          
  31.         while(ADC_GetResetCalibrationStatus(ADC1));        //等待復(fù)位校準(zhǔn)結(jié)束
  32.         
  33.         ADC_StartCalibration(ADC1);         //開啟AD校準(zhǔn)

  34.         while(ADC_GetCalibrationStatus(ADC1));         //等待校準(zhǔn)結(jié)束

  35. //        ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的軟件轉(zhuǎn)換啟動(dòng)功能

  36. }                                 
  37. //獲得ADC值
  38. //ch:通道值 0~3
  39. u16 Get_Adc(u8 ch)   
  40. {
  41.           //設(shè)置指定ADC的規(guī)則組通道,一個(gè)序列,采樣時(shí)間
  42.         ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_239Cycles5 );        //ADC1,ADC通道,采樣時(shí)間為239.5周期                                      
  43.   
  44.         ADC_SoftwareStartConvCmd(ADC1, ENABLE);                //使能指定的ADC1的軟件轉(zhuǎn)換啟動(dòng)功能        
  45.          
  46.         while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC ));//等待轉(zhuǎn)換結(jié)束

  47.         return ADC_GetConversionValue(ADC1);        //返回最近一次ADC1規(guī)則組的轉(zhuǎn)換結(jié)果
  48. }

  49. u16 Get_Adc_Average(u8 ch,u8 times)
  50. ……………………

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


所有資料51hei提供下載:
12、器件清單(針對本設(shè)計(jì),1對1,直接用).zip (7.67 KB, 下載次數(shù): 489)
源程序(C語言含詳細(xì)備注).7z (927.4 KB, 下載次數(shù): 519)
5、基于STM32F103單片機(jī)智能電表交流電壓電流設(shè)計(jì)PCB.pdf (85.86 KB, 下載次數(shù): 775)


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

使用道具 舉報(bào)

沙發(fā)
ID:150611 發(fā)表于 2019-5-4 19:41 | 只看該作者
好資料,來仔細(xì)研究研究
回復(fù)

使用道具 舉報(bào)

板凳
ID:476217 發(fā)表于 2019-5-6 07:45 | 只看該作者
好資料。很需要。我能檢測到電壓就是不準(zhǔn),不知道怎么校準(zhǔn),是不是還需要一個(gè)校準(zhǔn)電源?研究中。
回復(fù)

使用道具 舉報(bào)

地板
ID:437641 發(fā)表于 2019-5-29 22:14 來自手機(jī) | 只看該作者
你好,可以問你一些問題嗎?
回復(fù)

使用道具 舉報(bào)

5#
ID:375265 發(fā)表于 2019-6-18 08:49 | 只看該作者
好資料,來仔細(xì)研究研究
回復(fù)

使用道具 舉報(bào)

6#
ID:582900 發(fā)表于 2019-7-15 19:50 | 只看該作者
你好, 這個(gè)是怎么測試電壓有效值的呢?
回復(fù)

使用道具 舉報(bào)

7#
ID:265454 發(fā)表于 2019-10-18 15:24 | 只看該作者
很需要呀
回復(fù)

使用道具 舉報(bào)

8#
ID:412814 發(fā)表于 2019-10-21 08:47 | 只看該作者
正需要這個(gè)資料呢,謝謝樓主
回復(fù)

使用道具 舉報(bào)

9#
ID:76408 發(fā)表于 2019-11-16 09:35 | 只看該作者
樓主辛苦,收藏了,,,,。
回復(fù)

使用道具 舉報(bào)

10#
ID:500009 發(fā)表于 2019-11-23 13:16 來自手機(jī) | 只看該作者
正好需要,多謝分享
回復(fù)

使用道具 舉報(bào)

11#
ID:76408 發(fā)表于 2019-11-27 13:58 | 只看該作者
謝謝樓主,我下載了試試看行不行。
回復(fù)

使用道具 舉報(bào)

12#
ID:700642 發(fā)表于 2020-3-1 15:11 | 只看該作者
學(xué)習(xí)一下,不知道直接用esp8266行不行
回復(fù)

使用道具 舉報(bào)

13#
ID:75468 發(fā)表于 2020-3-5 16:37 | 只看該作者
非常好的資料,謝謝樓主的分享。
回復(fù)

使用道具 舉報(bào)

14#
ID:696302 發(fā)表于 2020-3-11 17:39 | 只看該作者
正需要這個(gè)呢 感謝分享
回復(fù)

使用道具 舉報(bào)

15#
ID:729780 發(fā)表于 2020-4-15 15:17 | 只看該作者
謝謝樓主,研究一下
回復(fù)

使用道具 舉報(bào)

16#
ID:730711 發(fā)表于 2020-4-17 16:27 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

17#
ID:730711 發(fā)表于 2020-4-17 16:29 | 只看該作者
謝謝分享!
回復(fù)

使用道具 舉報(bào)

18#
ID:806637 發(fā)表于 2020-7-22 11:02 | 只看該作者
只有3個(gè)資料是嗎
回復(fù)

使用道具 舉報(bào)

19#
ID:295874 發(fā)表于 2020-8-2 09:55 | 只看該作者
這程序大致看了一下,測試交流電壓,能這樣子用嗎?這樣子測試直流電可以,交流電還是需要DFT比較準(zhǔn)確。
回復(fù)

使用道具 舉報(bào)

20#
ID:410617 發(fā)表于 2020-8-16 22:22 | 只看該作者
特別好的的資料,剛好要做這樣的項(xiàng)目
回復(fù)

使用道具 舉報(bào)

21#
ID:792111 發(fā)表于 2020-8-25 13:06 | 只看該作者
電流檢測模塊是什么型號的呢?有沒有原理圖?
回復(fù)

使用道具 舉報(bào)

22#
ID:87000 發(fā)表于 2020-8-26 15:32 | 只看該作者
先下載看看怎么樣。要是一個(gè)壓縮包就好了。
回復(fù)

使用道具 舉報(bào)

23#
ID:108573 發(fā)表于 2020-8-27 08:41 | 只看該作者
有傅立葉變換部分嗎,可以算功率因數(shù)和頻率等電參量不
回復(fù)

使用道具 舉報(bào)

24#
ID:214628 發(fā)表于 2020-9-17 10:13 | 只看該作者
這個(gè)兄弟,資料好像不全啊。原理圖沒有,資料簡介使用說明之類的也沒有,能全部提供一下嗎。
回復(fù)

使用道具 舉報(bào)

25#
ID:69829 發(fā)表于 2020-11-23 21:58 | 只看該作者
好資料,最近在做三相電的電流電壓檢測,應(yīng)該可以參考參考
回復(fù)

使用道具 舉報(bào)

26#
ID:229137 發(fā)表于 2021-3-11 16:33 | 只看該作者
看看,正好用到
回復(fù)

使用道具 舉報(bào)

27#
ID:597820 發(fā)表于 2021-3-12 08:36 | 只看該作者
電壓檢測,應(yīng)該可以參考
回復(fù)

使用道具 舉報(bào)

28#
ID:767852 發(fā)表于 2021-3-15 18:26 | 只看該作者
沒用啊,上面的采集模塊綠色板子買不到,也不知道型號,手機(jī)端的APP也沒有,怎么可能照著做出來
回復(fù)

使用道具 舉報(bào)

29#
ID:1014660 發(fā)表于 2022-3-31 23:09 | 只看該作者
想要組裝圖
回復(fù)

使用道具 舉報(bào)

30#
ID:818203 發(fā)表于 2022-4-28 18:48 來自手機(jī) | 只看該作者
變壓器的名字
回復(fù)

使用道具 舉報(bào)

31#
ID:1054620 發(fā)表于 2022-11-29 13:54 | 只看該作者
好資料,借鑒研究一下
回復(fù)

使用道具 舉報(bào)

32#
ID:236020 發(fā)表于 2023-10-20 18:51 | 只看該作者
有一個(gè)項(xiàng)目要測交流電壓,這個(gè)下載了學(xué)習(xí)一下. 謝謝分享
回復(fù)

使用道具 舉報(bào)

33#
ID:598178 發(fā)表于 2023-10-30 16:17 | 只看該作者
好資料,MARK一下
回復(fù)

使用道具 舉報(bào)

34#
ID:1110374 發(fā)表于 2024-1-29 23:44 | 只看該作者
請問精度怎么樣
回復(fù)

使用道具 舉報(bào)

35#
ID:1110374 發(fā)表于 2024-1-31 17:41 | 只看該作者
這PCB文件也太水了吧,就一個(gè)背板圖,啥電路都沒有
回復(fù)

使用道具 舉報(bào)

36#
ID:1111205 發(fā)表于 2024-3-6 20:54 | 只看該作者
有人知道這個(gè)交流電壓電流檢測模塊電路(TA1005、TV005)電路是怎么設(shè)計(jì)的?
回復(fù)

使用道具 舉報(bào)

37#
ID:1111686 發(fā)表于 2024-5-8 17:28 | 只看該作者
為什么我互感器輸出的是負(fù)壓
回復(fù)

使用道具 舉報(bào)

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

本版積分規(guī)則

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

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

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