设计时间:
#2021年上半年
谨以此文纪念2021年
主控芯片:
STM32F030R8T6
功能介绍:
实现对待测交流用电器两端实时电压、消耗电流、频率、功率等基本参量的测量,通过OLED将这些数据显示。支持过压过流检测,可通过按键设置检测阈值,范围分别是:0~50A(最大),0~380V(最大),当检测到过压或者过流时将用电器断电,蜂鸣器报警提升,直到检测值在设定范围内自动供电。电路中有一个程序运行状态指示灯,程序正常运行时指示灯每隔500毫秒亮灭变化。
相关程序:
主程序
#include "main.h"
int main()
{
System_All_Init();
while(1)
{
if(Time100ms==3)//3*100ms发送读取数据命令
{
Read_En=1;//将读取模块数据标志位置1,准备向模块发送读取数据命令
Read_Data();
}
if(Time100ms==4)//4*100ms
{
Time100ms=0;
Analysis_Data();//准备将串口接收的数据解析显示
}
Warning_Dis();//显示报警电流阈值
}
}
按键处理程序
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update))//判断是否发生定时中断
{
if(GPIO_ReadInputDataBit(KEY_Port,K_Minus)==1)//报警电流阈值减按键
{
if(Stay++==8&&GPIO_ReadInputDataBit(KEY_Port,K_Minus)==1)//报警电流阈值减按键
{
Stay=0;
if(Warning_Val==0)
Warning_Val=100;//注意下一行会被减一,故数值为零时重新赋值100
Warning_Val=(Warning_Val-1);
}
}
if(GPIO_ReadInputDataBit(KEY_Port,K_Add)==1)//报警电流阈值加按键
{
if(Stay++==8&&GPIO_ReadInputDataBit(KEY_Port,K_Add)==1)//报警电流阈值加按键
{
Stay=0;
if(Warning_Val==99)
Warning_Val=0;//注意下一行会被减一,故数值为零时重新赋值100
Warning_Val=(Warning_Val+1);
}
}
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update);//清除中断标志位
}
程序灯及蜂鸣器程序
void TIM14_IRQHandler(void)
{
if(TIM_GetITStatus(TIM14,TIM_IT_Update))//判断是否发生定时中断
{
Time100ms++;
if(++Flag100ms==5)//如果100ms标志位值为5表明定时500ms到,此时将程序灯状态翻转
{
Flag100ms=0;
System_LED=!System_LED;//每500ms程序灯状态翻转
}
if(High_Curr==1)
Beep=!Beep;
}
TIM_ClearITPendingBit(TIM14,TIM_IT_Update);//清除中断标志位
}
成品照片:
功能演示
功率计成品演示202105
欢迎一起交流学习
转载请注明出处!