[STC单片机] stc12c5a60s2直接采样交流电压

[复制链接]
5183|8
 楼主| cellagent 发表于 2013-9-30 15:02 | 显示全部楼层 |阅读模式
stc12c5a60s2单片机的ad只能输入单极性的电压信号。之前一直受困于交流电压的抬升,搭建过运放加法电路、绝对值电路,在没有示波器、仅一个简易万用表的情况下,结合网上的资料进行的修改、调试了很长一段时间,总得不到需要的结果-——最大值为2.5v的交流电压变成0~5v的单极性电压。在万般无奈的情况下我直接将有效值为1.7v的交流电压输入到P1.0(模拟通道),然后编程每采样100次就保存ad转换的最大值(8位),最后把最大值通过串口发送到电脑的串口助手。串口一直稳定的显示0x7C,通过计算:124(0x7c)×5/256=2.421875,即采样的有效值为2.421875/1.414=1.7128,与之前万用表测得的1.7v接近。我的目的就是测交流电压的有效值,所以想问问这种方式可行吗(模拟通道输入为负值时,结果寄存器的值均为0x00)?或者有什么比较简单、方便调试的方法?谢谢!
gx_huang 发表于 2013-9-30 16:34 | 显示全部楼层
你真会瞎搞,总需要最基本的数学知识和模拟电路知识。
如果是正弦波,最大值和有效值是有固定的比例关系,你能保证是正弦波吗?
如果输入的交流信号内阻很低,直接接ADC管脚,负的时候容易搞坏芯片,不建议这么做。
还是需要对信号处理一下,保护一下。
 楼主| cellagent 发表于 2013-10-8 08:42 | 显示全部楼层
gx_huang 发表于 2013-9-30 16:34
你真会瞎搞,总需要最基本的数学知识和模拟电路知识。
如果是正弦波,最大值和有效值是有固定的比例关系, ...

谢谢你的回复,国庆长假,没去理工作上的事情。我也知道我这样做存在的问题。我检测市电的目的是判断线路上的电压、电流是否超过警戒,即正负峰值是否一段时间超过设定的阈值。直接将交流输入到单片机不仅可能烧坏芯片,也不能检测负峰值(我之前考虑负峰值通过运放的反向电路转换后再输入到单片机)。确实是因为单片机检测交流这一问题困扰了很久,一直都没有解决(或者是观察工具的限制,没有示波器、较高档的万用表,又或者是心态没调整好,检测的手段出现问题)。我知道这种情况正是考验自己的时候,收获也在此背后。几番从整体上重新审视,最后又烦恼起来,有种思维枯竭的感觉,所以。。。
ayb_ice 发表于 2013-10-8 09:19 | 显示全部楼层
最简单的就是中间接个RMS芯片,比如AD636,AD737...
 楼主| cellagent 发表于 2013-10-8 09:20 | 显示全部楼层
ayb_ice 发表于 2013-10-8 09:19
最简单的就是中间接个RMS芯片,比如AD636,AD737...

嗯,我之前也考虑过,但是芯片好贵啊。
coody 发表于 2013-10-8 11:02 | 显示全部楼层
对一个周期均匀采样N次,ADC结果要用绝对值或有符号的,然后计算各次采样的平方和,再平均,再开方,就OK啦
cjseng 发表于 2013-10-8 18:03 | 显示全部楼层
交流电并接一个电阻,直接测电阻温度再与环境温度比较。
 楼主| cellagent 发表于 2013-10-9 08:35 | 显示全部楼层
coody 发表于 2013-10-8 11:02
对一个周期均匀采样N次,ADC结果要用绝对值或有符号的,然后计算各次采样的平方和,再平均,再开方,就OK啦 ...

谢谢你的回复,你的思路是一种很好的计算有效值的方法,我仔细想了想,我检测交流的目的是为了监测线路中的电流或电压是否超限。与通常的测有效值相比,最后一步变成判断正负峰值是否超限。我用的单片机自带AD的采样率为25万次/秒,每次至少采样5000个点才能保证50Hz的脉动电压能被采样一个完整的周期。记录该采样过程中的最大值和最小值,然后与预设的警戒值比较。
 楼主| cellagent 发表于 2013-10-9 08:40 | 显示全部楼层
cjseng 发表于 2013-10-8 18:03
交流电并接一个电阻,直接测电阻温度再与环境温度比较。

谢谢你的回复。你的意思通过温度来映射有效值吗?是焦耳定律吗?但是温度与电量之间有精确的对应关系吗?还有,电阻的温度怎么能够保证测得精准呢?你的想法很有新意,非常感谢!不知道你实践的效果是怎样的?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

19

主题

171

帖子

3

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