你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 2947|回复: 9

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

[复制链接]

68

主题

3266

回帖

82

蝴蝶豆

社区小助手

最后登录
2020-12-9
发表于 2016-8-30 20:03:37 | 显示全部楼层 |阅读模式
本帖最后由 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Φ运算。

流程图.jpg
                              流程图

开发板.JPG

                      STM32F10X-128K-EVAL开发板
视频:

  1. void TIM3_IRQHandler(void)
  2. {
  3.         if(TIM_GetITStatus(TIM3, TIM_IT_CC2) == SET)
  4.   {
  5.     TIM_ClearITPendingBit(TIM3, TIM_IT_CC2);

  6.                 if(Capture3Number == 0)
  7.                         {
  8.       IC3ReadValue1 = TIM_GetCapture2(TIM3);
  9.       Capture3Number = 1;
  10.                         TIM2->CNT=0x0000;        
  11.                         EXTI->IMR |=0X0002;        
  12.                         }
  13.     else if(Capture3Number == 1)
  14.                         {
  15.                                 IC3ReadValue2 = TIM_GetCapture2(TIM3);
  16.                                 if (IC3ReadValue2 > IC3ReadValue1)
  17.                                                 Cycle = (IC3ReadValue2 - IC3ReadValue1);
  18.                                 else
  19.                                                 Cycle = ((0xFFFF - IC3ReadValue1) + IC3ReadValue2);
  20.                                 
  21.                                 
  22.                                 
  23.                                 TIM_ITConfig(TIM3, TIM_IT_CC2, DISABLE);
  24.                                 Number_Swap();
  25.                                 Capture3Number = 0;
  26.                         }
  27.         }

  28. }


  29. void EXTI1_IRQHandler(void)
  30. {
  31. if(EXTI_GetITStatus(EXTI_Line1) != RESET)
  32. {        EXTI_ClearITPendingBit(EXTI_Line1);
  33.         EXTI->IMR &=~0X0002;
  34.         Capture= TIM2->CNT;
  35. }
  36. }

  37. void Number_Swap(void)
  38. {        uint8_t DispBuf[6];
  39.         static double temp=0;
  40.                 a=(double)Cycle/360.0;
  41.                 b=(double)Capture/a;
  42.                       if(b >=180) b -=181;
  43.                         if(b<=90.0)                                
  44.                                  DispBuf[0]=' ';
  45.                            else
  46.                                 DispBuf[1]='-';
  47.         a        =        (float)cos((b*3.1415)/180.0)*100.0;
  48.         if(a<0)
  49.                 {        
  50.                 a        = a-0.499;
  51.                 a=(float)a*(-1);
  52.                 }
  53.                 else
  54.                 {
  55.                         a        = a+0.499;
  56.                 }
  57.                 temp=temp+a;
  58.                 i++;
  59.                 if(i==10)
  60.                 {

  61.                 data =temp*10;
  62.                         temp=0;
  63.                         i=0;
  64.         DispBuf[0]=' ';
  65.         DispBuf[2]=data%100000/10000+0x30;;
  66.         DispBuf[3]='.';
  67.         DispBuf[4]=data%10000/1000+0x30;
  68.         DispBuf[5]=data%1000/100+0x30;        
  69.         refcolumn = 219;
  70.         LCD_DisplayStringLine(Line5,DispBuf);
  71.                 }
  72.         TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);
  73. }

  74. int main(void)
  75. {
  76.         SystemInit();        
  77.         RCC_Configuration();
  78.         SysTick_Init();        
  79.         BSP_init();
  80.         refcolumn = 249;
  81.         LCD_DisplayStringLine(Line3,"Power factor:");[media=swf,500,375]http://player.youku.com/player.php/sid/XMTcwNjE3OTIyNA==/v.swf[/media]
  82.         LCD_DrawRect(20,300,200,280);
  83.       
  84.   while (1)
  85.   {

  86.         }
  87. }
复制代码





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

评分

参与人数 1ST金币 +50 收起 理由
zero99 + 50 很给力!

查看全部评分

<
回复

使用道具 举报

1182

主题

3785

回帖

1

蝴蝶豆

论坛元老

最后登录
2020-3-17
发表于 2016-8-31 09:12:53 | 显示全部楼层
前排占位
回复 支持 反对

使用道具 举报

7

主题

196

回帖

0

蝴蝶豆

高级会员

最后登录
2019-9-16
发表于 2016-8-31 10:16:07 | 显示全部楼层
板凳搞起
回复 支持 反对

使用道具 举报

9

主题

18

回帖

0

蝴蝶豆

初级会员

最后登录
2020-2-26
发表于 2016-9-6 11:08:28 | 显示全部楼层
回复 支持 反对

使用道具 举报

3

主题

46

回帖

0

蝴蝶豆

初级会员

最后登录
1970-1-1
发表于 2016-9-15 15:37:16 | 显示全部楼层
不错。如果有视频演示就更好了
回复 支持 反对

使用道具 举报

68

主题

3266

回帖

82

蝴蝶豆

社区小助手

最后登录
2020-12-9
 楼主| 发表于 2016-9-16 10:36:08 | 显示全部楼层
yuanwj32 发表于 2016-9-15 15:37
不错。如果有视频演示就更好了

有视频演示呀,在代码前,这个网页不知怎么的,视频一直链接不成功。
https://v.youku.com/v_show/id_XM ... ;spm=0.0.0.0.ZnlroP
回复 支持 反对

使用道具 举报

4

主题

47

回帖

0

蝴蝶豆

中级会员

最后登录
2019-3-25
发表于 2017-1-4 13:36:39 | 显示全部楼层
谢谢分享
回复 支持 反对

使用道具 举报

0

主题

287

回帖

0

蝴蝶豆

金牌会员

最后登录
2018-10-26
发表于 2017-7-17 09:08:11 | 显示全部楼层
谢谢分享!!
回复 支持 反对

使用道具 举报

0

主题

3

回帖

0

蝴蝶豆

新手上路

最后登录
2017-11-3
发表于 2017-11-3 17:18:00 | 显示全部楼层
多谢分享
回复 支持 反对

使用道具 举报

0

主题

2175

回帖

3

蝴蝶豆

论坛元老

最后登录
2020-12-9
发表于 2017-11-3 22:05:07 | 显示全部楼层
谢谢分享!
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版