无功补偿控制器

[复制链接]
3555|24
 楼主| heaven_xiyu 发表于 2013-9-16 10:42 | 显示全部楼层 |阅读模式
我现在的采集电路是从别人的控制器上接出来的,可得到电压电流的方波,  通过我的单片机进行检测,用定时器1计时。 现在得到的结果已经比较准确,可是却不是很稳定。
人家的控制器在功率因数为0.8的时候只会在0.801和0.802之间跳动, 可是我得到的数据却会在0.76~0.86之间波动, 虽然大多数结果是在0.80之间,可是波动还是很大。 我已经将得到的值循环30次求均方根,还是一样波动很大。 求高人指点这是为什么呢?
mcuatmel 发表于 2013-9-16 10:47 | 显示全部楼层
电网是实时波动的,你用的是理论方法,不大合适,你用现成的仪表IC更好些。
 楼主| heaven_xiyu 发表于 2013-9-16 16:15 | 显示全部楼层
mcuatmel 发表于 2013-9-16 10:47
电网是实时波动的,你用的是理论方法,不大合适,你用现成的仪表IC更好些。 ...

我是在功率源上输出的电压,电流, 而且现在方案已经做了若是再改已经来不及了。
问题是 别人的控制器能做到很稳, 不知道是不是算法的问题, 采样电路完全一样的。
玩转天哈 发表于 2013-9-16 16:46 | 显示全部楼层
来学习的
mcuatmel 发表于 2013-9-16 17:10 | 显示全部楼层
应该是算法的问题。
 楼主| heaven_xiyu 发表于 2013-9-17 10:53 来自手机 | 显示全部楼层
mcuatmel 发表于 2013-9-16 17:10
应该是算法的问题。

是啊,我也觉得是算法的问题,不会要用到什么傅立叶变换吧
mcuatmel 发表于 2013-9-17 11:30 | 显示全部楼层
你用的是简单的边沿采样计时吧?如果波形没问题理论上也不应该像你说的差那么多,如果真是用这种方法,不太实用,我做过,用标准信号源时不错,很准,现场就不行了。
qzlbwang 发表于 2013-9-17 12:40 | 显示全部楼层
要知道,这过程中每一步都可能存在着误差。细节不注意的话,波动大是必然的。
 楼主| heaven_xiyu 发表于 2013-9-17 19:00 | 显示全部楼层
mcuatmel 发表于 2013-9-17 11:30
你用的是简单的边沿采样计时吧?如果波形没问题理论上也不应该像你说的差那么多,如果真是用这种方法,不太 ...

是的,电压电流两个方波,电压上升沿的时候 开始计时, 检测电流电平的高低,在电流电平转换的时候获取计时器的值t,再在电压下降沿的时候获取计时器的值T/2。  这个检测电路是别人的板子上接出来的,而他们的控制器是很稳定的。 而我只用了求均方根值波动很大。我觉得应该是算法的问题,可是确实不知道他们的程序是怎么处理的。
qzlbwang 发表于 2013-9-17 19:30 | 显示全部楼层
计时用中断做的吧?考虑过中断响应的时间没有?——假如某次电平翻转时正好在执行其他中断(比如显示扫描的定时中断)。呵呵,这个可是随机的。
 楼主| heaven_xiyu 发表于 2013-9-18 00:38 | 显示全部楼层
qzlbwang 发表于 2013-9-17 19:30
计时用中断做的吧?考虑过中断响应的时间没有?——假如某次电平翻转时正好在执行其他中断(比如显示扫描的 ...

确实有这个可能, 我试试看在计时的时候, 关闭其他中断试试。多谢前辈指点!
 楼主| heaven_xiyu 发表于 2013-9-18 00:42 | 显示全部楼层
qzlbwang 发表于 2013-9-17 19:30
计时用中断做的吧?考虑过中断响应的时间没有?——假如某次电平翻转时正好在执行其他中断(比如显示扫描的 ...

我只设置了定时器0溢出中断, 然后定时器1用来计数。 如果是进入中断的话,定时器1还是在运行的吧。 除非中断结束的时候已经过了电平翻转,然后在下一次翻转的时候 才结束计时,这样误差应该会很大的吧, 可是我现在检测出的相位差的时间 差不多相同, 只差了一点点。
mcuatmel 发表于 2013-9-18 08:40 | 显示全部楼层
你一共用了几个中断?两个定时器分别做了哪些事情?说清楚些。
qzlbwang 发表于 2013-9-18 08:54 | 显示全部楼层
heaven_xiyu 发表于 2013-9-18 00:42
我只设置了定时器0溢出中断, 然后定时器1用来计数。 如果是进入中断的话,定时器1还是在运行的吧。 除非 ...

判断上升(下降)沿在哪里判断?比如说在上升(或下降)沿时,已经进入某中断,那么等到你判断上升(下降)沿时已经延时了,并不是发生的那个时刻。因为要等到中断退出(或开中断后——你判断上升或下降沿的中断是更高级的中断时)才能做这事。
 楼主| heaven_xiyu 发表于 2013-9-18 12:23 | 显示全部楼层
mcuatmel 发表于 2013-9-18 08:40
你一共用了几个中断?两个定时器分别做了哪些事情?说清楚些。

只用了1个定时器0中断, 定时器0用来定时,半秒中屏幕刷新一次、检测电压电流一次之类的工作。定时器1用来计数电压电流的相位差和周期。 我想即使进入中断应该也不影响定时器1的计时吧。 我在中断里就执行了2个全局变量的++指令,很快就能跳出来的
 楼主| heaven_xiyu 发表于 2013-9-18 12:29 | 显示全部楼层
qzlbwang 发表于 2013-9-18 08:54
判断上升(下降)沿在哪里判断?比如说在上升(或下降)沿时,已经进入某中断,那么等到你判断上升(下降 ...

先判断电压为0,在while里一直检测电压升高, 等电压一高马上定时器1清零开始计数,在检测电流当前状态,电流若是1则电流超前,若是0则滞后。 再检测电流的电平翻转,记下相位差,再检测电压的电平翻转记下周期的一般T/2。 确实 如果在while里如果进入中断了,然后在中断里电压升高了,退出中断时可能会少计数。 然后在电压翻转记录电压周期之前又进入中断 可能会使定时器1多计数。 我试试在检测前关闭中断试试。 也问题就是出在这里。
qzlbwang 发表于 2013-9-18 12:43 | 显示全部楼层
1、如果突变沿发生时,程序已经进入中断,那么该突变沿只有在中断返回后才能被检测到。
2、如果在突变沿检测的过程中(尚未处理完时),发生中断,那么也要等到中断处理完后才能继续处理该突变事件。
不管上述那种情况都将影响检测的实时性。检测前关闭中断只能是解决第二种情况。根本解决不了第一种情况。
qzlbwang 发表于 2013-9-18 12:46 | 显示全部楼层
另外,你能保证输入的方波都是50%占空比吗?这个半周期能保证是准确的吗?
 楼主| heaven_xiyu 发表于 2013-9-18 14:05 | 显示全部楼层
qzlbwang 发表于 2013-9-18 12:46
另外,你能保证输入的方波都是50%占空比吗?这个半周期能保证是准确的吗? ...

嗯,是的,因为采样部分是从已经成熟的产品上接出来的,而且焊上他们原来的片子 功率因数的检测很稳点 没有问题。
 楼主| heaven_xiyu 发表于 2013-9-18 14:08 | 显示全部楼层
qzlbwang 发表于 2013-9-18 12:43
1、如果突变沿发生时,程序已经进入中断,那么该突变沿只有在中断返回后才能被检测到。
2、如果在突变沿检 ...

应该没问题吧。 我一次检测30遍,用均方根值计算, 即使第一次检测有错误,得到的结果应该误差也不大吧?而且我中断函数很短应该没问题吧?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

144

主题

219

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部