搜索
bottom↓
楼主: jacky1982512

急:谁有用单片机测量交流电压的程序?

[复制链接]

出0入0汤圆

 楼主| 发表于 2010-6-25 08:34:23 | 显示全部楼层
回复【101楼】cuikai12345
-----------------------------------------------------------------------

晕什么。有什么高见吗?

出0入0汤圆

 楼主| 发表于 2010-6-25 16:50:55 | 显示全部楼层
高手顶下子

出0入0汤圆

发表于 2010-6-25 21:38:00 | 显示全部楼层
回【96楼】 jacky1982512
-----------------------------------------------------
我的理解是:  你的电流是 3A时, AD采样的电压值是39,减去一个基值1, 则AD=38代表3A的电流, 3000mA/38=78.9mA
            也就是说, AD的值是1时 代表 78.9mA, PIC是 10位的AD, 满刻度值是1023, 1023*78.9mA=80714mA=80A,

PIC的AD采样, 误差一点很正常, 如果你的电流最大比如是10A, 则调节到电流在1A时, AD采样值在90左右, 1000mA/90=11.1mA
也就是说, PIC采样误差是1时, 电流误差是11.1mA, 而按照你上面的参数, 电流误差是78.9mA.

如果你编程方便, 最好能把测出的连续的一批数据取出来(比如发到串口,PC机接收,或者用LCD显示, 用个按钮,一组一组地显示出来, 一定要是连续的一组数据), 有具体的数据, 用什么方法分析都方便, 否则外人很难看出问题所在, 等你把数据采集出来时, 估计你也就能发现问题在哪里了

上面所说, 仅仅牵涉AD取样是否正确的问题, 如何将AD值转换为 电压/电流 的有效值,楼上各位大侠 已经给出了解答

出0入0汤圆

 楼主| 发表于 2010-6-26 08:41:10 | 显示全部楼层
回复【104楼】my2009
-----------------------------------------------------------------------

谢谢你2009:
我所谓的AD值,是测量有效值得来的。但是我把有效值放大了100倍。
可以怎么理解:
用万用表交流档位测0.16V的交压,我测出来的值是16;

一次类推:0.17--》17;0.18-->18  
我不知道我的AD值的来源和楼主的可一样。
要是不一样的话,可以按照你的做法做吗?

出0入0汤圆

发表于 2010-6-26 09:09:53 | 显示全部楼层
关注.

出0入0汤圆

 楼主| 发表于 2010-6-26 13:44:52 | 显示全部楼层
回复【104楼】my2009
-----------------------------------------------------------------------

高手在看下,能留下QQ  my2009

出0入0汤圆

发表于 2010-6-27 00:10:14 | 显示全部楼层
【105楼】 :
----------------------------------------------------
"用万用表交流档位测0.16V的交压,我测出来的值是16;"-------没看明白,"16"是万用表测出的,还是单片机测出的? 如果是万用表测出的, 那就看 PIC手册吧, 如果是单片机测出的, 你怎样知道是"16"?  用LCD显示出来的? 如果有LCD屏, 最好显示并记录下多组数据.

先不管有效值或其他什么值, 也不管运放放大多少倍, 也不要做任何转换,  给出单片机的原始测量值, 要连续的一组值, 能给出吗? 这组数据很重要, 要原始的, 不要经过处理的数据.

我怎么感觉到你连第一步还没走完:  你能肯定你的单片机测出的AD值是那一瞬间的正确的值吗?, 依据是什么? 用5V, 2.5V, 0V接到AD端口, 显示出正确值吗? ( 用两个4.7K的电阻串联, 两头接到5V和0V, 中间抽头是2.5V, 这么机密的方法我不会告诉别人, 只悄悄告诉你 ),  我觉得你暂时不要管什么有效值, 先确定测出的值, 就是那一瞬间的正确的值,  第二步是测出一组连续的数据, 后面就很好办了, 本论坛的众多大侠, 会帮你分析数据的

我平时不用QQ, EMAIL:  ctdn@21cn.com

出0入0汤圆

发表于 2010-6-28 09:22:26 | 显示全部楼层
楼上说的很明白了,就是你先测量一个定值,你每次读取的都是AD的瞬时值,看看变化大吗,若变化不大,就OK了,

出0入0汤圆

 楼主| 发表于 2010-6-29 09:27:35 | 显示全部楼层
回复【108楼】my2009
-----------------------------------------------------------------------
是用液晶显示的。

出0入0汤圆

 楼主| 发表于 2010-6-29 10:11:12 | 显示全部楼层
"用万用表交流档位测0.16V的交压,我测出来的值是16;"-------

这句话的意思是:我用877测量的是有效值,只不过我在程序里把这个电压放大了100倍了。
比如,我用万用表交流档位测AD输入引脚的电压时0.16V的交流电压,,那么我单片机液晶显示出来的值是16;
0.17对应的显示是17。

后面的数据我也验证了,差距不大。

想问大侠怎么将这样的值转化成,220v的电压,和实际的电流值显示在液晶上面

出0入0汤圆

发表于 2010-6-29 10:45:55 | 显示全部楼层
【111楼】 --"这句话的意思是:我用877测量的是有效值"
-----------------------------------------------------
     看来我的文字表达能力太差了, 我问的意思是:  
          当 “万用表交流档位测AD输入引脚的电压时0.16V的交流电压" 时,   ww1 = ADRESL + ((ADRESH&3)<<8)
          ww1 是多少?,  不要做任何转换, 我就要原始值。

     换一个说法:   “万用表交流档位测AD输入引脚的电压时0.16V的交流电压" 时,ADRESL 和 ADRESH 各是多少?
     注明:    ADRESL 和 ADRESH 是 CPU 的 AD 转换结果寄存器(PIC18F的寄存器, 不知PIC16F系列是否相同)

     我明白了, 程序不是你写的, 你只是测试, 所以你只有万用表电压值和LCD显示值,对吧? 如果是这样,让模电高手帮你调电路参数吧.

出0入0汤圆

发表于 2010-6-29 17:38:26 | 显示全部楼层
回复【112楼】my2009
-----------------------------------------------------------------------


不是你的错

出0入0汤圆

 楼主| 发表于 2010-6-30 14:21:42 | 显示全部楼层
回复【112楼】my2009
-----------------------------------------------------------------------

程序是我写的。
我一周采样32个点,用有效值的公式算出电压的有效值。

你问ADRESL 和 ADRESH 各是多少?
我采样了32个点,那我该告诉你那个点的值呢?

我在我的测量信号里同时有2中信号,交流和直流信号。

不知道我的回答行不行?
要不能不能把你的电路或者程序附上。研究下你的方法。

出0入0汤圆

 楼主| 发表于 2010-6-30 14:22:49 | 显示全部楼层
回复【113楼】szduan
-----------------------------------------------------------------------

应该是我错吧

出0入0汤圆

发表于 2010-6-30 15:10:12 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-6-30 15:39:15 | 显示全部楼层
【115楼】
-------------------------------------------------------------
"一周采样32个点,用有效值的公式算出电压的有效值。 "---------你的意思是AD采样转换已经做好, 你要是确保你的转换方法没有问题,那就剩下数据转换显示的问题了


“用万用表交流档位测AD输入引脚的电压时0.16V的交流电压,,那么我单片机液晶显示出来的值是16”------假设这是交流电压的采样信号, 那么, 这时的运放前输入的交流电压是多少?, 如果是16V(不是指AD输入引脚的电压时), 那就完了,没问题了。

如果不是是16V, 比如是120V有效值,  那有二个方法你看可行否:
方法一:调整运放电路参数, 使得AD输入引脚的电压为1.20V, LCD显示就该是120。
方法二:单片机处理数据, 新显示的数据 new = (120/16) * 旧显示的数据16,  比如外电输入是240V---AD采样到0.32V----单片机原来应该显示32, 现在显示数据处理一下, new = (120/16) * 32 = 240, 单片机显示240, 完成了

出0入0汤圆

 楼主| 发表于 2010-7-1 09:57:24 | 显示全部楼层

(原文件名:ourdev_559671.jpg)

VAC接三相四线,对中心线是220V,

出0入0汤圆

 楼主| 发表于 2010-7-1 10:01:21 | 显示全部楼层
回复【118楼】jacky1982512
-----------------------------------------------------------------------

方法2处理的话:

(220/16)*16=220
如果AD采用的值是17,也就是说有效值是0.17的时候;

(220/16)*17=233.75

这样的话,感觉电压变化很快。电压应该不是骤变的吧。

出0入0汤圆

 楼主| 发表于 2010-7-1 10:02:29 | 显示全部楼层
回复【119楼】jacky1982512
-----------------------------------------------------------------------

有什么办法可以解决这个问题吗?

我现在遇到的就是这样问题

出10入0汤圆

发表于 2010-7-1 10:03:14 | 显示全部楼层
楼主真的挺累的,这种图都要“骑兵”

大煞风景啊!!!哈哈

出0入0汤圆

发表于 2010-7-1 11:27:45 | 显示全部楼层
就这破图 还抹

根本就不懂如何虚心请教人 问题
这电路 咱老李早就玩过了

出0入0汤圆

发表于 2010-7-1 11:49:08 | 显示全部楼层
【120楼】 jacky1982512
---------------------------------------
用方法一试试, 你的电路参数不合理, 调一下参数, 当220V时, AD采样到2.20V

出0入0汤圆

 楼主| 发表于 2010-7-2 08:11:34 | 显示全部楼层
回复【122楼】xcodes
-----------------------------------------------------------------------

原谅我的错吧,因为这个是公司产品上的,我也有责任不是,如有不对,还望海量啊。

我也不想抹掉。

出0入0汤圆

 楼主| 发表于 2010-7-2 08:17:42 | 显示全部楼层
我R1=3M,那我Rf=?要很大才可以啊

出0入0汤圆

发表于 2010-7-2 20:51:34 | 显示全部楼层
你去吃雾呐,搞什么测量啊。只要显示220就行了,搞什么搞

出0入0汤圆

 楼主| 发表于 2010-7-3 08:14:49 | 显示全部楼层
回复【126楼】yuanjia2009
-----------------------------------------------------------------------

我说大侠不厚道吧,不指点就算了。何必打击人

出0入0汤圆

发表于 2010-7-3 08:38:25 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-7-3 09:52:40 | 显示全部楼层
"不是你的错"

I agree.

出0入0汤圆

发表于 2010-7-3 10:36:37 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-7-6 08:48:16 | 显示全部楼层
谁有源代码,电力仪表的,或者其他仪表的。

出0入0汤圆

发表于 2010-7-6 13:17:40 | 显示全部楼层
点击此处下载 ourdev_566166Q7ZUWK.txt(文件大小:8887字节) (原文件名:电流电压表测量程序.txt)

出0入0汤圆

发表于 2010-7-6 21:13:17 | 显示全部楼层
好长时间没来关注了,不知楼主搞定了没有??
论坛上有个文章就是介绍电表的方案,不知你看过没有??

出0入0汤圆

 楼主| 发表于 2010-7-7 08:30:05 | 显示全部楼层
回复【132楼】xcodes
-----------------------------------------------------------------------

晕啊,大侠,要这样才可以真诚的面对世人。

前面的原因我解释过了。

出0入0汤圆

 楼主| 发表于 2010-7-7 08:31:20 | 显示全部楼层
回复【133楼】qinhya
-----------------------------------------------------------------------

谢谢,请问那篇文章叫什么名字?能否上传到这里呢?

出0入0汤圆

 楼主| 发表于 2010-7-7 08:32:35 | 显示全部楼层
回复【121楼】huike
-----------------------------------------------------------------------

“骑兵“是何意?

出0入0汤圆

发表于 2010-7-7 09:57:05 | 显示全部楼层
mark

出0入0汤圆

 楼主| 发表于 2010-7-7 11:05:54 | 显示全部楼层
回复【132楼】xcodes
--------------------------------------------------------------------
装逼者比卖淫更可耻

出0入0汤圆

发表于 2010-7-7 14:17:50 | 显示全部楼层
回复【124楼】jacky1982512
-----------------------------------------------------------------------

就这么一个小截图有必要,其实大家在乎的不是图而是诚意,再者又不是全部电路图,对于你的问题这个截图可有可无。就像112楼所说的,数据上传大家一看便知,再者把一个周期的数据保存下来,不用绘图看数据也能看个大概是不是正弦!还有做产品10位AD低了点吧。在一个采样频率最好是工频的整数倍。我之前做的功率表,采样频率6.4k,利用锁相环倍频3.2k一个周期采样64点,用的是16位AD。软件滤波采用中值滤波,去掉一个最大值一个最小值,累计和平均。CPU dspic4013.、AD7656。

出0入0汤圆

发表于 2010-7-7 18:40:03 | 显示全部楼层
回复【135楼】jacky1982512
-----------------------------------------------------------------------
是论坛上的一个网友发的,我不记的具体的联接了,但我下载了,你看下,不知有没有用!


点击此处下载 ourdev_566463C0KAI6.pdf(文件大小:713K) (原文件名:DSP电表.pdf)

出0入0汤圆

发表于 2010-7-7 21:32:40 | 显示全部楼层
也在做这方面的东西,之前请教一个问题,再另外一个帖子里,还没有验证过。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4130036&bbs_page_no=1&search_mode=3&search_text=esdart&bbs_id=9999

出0入0汤圆

发表于 2010-7-8 20:04:37 | 显示全部楼层
回复【16楼】jacky1982512
-----------------------------------------------------------------------
就你这图还擦~~~~悲剧....就你这个2.5V能准吗???你的5V就一点纹波都没有???有了就加到测量中去了~~~~好不容易弄的点精度这一下.....全还回去了~想抬高还是别省这个基准了吧~~再者431也不是很贵吧~

出0入0汤圆

 楼主| 发表于 2010-7-9 13:54:30 | 显示全部楼层
回复【142楼】liuhongyu 柳宏宇
-----------------------------------------------------------------------
谢谢楼主的批评,但是你是高手。我是低手,没有办法。

加入你搞过的话,能否上传的代码?或者上传你的方法?你测试电压或者电流是怎么做的


不知道怎么回事,这一关就是过不了?

在测试交流电压的时候是不是要测量有效值才可以?

出0入4汤圆

发表于 2010-7-9 21:49:42 | 显示全部楼层
关注,学习

出0入0汤圆

 楼主| 发表于 2010-7-12 16:45:23 | 显示全部楼层
没有人做过这样类似的东西吗

出0入0汤圆

发表于 2010-7-12 20:42:26 | 显示全部楼层
不知道楼主做到哪一步了

看的我比较晕

出0入0汤圆

发表于 2010-7-12 22:28:22 | 显示全部楼层
回复【39楼】millwood0
-----------------------------------------------------------------------

  看millwood0的回帖很有意思,:-)

出0入0汤圆

发表于 2010-7-13 00:06:27 | 显示全部楼层
"没有人做过这样类似的东西吗"

multiple individuals have suggested multiple (perfectly valid) approaches to help you solve the issue, in multiple occasions.

Unfortunately, you have repeatedly been unable to recognize and comprehend any of them.

出0入0汤圆

 楼主| 发表于 2010-7-13 08:43:20 | 显示全部楼层
回复【148楼】millwood0
-------------------------------------------------------------------
或许你说的对吧。

能力还不够吧,继续修炼吧

出0入0汤圆

发表于 2010-7-13 18:26:28 | 显示全部楼层
5 minutes of work, I put this togeter. It uses one resistor to measure ac voltage's rms (and frequency).

the input signal here is a 5vp 50hz ac source. the pic is on 5v Vref so the correct rms should read 707v. the display shows that the mcu did 30 or 29 sampling and the rms voltage is around 700 (corresponding to about 700/1000*5=3.5v).

the input ac can be of any ac, so this is a true RMS meter.

you can quickly modify it to measure frequency, peak or average voltage.

all with 1 resistor. you can further improve its accuracy by running the mcu faster.



(原文件名:16F684 AC RMS.PNG)

出0入0汤圆

 楼主| 发表于 2010-7-15 11:00:36 | 显示全部楼层
回复【150楼】millwood0
-----------------------------------------------------------------------

程序能附上吗?楼主,

出0入0汤圆

 楼主| 发表于 2010-7-15 11:01:45 | 显示全部楼层
回复【150楼】millwood0
-----------------------------------------------------------------------

或许一个测试电压,对于高手只是一个小问题,但对于不太高的人,就是一个难题。

下午高手能从我们的角度考虑问题

出0入0汤圆

 楼主| 发表于 2010-7-15 11:09:01 | 显示全部楼层
回复【152楼】jacky1982512
-----------------------------------------------------------------------

知道你是高手,为什么你总是用英语回答问题呢?不明白

我也是用PIC做的,我看你的图也是用PIC做的。

很希望能看到你的代码!不知道可以不可以。

大侠帮帮忙吧?

jacky82512@renesas-mcu.com   我的邮箱

出0入0汤圆

发表于 2010-7-15 12:03:49 | 显示全部楼层
【151楼】 jacky1982512
---------------------------------------
你反复向别人要程序, 没有用的, 解决不了你的问题, 任何一个成熟的程序, 都是一个完整的框架, 全部给你不太现实, 给出部分,没有别的信息, 很难理解他的工作原理, 还要解释半天如何如何工作...

你技术上有问题, 要一个一个的解决, 不要一上来就一堆问题, 想象着有某个程序的出现, 改动两条语句, 就可以解决问题了, 看了你的回帖, 不客气的说, 没有一个有一点技术信息反馈, 全部是虚值, 根本看不到问题在哪里, 太极打的不错, 可惜这样别人帮不了你

你这个项目, 本来不算有多难, 要一步一步的走, 有问题再提出来, 要具体的小问题, 不要"如何测有效值"之类的大问题。否则别人很难回答。

下面这个思路,看一下是否可行:
* 先做一个独立的显示程序, 所有结果都要显示, 这是一个基础程序, 非有不可.
  然后随便显示10个数据, 隔两秒左右显示一个(即再做一个延时程序)
* AD 端口分别输入直流 0V , 2.5V, 5V,  显示结果, 是否正确
* 你说每周期取样 xx 次, 在取样前, 将某个IO 输出高电平, 下次取样时输出低电平, 用示波器看一下输出波形和频率,确保频率和你设置的周期相符, 否则后面的AD取值没有意义...
* ....

先说这些,好像与你的项目关联不大, 起房子前打的地基而已, 当然, 高手可以跳过这些过程

出0入0汤圆

发表于 2010-7-15 13:34:25 | 显示全部楼层
回复【154楼】my2009
-----------------------------------------------------------------------

看到你所有的回帖,对于初学者都非常有步进价值,但是正如你说的这小的太极打得不错;说话都是语无伦次的。人走路也要一步一个脚印,才会越走越高。你以为在拍电影一个轻功就能上楼。现实一点吧。想一步到位估计得累折你两条腿!我这不是在看笑话,路指得很明,你却不走。说道这里估计高手也该走了。没有LZ这样细心的指点了。

回复【148楼】millwood0
-----------------------------------------------------------------------

multiple individuals have suggested multiple (perfectly valid) approaches to help you solve the issue, in multiple occasions.

Unfortunately, you have repeatedly been unable to recognize and comprehend any of them.
-----------------------------------------------------------------------
millwood0 说得对,这样的话,还要多人提醒你吗?

出0入0汤圆

 楼主| 发表于 2010-7-15 16:56:58 | 显示全部楼层
回复【154楼】my2009
-----------------------------------------------------------------------

大哥你说的对,这些我都测试了。是对的

出0入0汤圆

发表于 2010-7-15 17:38:36 | 显示全部楼层
回【156楼】
----------------------------------------------------------
你试着能否保存一个周期的数据, 传到论坛上来, 有几点说明:
*   选定一个测试电压的通道,不用理会其他的通道;
*   要一个周期的连续的数据,比如32个数据(开机后停2秒, 等待输入电压稳定);
*   每个数据要原始的, 不要经过处理的:  ww1=ADRESL+ ((ADRESH&3)<<8) ;
*   数据不要求从什么时候开始取, 但是一定要是连续取的;
*   取数据之前, 用万用表交流档测一下输入的交流电压值和AD端口的交流电压值,一并传送上了;

屏幕可能显示不了32个数据, 采集完数据后, 一次显示几个数据, 停2秒, 再显示几个, 如果不会采集、保存数据, 或不会显示32个数据
请直说. 有了具体的数据, 请模电高手帮你分析数据。

忘了问一句: 这些数据应该不在保密范围吧

出0入0汤圆

发表于 2010-7-15 17:45:58 | 显示全部楼层
佩服my2009 的耐心


回复【148楼】millwood0  
-----------------------------------------------------------------------

multiple individuals have suggested multiple (perfectly valid) approaches to help you solve the issue, in multiple occasions.  

Unfortunately, you have repeatedly been unable to recognize and comprehend any of them.  


Google 翻译:
多个人建议多(完全有效的)方法,协助您解决在多个场合的问题。

不幸的是,你曾多次被无法识别和理解它们。

出0入0汤圆

发表于 2010-7-15 19:02:44 | 显示全部楼层
回复【156楼】jacky1982512
-----------------------------------------------------------------------
大哥你说的对,这些我都测试了。是对的

-----------------------------------------------------------------------
我倒!每次都是这样的回答,你是不是在涮大家啊,怎么回答你的问题好像在向你要东西似的!发一段数据有这么费劲吗?如果你认为都是对的还上来发帖干屁啊!枉费my2009好心!我认为这帖该封贴了,气都被你气死了。如果你按照my2009的步骤,用数据说话回帖,应该早就结束了。

出0入0汤圆

发表于 2010-7-15 22:11:09 | 显示全部楼层
"很希望能看到你的代码!不知道可以不可以。 "

unfortunately, I have a policy of not providing code to assholes.

"如果你按照my2009的步骤,用数据说话回帖,应该早就结束了。"

agreed.

出0入0汤圆

发表于 2010-7-16 00:00:24 | 显示全部楼层
赞赏大家的耐心。
早有预料的结局。

出0入0汤圆

发表于 2010-7-16 09:34:01 | 显示全部楼层
第一次在阿莫的论坛里见到像楼主这样的!

出0入0汤圆

 楼主| 发表于 2010-7-16 10:56:04 | 显示全部楼层
反省中---

出0入0汤圆

 楼主| 发表于 2010-7-16 11:11:41 | 显示全部楼层
回复【157楼】my2009
-----------------------------------------------------------------------

今天晚上我将试图测试这些数据,感谢大家对我的帮助,感谢大家。

好像上面有个大侠要封_杀我!哎,有必要,有大侠的风范嘛?

出0入0汤圆

 楼主| 发表于 2010-7-16 11:19:49 | 显示全部楼层
回复【160楼】millwood0
-----------------------------------------------------------------------

那能够提供的你的算法吗?尽量具体点。

我的方法是:

用定时器定时0.625MS

然后再定时器里设置标志,标志位置1时,AD采样一次,

然后把这个值存起来。

一周采样完成后,取有效值,均方根。

然后我在采样32个周期,去平均去极值。

方法就是这样

今天晚上我把一周期 的数据传上,大家给点意见。

或许我真的得修正我的态度和方法了,
不能靠人家了。

出0入0汤圆

发表于 2010-7-16 12:32:28 | 显示全部楼层
回【165楼】
------------------------------------------------------------------------
   别忘了 "取数据之前, 用万用表交流档测一下输入的交流电压值和AD端口的交流电压值"

   你好像重点不对啊, 你折腾了这么久, 我想你的有效值转换算法也应该差不多了, 虽然不能100%正确, 但误差也应该不大了,我觉
得你的数据采集有问题, 你的重点是正确的采集到AD数据,  有了数据, 请大侠帮忙写个转换子程序, 还不是小菜一碟。

出0入0汤圆

 楼主| 发表于 2010-7-16 13:34:37 | 显示全部楼层
回复【166楼】my2009
-----------------------------------------------------------------------

回复:2009

今晚看下数据,上传到此

出0入0汤圆

 楼主| 发表于 2010-7-19 07:45:14 | 显示全部楼层
ICD2出了点问题,出错。

出0入0汤圆

 楼主| 发表于 2010-7-20 08:19:05 | 显示全部楼层
昨晚记录下了数据,共计4组数据,就是早上来上班的时候忘记带了,我记录在2张纸上面了。

也就是4个周期;

我现在的做法是,采样好了一周期后,关闭AD采样,不然数据就被覆盖了。

各位大侠给点意见,怎么才能采样出比较真实的东西呢。或更好的方法

出0入0汤圆

发表于 2010-7-20 08:28:51 | 显示全部楼层
直接测一段时间内的极大值,除以sqrt(2)

出0入0汤圆

 楼主| 发表于 2010-7-20 15:06:17 | 显示全部楼层
回复【170楼】xbwpc
-----------------------------------------------------------------------

楼主能讲下你的思想吗?原理是什么?

出0入0汤圆

发表于 2010-7-20 16:05:19 | 显示全部楼层
到底谁是楼主,一直没搞明白?

出0入0汤圆

发表于 2010-7-20 20:37:23 | 显示全部楼层
回复【169楼】jacky1982512
-----------------------------------------------------------------------

真不知道这些天你在做什么?变着法的把自己帖子顶起来,一点实际的都没有。

如果是一个数组的话,调试过程中放入断点,直接不就能存成文本格式?你不会用的不是MPLAB IDE 吧。


(原文件名:Snap7.png)


(原文件名:Snap6.png)

保存为**.mch用记事本打开贴到本论坛不就可以了。真不知道你是专业搞开发的还是业余的。这个项目不是在单位做,确是在家里做,你平时不带优盘吗???次次被忽悠……还会上来看帖,真是搞不懂!

出0入0汤圆

 楼主| 发表于 2010-7-21 08:27:21 | 显示全部楼层
数据 测试出来了。用液晶显示出来的。不过要说明的是,我就采用了一个周期,就关闭了AD,大家说,这样可有必要。

应该说,我每测试一组数据都要复位下MCU;

现在把数据传上来,大家帮我分析下。

第一组:
476,238,274,341,488,807,506,510,514,513,513,557,560,514,509,511,502,490,494,477,475,291,271,485,489,509,508,512,509,513,519,550

第2组:

501,490,483,479,472,287,278,482,491,505,509,510,508,514,547,555,543,511,506,507,495,489,481,478,250,246,440,489,506,509,510,513

第3组:

480,475,476,262,254,489,496,523,508,512,515,510,515,550,550,511,529,496,497,493,480,474,267,257,344,493,650,507,509,513,516,513


第4组:

510,509,509,514,561,555,532,511,512,504,494,477,476,478,248,251,485,579,520,510,511,509,516,515,553,551,510,529,506,496,483,473

出0入0汤圆

 楼主| 发表于 2010-7-21 08:34:27 | 显示全部楼层
回复【173楼】wangqh1983
-----------------------------------------------------------------------

已经QQ恢复

出0入0汤圆

发表于 2010-7-21 09:20:59 | 显示全部楼层

(原文件名:新建 BMP 图像.JPG)

出0入0汤圆

发表于 2010-7-21 09:44:10 | 显示全部楼层
【174楼】 jacky1982512
【176楼】 chenerbox
----------------------------------------------------------------------
   有数据, 有图形, 可以看到现在的问题在那里了吧
   采样频率不对, 太低了
   AD端口的电压是多少?

出0入0汤圆

发表于 2010-7-21 10:06:49 | 显示全部楼层
让我想起了 国航釜山空难调查报告了 说飞行员丧失了位置感 不知道自己在哪 最后撞山了

出0入0汤圆

发表于 2010-7-21 11:47:42 | 显示全部楼层
【174】数据 测试出来了。用液晶显示出来的。不过要说明的是,我就采用了一个周期,就关闭了AD,大家说,这样可有必要。
应该说,我每测试一组数据都要复位下MCU;
--------------------------------------------------------------------------
  开机等二秒, 测一组数据, 然后转显示程序不停地显示就行了

  会不会调试中断频率?  如果没有示波器, 用液晶显示一个秒计时器, 对着手表秒针比较就行了
  num=0;
  second=0;
  while  (1)  {
     if  (++num>???)  { num=0;  second++; }
     显示 second
  }

  先保证频率是正确的, 看一下176楼的星座图,  有几周期的数据了

出0入0汤圆

 楼主| 发表于 2010-7-22 08:32:59 | 显示全部楼层
回复【176楼】chenerbox
-----------------------------------------------------------------------

请问这个是用什么软件分析出来的?让交给我这个东西的用法吗?

出0入0汤圆

 楼主| 发表于 2010-7-22 08:42:59 | 显示全部楼层
回复【177楼】my2009
-----------------------------------------------------------------------

AD输入口的交流电压:0.16V,

AD输入口的直流电压:2.5V,

采样频率现在是每个周期20MS,32次,根据采样定理的话。我应该怎么选择呢

出0入0汤圆

发表于 2010-7-22 09:19:23 | 显示全部楼层
回复【180楼】jacky1982512
-----------------------------------------------------------------------

就是 excel,把数据输入到excel里面,插入图表,选个折线图就可以了

出0入0汤圆

发表于 2010-7-22 09:51:30 | 显示全部楼层
看了作者的图片跟自己的签名,感觉作者就是一个装逼的人,自己问问题还要吧参数给摸掉了在上传上来!狂晕

出0入0汤圆

发表于 2010-7-22 10:00:49 | 显示全部楼层
回复【183楼】our_avr
看了作者的图片跟自己的签名,感觉作者就是一个装逼的人,自己问问题还要吧参数给摸掉了在上传上来!狂晕
-----------------------------------------------------------------------

呵呵 要厚道

出0入0汤圆

发表于 2010-7-22 11:06:09 | 显示全部楼层
【181楼】 jacky1982512
-------------------------------------------------------
    " 采样频率现在是每个周期20MS,32次"-------除了你的编程参数外, 有没有其他方法验证采样频率是否正确, 我没说你的20ms 采样周期低了, 只是怀疑采样周期有 60ms 了, 20ms的周期可以了, 请用第二种方法证明采样周期是20ms, 比如用(179楼)的方法,或示波器看波形...., 别再说 什么 "是对的.." 的回帖, 采样周期不能确保, 没法往下走。

    最好想办法接个示波器。

    看看什么是交流电:  
   
交流电波形 (原文件名:AC_220.jpg)

出0入0汤圆

 楼主| 发表于 2010-7-22 12:53:03 | 显示全部楼层
回复【183楼】our_avr
-----------------------------------------------------------------------
把帖子看完再说话吗,原因我已经解释了。

出0入0汤圆

 楼主| 发表于 2010-7-22 13:02:45 | 显示全部楼层
回复【185楼】my2009
-----------------------------------------------------------------------

被测量的信号是50HZ, 一个周期是20MS,然后再20MS的时间内我采样了32次AD值。

这个时间我是用T0来定时完成的。也就是20/32MS;

刚才可能我是没有表达明白。你看这样可以吗?

出0入0汤圆

发表于 2010-7-22 18:24:21 | 显示全部楼层
【187楼】 jacky1982512
--------------------------------------------
    你说明白了,你早就说明白了是用多少频率, 问题是我想你用其他的方法来证明你的频率是对的,
    你能用什么方法, 证明采样32次AD值是用了20ms,而不是用了60ms或80ms,  我怀疑用了80ms, (176楼)的图形, 有4到5个周期的时间
    没办法,中国的技术人员就是用这样语言进行交流的, 我不懂你们星球的语言
    把你设定T0的程序贴上来,方便吗?, 还有晶振频率

出0入0汤圆

发表于 2010-7-22 20:47:29 | 显示全部楼层
my2009, you are the nicest and most patient person I have ever seen.

出0入0汤圆

 楼主| 发表于 2010-7-23 08:16:16 | 显示全部楼层
回复【188楼】my2009
-----------------------------------------------------------------------

可以,稍等
晶振4M

/********************************************************************************************
* 函数名称:void Init_Time0(void)
* 功    能:初始化定时器0
* 入口参数:无
* 出口参数:无
* 注    意:
*********************************************************************************************/
void Init_Time0(void)
{
        OPTION=0x02;//选项寄存器设置:T0CS=0,选择内部时钟作为震荡信号;PSA=0把分频器分给T0;分频比位:8
        INTCON=0xe0;//中断控制寄存器设置:GIE=1;PEIE=1; T0IE=1;即总中断开,允许第二梯队中断,允许T0溢出
        TMR0=178;   //初始值计数寄存器;8y=625(定时50MS) 解得y=78   256-78=178就是初始值。
}


/********************************************************************************************
* 函数名称:void interrupt Time0()
* 功    能:T0中断函数
* 入口参数:无
* 出口参数:无
* 注    意:T0 一毫米中断一次。中断的名字可以任意取。
*********************************************************************************************/
void interrupt Time0()
{
        //判断定时器中断
        if(T0IF==1)
        {
                T0IF=0;                         //溢出标志位清零,重置T0
                TMR0=131;                       //重置计数寄存器
               
                ADCON0=ADCON0|0x04;                    //定时1ms启动AD采样,每周波采样20点
       
                cnt_t0++;                       //下面SWITCH的表达式的值
                cnt_D1s++;                      //时间软件记数器加1
                                  
                if(cnt_D1s>ONESEC)              //ONESEC为1000
            {   
                    M_1s=1;                     //1s时间到信息,在主程序里处理计算时间
                     cnt_D1s=0;                  //时间软件记数器清零
            }
       
            switch(cnt_t0)                  //时间分配结构,采用switch结构速度快,012345678
            {
                case 0:          break;
                case 1: M_key=1; break;
                //case 2: M_key=1; break;     //本消息表明需要做v扫描
                case 4: M_led=1; break;     //4毫秒刷新一次,本消息表明需要做LED显示状态刷新
                case 6: cnt_mb++;
                            if(cnt_mb>30)
                             {
                              M_stateBrush=1;   //是否需要将数字转换成段码位,等于1说明需要转换
                              cnt_mb=0;
                             }
                                           break;     //本消息表明需要做state显示
                case 8:  M_led=1;           //本消息表明需要做LED刷新
                             cnt_t0=0;          //将cnt_t0=0给0,这样不会溢出
                                     break;     //>=4本消息表明需要做LED刷新
       
                default:         break;
            }
        }
       
        //判断AD转换中断
        //ADIF=1;
        if(ADIF==1)                                //AD转换完成
        {
                ADIF=0;                                                       // 清除中断标志
               
                AD_Sample[AD_Point]=ADRESL+(ADRESH<<8);// 读取并存储A/D转换结果(10位,高6位为0)
                                               //2个CHAR合成一个INT数据,ADRESH乘以256,
                                               //数据已经查过8位,只是C编译器没有把数据放在ADRSSH里。                                   
                AD_Point++;
                if(AD_Point>32)                        //20point
                {
                        AD_Point=0;
                        AD_Finish_Flag=1;                               // 置AD转换完成标志
                        ADCON0=ADCON0&0x00;                       // off ad,这里是我调试时加的一句,目的是关闭AD采样
                }
        }  
}

出0入0汤圆

 楼主| 发表于 2010-7-23 08:19:08 | 显示全部楼层
回复【189楼】millwood0
-----------------------------------------------------------------------

感谢2009对的支持和帮助,在此感谢

出0入0汤圆

发表于 2010-7-23 12:30:01 | 显示全部楼层
【189楼】 millwood0
--------------------------------------------
    初中生给小学生背课本, 让你见笑了。

出0入0汤圆

发表于 2010-7-23 12:31:46 | 显示全部楼层
【190楼】 jacky1982512
---------------------------------------------------------------------
你的程序 void interrupt Time0()  频率改为1000HZ, AD采样不对, 肯定是错的
不想做过多的解释了,有兴趣的话, 用我的程序试一下


unsigned int  tmp_num1, tmp_second;

void Init_Time0_new(void)
{
OPTION=0x02;//选项寄存器设置:T0CS=0,选择内部时钟作为震荡信号;PSA=0把分频器分给T0;分频比位:8
INTCON=0xe0;//中断控制寄存器设置:GIE=1;PEIE=1; T0IE=1;即总中断开,允许第二梯队中断,允许T0溢出
TMR0=178;   //初始值计数寄存器;8y=625(定时50MS) 解得y=78   256-78=178就是初始值。
AD_Point=0;
tmp_num1=0;
tmp_second=0;
}
//   4000000/(4*8)=125000(时钟频率),   12500/78=1602(中断频率),  1602/50=32(分配到每周期的中断次数)
//   结论: 频率设定是1602Hz, 与设想相符



void interrupt Time0_new()
{    unsigned int tmp_AD;


//判断定时器中断
if (T0IF==1)
{
     T0IF=0;                         //溢出标志位清零,重置T0
     TMR0=178;                       //重置计数寄存器,  你的程序为什么是 131 ?
     //  这时临时语句, 做个秒钟
     if (++tmp_num1>1602) {
         tmp_num1=0;
         tmp_second++;
         tmp_second&=0xff;    //  tmp_second=0..255
     }

     // 在 1000/1602=0.62ms 的时间内, AD 肯定完成了, 为简便, 不做判别, 直接取AD值
     tmp_AD=ADRESL+(ADRESH<<8)&3;

     // 下面三句重复选取要的AD通道, 防止其他程序意外改变了通道,请保留
     ADCON0.CH2=0;   ADCON0.CH1=0;     ADCON0.CH0=0;  // 选通道, 语法可能错,
     ADIF=0;
     ADCON0=ADCON0|0x04;              // 启动AD采样,采样频率是1602, 不是1000


     //  程序结构做了大的调整, 前32次中断,只是取数、保存AD值,不做显示处理
     //  取完32个数之后, 再做显示,   不用关闭AD, AD_Point>=32时, 不保存数据即可

     if (AD_Point<32) {
         AD_Sample[AD_Point]=tmp_AD;
         AD_Point++;
         goto  T0IF_end;
     }
//********************************************************************************
//  这是显示部分,  中断频率是 1602(不是1000),  最好能一并显示 tmp_second, 检测是否每秒计数一次

//  ......

//  显示完成后, 正常的程序, 需要AD_Point=0; 否则不更新数据,  测试程序不需要这一语句
//********************************************************************************

  T0IF_end:   ;
    }  //if (T0IF==1)


}

出0入0汤圆

 楼主| 发表于 2010-7-23 14:36:29 | 显示全部楼层
回复【193楼】my2009
-----------------------------------------------------------------------

我仔细揣摩下。还是有种由衷的感谢,伴我度过难关。

出0入0汤圆

 楼主| 发表于 2010-7-23 14:46:23 | 显示全部楼层
回复【193楼】my2009
-----------------------------------------------------------------------

假如我测得有效值是0.16  ,请问我怎么在液晶上面显示220V显示呢?

想知道2009是怎么做的?

我是这样做的0.16K=220v
算出K=1375

那如果电压时0.17的话
0.17*1375=223.75

这样的话电压似乎一下变化那么多,是不是这样方法不好。

请问有上面好的办法没有,解决这样的问题呢

出0入0汤圆

发表于 2010-7-23 15:21:34 | 显示全部楼层
【195楼】 jacky1982512
---------------------------------------
  * (91楼) 有一个有效值的算法
  * (104楼)有这个解答
    ----------- 简单的说,  220V 时, 调整电路, 使得AD端口有效值=1.6V
                1.6V * 2* sqr(2) = 1.6 * 2 * 1.4 = 4.48V (端口的峰峰值)
                ------------ 不要又说某个电阻很大。。

出0入0汤圆

 楼主| 发表于 2010-7-23 16:10:13 | 显示全部楼层
回复【196楼】my2009
-----------------------------------------------------------------------

这个知道峰峰值以后怎么办呢?

出0入0汤圆

发表于 2010-7-23 16:27:23 | 显示全部楼层
【197楼】
-----------------------------------------------------
    *    如果  峰峰值=4.48V, 计算出的有效值在应该1.6V左右

    *  (181楼) “AD输入口的交流电压:0.16V, ”-------万用表测出的吗?

   *   单片机的AD 基准电压是多少?    5V 吗?
       换个说法   如果一直是 AD=1023(即最大值) 时,   AD端口的直流电压是多少

出5入8汤圆

发表于 2010-7-23 21:22:14 | 显示全部楼层
mark,看了帖子有比较大的启发,尤其是my2009的耐心!我测交流电压就是用的12楼的方法,比较简单,实测过,能用但线性度不太好。

出0入0汤圆

发表于 2010-7-23 21:31:34 | 显示全部楼层
楼主,干脆出点钱让my2009 帮你设计一下硬件,再编一个程序吧,你这样太累了。

出0入0汤圆

 楼主| 发表于 2010-7-24 08:35:27 | 显示全部楼层
回复【198楼】my2009
-----------------------------------------------------------------------

0.16V是万用表测试出来的,单片机的AD基准电压时5V。

如上楼所说,这个出钱的话,得多少钱呢?多了我也没有,因为也是打工的,不是老板。

混口饭吃,不容易。

我昨天晚上改了下,又测试了机组数据。我先看用上面说的方法分析下。不行再请大家分析

能否将整个工程发给你你帮我具体看下?不知道方便否?
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-9 00:17

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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