wenyangzeng 发表于 2016-8-30 20:03:37

【我为STM32站台】基于STM32F103VB的功率因数表

本帖最后由 wenyangzeng 于 2017-4-26 20:16 编辑

方案功能:    功率因数是衡量电气设备效率高低的一个重要参数。在交流电路中,电压与电流之间的相位差(Φ)的余弦叫做功率因数,用符号cosΦ表示,在数值上,功率因数是有功功率和视在功率的比值,即cosΦ=P/S。本方案使用STM32F10X-128K-EVAL开发板实现了功率因数表的功能。关键词:功率因数,STM32F103。工作原理介绍    通过电压互感器和电流互感器从供电系统采样电压和电流信号,经过比较器转换成方波,连接STM32F103VB的一个定时器捕捉输入和一个外部中断输入。在定时器捕捉输入的第一个触发中断时读取TIM3的初值,并清零TIM2的计数器值,在第二个触发中断时获得交流电的周期值TIM3。外部中断获得TIM2电流与电压的相位差(Φ)。通过运算得到功率因数值在LCD屏幕上显示。    利用STM32F系列丰富的资源实施本方案很简单。STM32F103VB有多达8个定时器,可以根据实际应用灵活选择其中2个定时器来完成数据采样任务。STM32F10X-128K-EVAL已经配备TFT-LCD模块,软件稍加修改即可用于显示运行结果。软件运行过程:1、初始化后启动TIM2、TIM3。2、TIM3-CC2捕捉使能,进入第一次中断清零TIM2-CNT并保存当前CNT3值开启EXTI中断;第二次中断保存另一次CNT3值。获得一个交流电电压周期值。3、EXTI中断读取CNT2值,获得交流电电流与电压的相位差。4、主函数负责LCD刷新和 cosΦ运算。
                              流程图

                      STM32F10X-128K-EVAL开发板视频:http://player.youku.com/player.php/sid/XMTcwNjE3OTIyNA==/v.swf
void TIM3_IRQHandler(void)
{
      if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)
{
    TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

                if(Capture3Number == 0)
                        {
      IC3ReadValue1 = TIM_GetCapture2(TIM3);
      Capture3Number = 1;
                        TIM2->CNT=0x0000;      
                        EXTI->IMR |=0X0002;      
                        }
    else if(Capture3Number == 1)
                        {
                              IC3ReadValue2 = TIM_GetCapture2(TIM3);
                              if (IC3ReadValue2 > IC3ReadValue1)
                                                Cycle = (IC3ReadValue2 - IC3ReadValue1);
                              else
                                                Cycle = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
                              
                              
                              
                              TIM_ITConfig(TIM3, TIM_IT_CC2, DISABLE);
                              Number_Swap();
                              Capture3Number = 0;
                        }
      }

}


void EXTI1_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line1) != RESET)
{      EXTI_ClearITPendingBit(EXTI_Line1);
      EXTI->IMR &=~0X0002;
      Capture= TIM2->CNT;
}
}

void Number_Swap(void)
{      uint8_t DispBuf;
      static double temp=0;
                a=(double)Cycle/360.0;
                b=(double)Capture/a;
                      if(b >=180) b -=181;
                        if(b<=90.0)                              
                                 DispBuf=' ';
                           else
                              DispBuf='-';
      a      =      (float)cos((b*3.1415)/180.0)*100.0;
      if(a<0)
                {      
                a      = a-0.499;
                a=(float)a*(-1);
                }
                else
                {
                        a      = a+0.499;
                }
                temp=temp+a;
                i++;
                if(i==10)
                {

                data =temp*10;
                        temp=0;
                        i=0;
      DispBuf=' ';
      DispBuf=data%100000/10000+0x30;;
      DispBuf='.';
      DispBuf=data%10000/1000+0x30;
      DispBuf=data%1000/100+0x30;      
      refcolumn = 219;
      LCD_DisplayStringLine(Line5,DispBuf);
                }
      TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
}

int main(void)
{
      SystemInit();      
      RCC_Configuration();
      SysTick_Init();      
      BSP_init();
      refcolumn = 249;
      LCD_DisplayStringLine(Line3,"Power factor:");http://player.youku.com/player.php/sid/XMTcwNjE3OTIyNA==/v.swf
      LCD_DrawRect(20,300,200,280);
      
while (1)
{

      }
}





http://player.youku.com/player.php/sid/XMTcwNjE3OTIyNA==/v.swf

zero99 发表于 2016-8-31 09:12:53

前排占位:lol

beebird 发表于 2016-8-31 10:16:07

板凳搞起

Longmiao 发表于 2016-9-6 11:08:28

:):)

yuanwj32 发表于 2016-9-15 15:37:16

不错。如果有视频演示就更好了

wenyangzeng 发表于 2016-9-16 10:36:08

yuanwj32 发表于 2016-9-15 15:37
不错。如果有视频演示就更好了

有视频演示呀,在代码前,这个网页不知怎么的,视频一直链接不成功。
https://v.youku.com/v_show/id_XMTcwNjE3OTIyNA==.html?from=s1.8-1-1.2&spm=0.0.0.0.ZnlroP

lili0000 发表于 2017-1-4 13:36:39

谢谢分享

liu_guangjun 发表于 2017-7-17 09:08:11

谢谢分享!!

阳道爷 发表于 2017-11-3 17:18:00

多谢分享

epochal 发表于 2017-11-3 22:05:07

谢谢分享!
页: [1]
查看完整版本: 【我为STM32站台】基于STM32F103VB的功率因数表