#include "led.h"
#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "lcd.h"
#include "adc.h"
#include <stdio.h>
#include "timer.h"
//ALIENTEK Mini STM32开发板范例代码15
//ADC实验
//技术支持:www.openedv.com
//广州市星翼电子科技有限公司
//char tabDataV[5];//打印电压数组
//char tabDataA[7];//打印电流数组
//char tabDataP[9];//打印功率数组
//char tabDataQ[12];//打印电量数组
//char tabDataT[6];//打印时间数组
char tabData[42];//打印时间数组
unsigned int ACcurrent; //市电电流
unsigned int ACvolt; //市电电压
unsigned long PowerWt=0;//功率
float PowerQd=0;//功率
unsigned char relayFlag=1;
int main(void)
{
u16 adcx;
float temp;
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为115200
TIM3_Int_Init(499,7199);//50ms
LED_Init(); //初始化与LED连接的硬件接口
LED0=0;
Adc_Init(); //ADC初始化
RELAY=1; //继电器打开
relayFlag=1; //继电器状态标识
delay_ms(4000);
printf("AT+CIPMUX=1\r\n"); //允许链接
delay_ms(1000);
printf("AT+CIPSERVER=1,8080\r\n"); //创建端口号8080
delay_ms(1000);
while(1)
{
adcx=Get_Adc_Average(ADC_Channel_1,10);// PA1 交流电压检测口 ad转换10次求平均值
temp=(float)adcx*(3.3/4096);
ACvolt=(unsigned int)(temp*303);//*303 互感器计算获取 以及1K电阻 用示波器检测校准得到
if(ACvolt<15) ACvolt=0;
adcx=Get_Adc_Average(ADC_Channel_2,10); // PA2 求平均值
temp=(float)adcx*(3.3/4096);
if(temp>0.02)
{
ACcurrent=(unsigned int)((temp-0.02)*3100);//*3950 互感器计算获取扩大1000倍 以及1K电阻 用示波器检测校准得到 0.02去除波动 防止误判断
}
else
{
ACcurrent=0;
}
if(ACcurrent<50)ACcurrent=0;//滤除电流
PowerWt=ACvolt*ACcurrent; //功率
if(dealFlag==1)//处理标志
{
dealFlag=0;
PowerQd=(float)PowerWt*1/60.0/60.0+PowerQd; //累计电量 1表示1s 因为电流扩大了1000倍 因此该处也扩大了1000倍 且此处功率单位为W 除以1000为千瓦 结果为度 1度=1千瓦时
}
if(times>=9999)
{times=0;}
if(PowerWt/1000>200)
{
RELAY=0; //关闭继电器
relayFlag=0;
}
sprintf(tabData,"V:%03dA:%05dP:%07luQ:%010.2fT:%04dR:1",ACvolt,ACcurrent,PowerWt,PowerQd,times);
// sprintf(tabDataA,"A:%05d",ACcurrent);//电流
// sprintf(tabDataP,"P:%07lu",PowerWt);//功率
// sprintf(tabDataQ,"Q:%010.2f",PowerQd);//电量
// sprintf(tabDataT,"T:%04d",times);//时间
if(relayFlag==1)
{sprintf(tabData,"V:%03dA:%05dP:%07luQ:%010.2fT:%04dR:1",ACvolt,ACcurrent,PowerWt,PowerQd,times); }//打印数据
else
{sprintf(tabData,"V:%03dA:%05dP:%07luQ:%010.2fT:%04dR:0",ACvolt,ACcurrent,PowerWt,PowerQd,times); }//打印数据
printf("AT+CIPSEND=0,42\r\n"); //发送固定字节数据的at命令
delay_ms(200);
printf(tabData); //发送数据
delay_ms(200);
LED0=!LED0; //数据发送
delay_ms(200); //延时
}
}
|