专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
急:谁有用单片机测量交流电压的程序?
2020-02-06 09:46
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
9776
98
98
谁有用单片机测量交流电压的程序?220V电压经过处理,电压抬高了2.5V,问各位大侠客有类似的经验。
我现在做的测量的很不准确。
电压一会是220,一会是250,一会是180,一会是012V
我很头疼?
下午大侠帮忙。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
jacky1982512
1楼-- · 2020-02-12 15:40
回复【56楼】zchong
------------------------------------------------------------------
感谢你的回复。
加载中...
jacky1982512
2楼-- · 2020-02-12 19:06
波形知道是什么:是一正弦波被抬高了2.5V。就是这个波形。
加载中...
szduan
3楼-- · 2020-02-12 21:11
精彩回答 2 元偷偷看……
加载中...
my2009
4楼-- · 2020-02-12 22:33
请问楼主, 你的测试中, 固定AD输入在 1.0V, 2.0V , 5.0V 时, 程序能正确显示这些值吗?
如果不能, 修改程序, 直到能正确显示为止,
如果能, 试一下手动调压在 1.0V .. 2.0V 之间不断变化, 能否正确显示
电路图中, 有负压给到单片机吗?
另外你给出程序, 还不如给出程序框图(或编程思路说明), 别人更能理解你的思路
加载中...
odqqdo
5楼-- · 2020-02-13 03:35
引用图片【楼主位】qing999
-----------------------------------------------------------------------
(原文件名:AD检测电路.JPG)
/*************************************************************************************/
void __attribute__((__interrupt__)) _ADCInterrupt( void )
{
// static unsigned int i;
unsigned int j;
IFS0bits.T3IF = 0;
IFS0bits.ADIF = 0; //清中断标志
i++;
adresult[0]=ADCBUF0; //2次RB4转换的结果和,AN4基准电压输入
//adresult[0]=adresult[0]>>1; //平均值
temp
=adresult[0];
adresult[1]=ADCBUF1;
//adresult[1]=adresult[1]>>1;
adresult[2]=ADCBUF2;
adresult[3]=ADCBUF3;
//adresult[3]=adresult[3]>>1;
adresult[4]=ADCBUF4;
if (adresult[2]>adresult[0])j= adresult[2]-adresult[0]; //
else j= adresult[0]-adresult[2]; //计算绝对值
if (da<j)da=j; //取最大值
Sum1=j*j+Sum1;
if (i>=32)
{
Sum=Sum1;
flag.bits.AD_ok=1;
Sum1=0;
youxiao=da*7; //有郊值等于峰值的0.707倍.两种算法
youxiao=youxiao/10;
da=0;
i=0;
time1++;
if (time1>=50) {
time1=0; //50HZ时间测试
time2++;
}
}
/* 设置标志更新LCD */
}
/***************************************************************/
加载中...
odqqdo
6楼-- · 2020-02-13 06:58
没发完,上面那个是AD中断程序
下面是主程序处理部份
if (flag.bits.AD_ok)
{
Sum=Sum>>5 ; //除以32
result=(int)sqrt( Sum );
result-=2; //修正结果误差
result=(result*625)>>7; //乘以5000/1024
flag.bits.AD_ok=0;
}
另外,你用万用表量下运放输入端交直流电压,和运放输出端交直流电压.
还有把AD输入端接2.5V直流,看程序算出的结果正确不,先要搞清楚是程序算法问题,还是硬件电路问题
加载中...
首页
上一页
8
9
10
11
12
13
14
15
下一页
最后一页
一周热门
更多
>
相关问题
PIC单片机不同的IO口驱动74HC573驱动共阴极的数码管,有的段不亮
1 个回答
一种简单精确的pic延时方法
21 个回答
谁熟悉PIC的产品发布时间的,帮看看PIC18F47K40啥版本IDE能开发
12 个回答
求AN1078对应的源代码下载地址
5 个回答
PIC单片机应用技巧
4 个回答
串口无法连续接收数据
2 个回答
求助:dsPIC33F串口通信,如何发送字符串
4 个回答
PIC45K40 IOC(interrupt-on-change)功能
2 个回答
相关文章
一种用PIC单片机主时钟驱动的老式挂钟
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
PIC单片机
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
------------------------------------------------------------------
感谢你的回复。
如果不能, 修改程序, 直到能正确显示为止,
如果能, 试一下手动调压在 1.0V .. 2.0V 之间不断变化, 能否正确显示
电路图中, 有负压给到单片机吗?
另外你给出程序, 还不如给出程序框图(或编程思路说明), 别人更能理解你的思路
-----------------------------------------------------------------------
(原文件名:AD检测电路.JPG)
/*************************************************************************************/
void __attribute__((__interrupt__)) _ADCInterrupt( void )
{
// static unsigned int i;
unsigned int j;
IFS0bits.T3IF = 0;
IFS0bits.ADIF = 0; //清中断标志
i++;
adresult[0]=ADCBUF0; //2次RB4转换的结果和,AN4基准电压输入
//adresult[0]=adresult[0]>>1; //平均值
temp=adresult[0];
adresult[1]=ADCBUF1;
//adresult[1]=adresult[1]>>1;
adresult[2]=ADCBUF2;
adresult[3]=ADCBUF3;
//adresult[3]=adresult[3]>>1;
adresult[4]=ADCBUF4;
if (adresult[2]>adresult[0])j= adresult[2]-adresult[0]; //
else j= adresult[0]-adresult[2]; //计算绝对值
if (da<j)da=j; //取最大值
Sum1=j*j+Sum1;
if (i>=32)
{
Sum=Sum1;
flag.bits.AD_ok=1;
Sum1=0;
youxiao=da*7; //有郊值等于峰值的0.707倍.两种算法
youxiao=youxiao/10;
da=0;
i=0;
time1++;
if (time1>=50) {
time1=0; //50HZ时间测试
time2++;
}
}
/* 设置标志更新LCD */
}
/***************************************************************/
下面是主程序处理部份
if (flag.bits.AD_ok)
{
Sum=Sum>>5 ; //除以32
result=(int)sqrt( Sum );
result-=2; //修正结果误差
result=(result*625)>>7; //乘以5000/1024
flag.bits.AD_ok=0;
}
另外,你用万用表量下运放输入端交直流电压,和运放输出端交直流电压.
还有把AD输入端接2.5V直流,看程序算出的结果正确不,先要搞清楚是程序算法问题,还是硬件电路问题
一周热门 更多>