标题: 基于STM32的交流电流测量系统(程序+电路资料全) [打印本页]

作者: 1765679392    时间: 2019-6-3 19:50
标题: 基于STM32的交流电流测量系统(程序+电路资料全)
    本设计的整体结构大致有主控模块、电流信号采样模块、电源模块和串口输出模块组成,
   
本文中主控芯片采用型号为STM32F103RC的微控制器,在保证电流采样精度的前提下,使得结构尽可能的简洁,避免了复杂多变的电路布局,更加方便PCB板的制作,并且成本较为低廉。其中,在采样调理电路的设计中,采用电流互感器进行电流信号的采样。

电路原理图如下:


单片机源程序如下:
  1. #include  "Init.h"
  2. #include  "stdio.h"
  3. unsigned char flag=0;
  4. unsigned int  x;
  5. unsigned int  t;
  6. unsigned int m;
  7. void uart1_putc(unsigned char c)
  8. {
  9.   while(!(UART1_SR&(1<<6))&&(!(UART1_SR&(1<<7))));//判断状态的6.7位
  10.         //while(((UART1_SR>>6)&3)!=3);
  11.         UART1_DR=c;          // 数据传给数据寄存器,发送
  12. }

  13. int fputc(int ch,FILE *f)
  14. {
  15.         uart1_putc(ch);
  16.         return(ch);
  17. }
  18. void EXTI4_IRQHandler(void)
  19. {  
  20.            if(!( GPIOE_IDR&1<<4))
  21.                  {
  22.             delay_ms(5000);
  23.                         if(GPIOE_IDR&(1<<4))
  24.                                 if(EXTI_PR&(1<<4))
  25.                                 {
  26.                                         flag++;
  27.                                         if(flag==2)
  28.                                         flag=0;
  29.                                         EXTI_PR=1<<4;
  30.                                 }
  31.                  }                             
  32. }
  33. void TIM2_IRQHandler()     //TIM2中断处理函数
  34. {
  35.         if(TIM2_SR &1)//溢出中断
  36.         {
  37.                 flag=~flag;//把数据传给flag,flag接收.
  38.         }       
  39.           TIM2_SR &=0;//清除中断标志位   
  40. }
  41. void ADC1_2_IRQHandler ()     //中断处理函数
  42. {
  43.         //while(!(ADC1_SR&1<<1));lag
  44.         //flag=1;
  45.         //printf("中断开启  %d\r\n",flag);
  46.         x=ADC1_DR;
  47. }

  48.   int main(void)  
  49. {          float adcx;
  50.           float temp;
  51.           RCC_APB2ENR|=0x48;
  52.           GPIOB_CRL|=0X200000;
  53.                 GPIOE_CRL|=0X200000;  //灯的使能
  54.           RCC_APB2ENR|=0X8;             
  55.           GPIOB_CRH=3<<0;                         //蜂鸣器的使能
  56.     Stm32_Clock_Init(9);       //时钟初始化函数
  57.           Stm32_UART1_Int_Init();    //串口中断初始化函数
  58.           Stm32_Uart1_Init();                //串口初始化函数
  59.           Stm32_TIMER2_Int_Init();    //中断NVIC配置函数
  60.           Stm32_TIMER2_Init();       //定时器初始化函数
  61.           Stm32_Adc_Init();           //ADC初始化函数
  62.     Stm32_ADC1_Int_Init();      //ADC中断初始化函数
  63.           Stm32_Int_Init();           //按键初始化函数
  64.     printf("准备就绪!!!\r\n");        //Printf打印
  65.    while(1)
  66.     {
  67.                         // delay_ms(20000);
  68.                          ADC1_CR2|=1<<0;
  69.                          switch(flag)
  70.                          {
  71.                                    case 0:                              //绿灯亮
  72.                                          GPIOB_CRL&=(~(0x200000));        //按下按键KEY0直接到下一个模式
  73.                  GPIOE_CRL|=0X200000;
  74.                        GPIOE_ODR|=0x0000020;
  75.                        GPIOE_ODR&=(~(0x20));
  76.                                    printf("绿灯亮可以开始检测,请调到检测模式。\r\n");
  77.                              break;
  78.                                    case 1:
  79.                                       temp=x*(3.3/4096);
  80.                                             adcx=1.515*temp+0.7728;
  81.                                                   printf("输出采集电压值:  %.5f V\r\n",temp);
  82.                                             printf("输出采集电流值: %.5f A\r\n",adcx);
  83.                                     if(temp<=3)
  84.                                                 {
  85.               GPIOB_CRL|=0x200000;             //按下按键KEY0直接到下一个模式
  86.                     GPIOE_CRL|=0X200000;
  87.                           GPIOB_ODR|=0x20;
  88.                           delay_ms(5000);
  89.                           GPIOE_ODR&=(~(0x20));
  90.                           delay_ms(5000);
  91.                           GPIOB_ODR&=(~(0x20));
  92.                           delay_ms(5000);
  93.                           GPIOE_ODR|=0x20;
  94.                           delay_ms(5000);
  95.                                             printf("红绿灯亮 \r\n");
  96.                                                 }
  97.                        else
  98.                                          {
  99.                                           LED1|=0;LED2|=1;BEEP=0;
  100.                                                 printf("!!!请注意电压值,超过3.3V会烧坏你的开发板!!!\r\n");
  101.                                          }
  102.           break;                                                   
  103.                          }
  104.    }                                 
  105. }
复制代码

所有资料51hei提供下载:
交流电流测量系统.7z (54.93 KB, 下载次数: 624)




作者: 1765679392    时间: 2019-6-3 20:17
实物电路图

18.png (423.79 KB, 下载次数: 175)

18.png

17.jpg (281.39 KB, 下载次数: 171)

17.jpg

作者: 51hei团团    时间: 2019-6-7 04:52
好资料,51黑有你更精彩!!!
作者: wangminwr    时间: 2019-6-11 08:39
不知效果如何,学些一下
作者: 账号EV    时间: 2019-6-27 18:36
能不能讲解一下外围电路,电流互感器只是转化电流大小,最后进入到stm32f103芯片进行AD转化时输入的是电压,那怎么办计算电流电压值,求助帮助
作者: PPXX    时间: 2019-9-8 21:38
这个运放电路好像有问题,这是什么电路,峰值?平均值?貌似都不对啊
作者: johnson96    时间: 2019-9-9 10:16
感谢分享,学习学习。。。。。
作者: cnc2020    时间: 2019-12-26 23:17
good topic,
作者: jifengjianwu    时间: 2020-1-19 21:01
谢谢楼主,学习了。
作者: shu_007    时间: 2020-2-23 01:36
是取平均值?????????
作者: aaaaaa。    时间: 2020-7-31 11:03
adcx=1.515*temp+0.7728;
请问这句是什么意思?算出来的
作者: 黄10    时间: 2020-8-3 11:32
你好,想质询一下你的电流采集系统的问题
作者: xinzhaoddadi    时间: 2020-8-7 13:57
good study         
作者: zhczlzhang    时间: 2020-9-17 10:25
adcx=1.515*temp+0.7728;
请问这句是什么意思?为什么乘以1.515,还要加上0.7728
作者: jsrdsdb    时间: 2020-11-20 06:27
有学习板买吗?

作者: youlian84    时间: 2021-4-28 16:57
外围硬件的前级放大器部分是将电流传感器的微弱电流信号变换为电压信号,差分输入到前级放大器中,输出单端信号,然后经后级放大器放大后进行AD转换吗?
作者: xukele    时间: 2021-9-7 13:44
CH340G的收发接反了
作者: yayayunyun    时间: 2021-11-29 15:49
STM32F103RC的微控制器没有PE引脚,代码和原理图不一致。需要修改
作者: fengzi2021    时间: 2022-9-5 22:36
是可以测量有效值不
作者: adee4210    时间: 2023-10-30 16:15
效果怎么样?有人验证过吗?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1