找回密码
 立即注册
楼主: qepuemc

用8H8K64U,精确采样OP 07C放大后,没有问题,请教,互感器放大后,为什么不行?

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-08-24 13:25:05

48

主题

370

回帖

686

积分

高级会员

积分
686
发表于 2025-5-31 14:06:48 | 显示全部楼层
梁*** 发表于 2025-5-31 12:01
你说的“互感器厂家让在互感器后面并100欧姆电阻。不是82或更低。”
可能你对互感器不是很了解。

精度叫高的仪表,基本没有用整流桥的。   基本只看懂这一行。

现在我只能通过对比法标定。下面是数据
DC(V)        AC220(A)        比值关系(约)
0.463         6                  12.96
0.036        0.41                11.39
0.06                0.7                11.67
0.076        0.87                11.44
0.146        1.78                12.19
整流桥出   标定电流    比值(基本在11.40-12.19)之前
下面就是加入AD中粗劣计算。
现在我看到的难点就是要标定。标定是最复杂的
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:522
  • 最近打卡:2025-08-24 00:56:18
已绑定手机

40

主题

2410

回帖

3256

积分

荣誉版主

积分
3256
发表于 2025-5-31 20:16:15 | 显示全部楼层
互感器电路不能用整流桥的,本身就是小信号,连桥都过不去,需要直接采集交流信号,或者使用RMS-DC电路转为单片机可以采集的直流信号。
睁开眼睛做场梦~~~
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-08-24 13:25:05

48

主题

370

回帖

686

积分

高级会员

积分
686
发表于 2025-6-1 07:57:01 | 显示全部楼层
晓*** 发表于 2025-5-31 20:16
互感器电路不能用整流桥的,本身就是小信号,连桥都过不去,需要直接采集交流信号,或者使用RMS-DC电路转 ...

互感器厂家让这么搞的。现在问题就是桥过去了。运放这边不成线性。标定困难。
LTC1966太贵了。

点评

还是建议参考我给的例子吧,直接采样,计算RMS。  详情 回复 发表于 2025-6-1 11:16
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 2025-6-1 11:16:48 | 显示全部楼层
qepu*** 发表于 2025-6-1 07:57
互感器厂家让这么搞的。现在问题就是桥过去了。运放这边不成线性。标定困难。
LTC1966太贵了。
...

还是建议参考我给的例子吧,直接采样,计算RMS。
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-08-24 13:25:05

48

主题

370

回帖

686

积分

高级会员

积分
686
发表于 2025-6-24 10:32:20 | 显示全部楼层
qepu*** 发表于 2025-5-31 08:22
贴子看到了。文章中有些是ADC采样的讨论。基本上这些已经掌握。
还有采集电流电压的还有交流和直流。为测 ...

目前测试了 12-开天斧3.1-P1.6交直流兼容采样计算有效值-串口1(P3.1)返回虚拟数码管显示  的这个例子。

用的是我自己画的板。程序我以为成了ADC3  0电流的时候显示的是0.19  通5A电流显示的是20.00以上。互感 器是5A/5MA 的。

PCB_6定时开关闹铃新20250610_2025-06-16.json (468.6 KB, 下载次数: 13) 这个是电路立创标准版代码

现在可以看出电路是可以的。
只是程序看不出怎么标定和移槙。

111.png
还有我通常是这么标定ADC的

//0.036  575                0.41A
if (adc_average>=539000 && adc_average<636000)    //更新到这里了0
{
wendu=(adc_average-539000)/236.59;
}
//0.06         599                0.70A
else if(adc_average>=636000 && adc_average<703000)
{
wendu=600+(adc_average-636000)/231;
}
//0.076  615    0.87A
else if(adc_average>=703000 && adc_average<742500)
{
wendu=700+(adc_average-703000)/232.35;
}

//0.146         685                1.78A
else if(adc_average>=742500 && adc_average<924500)
{
wendu=870+(adc_average-742500)/202.22;
}
//0.463         1002                6.00A        
else if(adc_average>=924500 && adc_average<1620000)
{
wendu=1780+(adc_average-924500)/115.9;
}



下面的显示数码管的方法:

                        //(STC直接驱动数码管模块)
        if(B_1ms)   //1ms到
        {
            B_1ms = 0;
                                                if(++msecond >= 2 )   //1秒到
            {
                msecond = 0;
              //  displayled();
                                                        //显示数码管更新内容

LED8[0]=xsbl % 10;        
LED8[1]=xsbl % 100/10;
LED8[2]=xsbl % 1000/100;
LED8[3]=xsbl % 10000/1000;
        
LED8[3]=LED8[3]+0x20;//显示小数点1位



            }

                                       
                                                
                                                
                                                
        }
                        //(STC直接驱动数码管模块)

这里的   if(B_1ms)   //1ms到  这个在主程序的WHILE中 我不理解为什么可做到不需要等待主程序中的其它执行时间可以总是执行! (我通常认为WHILE需要快速执行或主WHILE中的其它程序要在1MS内执行完,最少不可以等100ms   不然数码管没法正常显示。)可实际没有问题。


下面的我没做好的程序
led8hstc8h8k64互感器测电流.rar (510.13 KB, 下载次数: 15)


下面这个是上面的反例也是我觉得正常的过程

//初始化

        while (1)
        { delay_ms(250);delay_ms(250);delay_ms(250);delay_ms(250);
                if(B_ADC_OK)        //标志已计算完成一次平方和 累加和
                {
                        B_ADC_OK = 0;
                                UART1_PrintString(".");                //7段数码管命令头
                        avr_tmp[res_cnt] = adc_sum/8;        //FIFO, 8个, 平均值用于计算0点
                        rms_tmp[res_cnt] = RMS_Sum/8;        //FIFO, 8个
                        res_cnt++;
                        res_cnt &= 7;
//清零功能去掉

这里用了四个延时250MS 可以把程序输出调慢。并不会因为B_ADC_OK 的结果1秒可以算3次左右而多次显示

[14:44:02.860]接收←.7SEGS...00.01.
[14:44:04.105]接收←.
[14:44:05.351]接收←.
[14:44:06.595]接收←.
[14:44:07.840]接收←.
[14:44:09.086]接收←.
[14:44:10.331]接收←.
[14:44:11.576]接收←.
[14:44:12.821]接收←.7SEGS...00.01.
[14:44:14.067]接收←.

这觉得这样的执行效果才是对的。


回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-08-24 13:25:05

48

主题

370

回帖

686

积分

高级会员

积分
686
发表于 2025-6-24 11:44:43 | 显示全部楼层
梁*** 发表于 2025-6-1 11:16
还是建议参考我给的例子吧,直接采样,计算RMS。

qepuemc 发表于 2025-5-31 08:22
贴子看到了。文章中有些是ADC采样的讨论。基本上这些已经掌握。
还有采集电流电压的还有交流和直流。为测 ...

目前测试了 12-开天斧3.1-P1.6交直流兼容采样计算有效值-串口1(P3.1)返回虚拟数码管显示  的这个例子。

用的是我自己画的板。程序我以为成了ADC3  0电流的时候显示的是0.19  通5A电流显示的是20.00以上。互感 器是5A/5MA 的。

这个是电路立创标准版代码

现在可以看出电路是可以的。
只是程序看不出怎么标定和移槙。


还有我通常是这么标定ADC的

//0.036  575                0.41A
if (adc_average>=539000 && adc_average<636000)    //更新到这里了0
{
wendu=(adc_average-539000)/236.59;
}
//0.06         599                0.70A
else if(adc_average>=636000 && adc_average<703000)
{
wendu=600+(adc_average-636000)/231;
}
//0.076  615    0.87A
else if(adc_average>=703000 && adc_average<742500)
{
wendu=700+(adc_average-703000)/232.35;
}

//0.146         685                1.78A
else if(adc_average>=742500 && adc_average<924500)
{
wendu=870+(adc_average-742500)/202.22;
}
//0.463         1002                6.00A        
else if(adc_average>=924500 && adc_average<1620000)
{
wendu=1780+(adc_average-924500)/115.9;
}



下面的显示数码管的方法:

                        //(STC直接驱动数码管模块)
        if(B_1ms)   //1ms到
        {
            B_1ms = 0;
                                                if(++msecond >= 2 )   //1秒到
            {
                msecond = 0;
              //  displayled();
                                                        //显示数码管更新内容

LED8[0]=xsbl % 10;        
LED8[1]=xsbl % 100/10;
LED8[2]=xsbl % 1000/100;
LED8[3]=xsbl % 10000/1000;
        
LED8[3]=LED8[3]+0x20;//显示小数点1位



            }

                                       
                                                
                                                
                                                
        }
                        //(STC直接驱动数码管模块)

这里的   if(B_1ms)   //1ms到  这个在主程序的WHILE中 我不理解为什么可做到不需要等待主程序中的其它执行时间可以总是执行! (我通常认为WHILE需要快速执行或主WHILE中的其它程序要在1MS内执行完,最少不可以等100ms   不然数码管没法正常显示。)可实际没有问题。


下面的我没做好的程序

点评

贴个电路图片出来看看  详情 回复 发表于 2025-6-24 15:27
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 2025-6-24 15:27:29 | 显示全部楼层
qepu*** 发表于 2025-6-24 11:44
qepuemc 发表于 2025-5-31 08:22
贴子看到了。文章中有些是ADC采样的讨论。基本上这些已经掌握。
还有采 ...

贴个电路图片出来看看。
主程序中
if(B_1ms)   //1ms到
{
      B_1ms = 0;

     //其余程序
}
这是1ms时隙,只要执行总时间不超过1ms就可以。
数码管扫描显示是在定时器中断里处理的,跟主程序没关系。这些都是最基础的程序逻辑,如果还搞不明白,就多想一想吧。

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-08-24 13:25:05

48

主题

370

回帖

686

积分

高级会员

积分
686
发表于 2025-6-24 15:46:59 来自手机 | 显示全部楼层
梁工 发表于 2025-6-24 15:27
贴个电路图片出来看看

103244bm6kkkpbmztkizz0.png

点评

我要看原理图  详情 回复 发表于 2025-6-24 15:50
回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:158
  • 最近打卡:2025-08-23 11:06:14

76

主题

6636

回帖

1万

积分

超级版主

积分
13863
发表于 2025-6-24 15:50:10 | 显示全部楼层
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:482
  • 最近打卡:2025-08-24 13:25:05

48

主题

370

回帖

686

积分

高级会员

积分
686
发表于 2025-6-24 17:06:28 | 显示全部楼层

原理图真心没有。就是看别人这么做的,有的东西和你们的讨论是一样的。现在是3.6V供电。用TL431的2.5V做VREF基准。 用两个TL432串联做的采样电路。取中间的1.25V左右给到互感器。
然后去ADC3 直接套你给发的程序。基本就是在0点上。然后我自己改2048为2035就到了0了。
然后串口显示也是可以的。可以看到数据。给互感器加上穿心电流也可以直接到20多。
现在我为了方法。把LED显示也加进去了。用的中断19(定时器3) 正常显示。
做到这一步还是没有看出来这个是怎么标定的。

点评

ADC标定都是程序配合完成的。 先将输入信号短路,读取0点值ADC0. 输入电压V1(小电压,比如0.1V),读到ADC1. 输入电压V2(接近满量程,比如4.5V),读到ADC2. 则线性校准系数为 K=(V2-V1)/(ADC2-ADC1)。 测量任意电  详情 回复 发表于 2025-6-24 17:11
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-8-24 14:13 , Processed in 0.129769 second(s), 98 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表