qepuemc 发表于 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中粗劣计算。
现在我看到的难点就是要标定。标定是最复杂的

晓飛飛 发表于 2025-5-31 20:16:15

互感器电路不能用整流桥的,本身就是小信号,连桥都过不去,需要直接采集交流信号,或者使用RMS-DC电路转为单片机可以采集的直流信号。

qepuemc 发表于 2025-6-1 07:57:01

晓飛飛 发表于 2025-5-31 20:16
互感器电路不能用整流桥的,本身就是小信号,连桥都过不去,需要直接采集交流信号,或者使用RMS-DC电路转 ...
互感器厂家让这么搞的。现在问题就是桥过去了。运放这边不成线性。标定困难。
LTC1966太贵了。

梁工 发表于 2025-6-1 11:16:48

qepuemc 发表于 2025-6-1 07:57
互感器厂家让这么搞的。现在问题就是桥过去了。运放这边不成线性。标定困难。
LTC1966太贵了。
...

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

qepuemc 发表于 2025-6-24 10:32:20

qepuemc 发表于 2025-5-31 08:22
贴子看到了。文章中有些是ADC采样的讨论。基本上这些已经掌握。
还有采集电流电压的还有交流和直流。为测 ...
目前测试了 12-开天斧3.1-P1.6交直流兼容采样计算有效值-串口1(P3.1)返回虚拟数码管显示的这个例子。

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

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

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


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

//0.036575                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.076615    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=xsbl % 10;      
LED8=xsbl % 100/10;
LED8=xsbl % 1000/100;
LED8=xsbl % 10000/1000;
      
LED8=LED8+0x20;//显示小数点1位



            }

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

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


下面的我没做好的程序



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

//初始化

        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 = adc_sum/8;        //FIFO, 8个, 平均值用于计算0点
                        rms_tmp = RMS_Sum/8;        //FIFO, 8个
                        res_cnt++;
                        res_cnt &= 7;
//清零功能去掉

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

接收←.7SEGS...00.01.
接收←.
接收←.
接收←.
接收←.
接收←.
接收←.
接收←.
接收←.7SEGS...00.01.
接收←.

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


qepuemc 发表于 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)返回虚拟数码管显示的这个例子。

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

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

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


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

//0.036575                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.076615    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=xsbl % 10;      
LED8=xsbl % 100/10;
LED8=xsbl % 1000/100;
LED8=xsbl % 10000/1000;
      
LED8=LED8+0x20;//显示小数点1位



            }

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

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


下面的我没做好的程序

梁工 发表于 2025-6-24 15:27:29

qepuemc 发表于 2025-6-24 11:44
qepuemc 发表于 2025-5-31 08:22
贴子看到了。文章中有些是ADC采样的讨论。基本上这些已经掌握。
还有采 ...
贴个电路图片出来看看。
主程序中
if(B_1ms)   //1ms到
{
      B_1ms = 0;

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

qepuemc 发表于 2025-6-24 15:46:59

梁工 发表于 2025-6-24 15:27
贴个电路图片出来看看


梁工 发表于 2025-6-24 15:50:10

qepuemc 发表于 2025-6-24 15:46


我要看原理图

qepuemc 发表于 2025-6-24 17:06:28

梁工 发表于 2025-6-24 15:50
我要看原理图

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