专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
PIC单片机
急:谁有用单片机测量交流电压的程序?
2020-02-06 09:46
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
51单片机
9893
98
98
谁有用单片机测量交流电压的程序?220V电压经过处理,电压抬高了2.5V,问各位大侠客有类似的经验。
我现在做的测量的很不准确。
电压一会是220,一会是250,一会是180,一会是012V
我很头疼?
下午大侠帮忙。
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
lsw0136
1楼-- · 2020-02-17 02:03
mark
加载中...
my2009
2楼-- · 2020-02-17 03:52
回复【84楼】jacky1982512
-----------------------------------------------------------------------
你的算法基本正确, 但要考虑是否有一个基值, 比如, 无电流时 AD=2, 电流1A时,AD=10,
则电流2A时 AD=18时,不清楚你的AD在0A时是否有非零值, 要考虑这种情况
加载中...
jacky1982512
3楼-- · 2020-02-17 04:42
精彩回答 2 元偷偷看……
加载中...
jacky1982512
4楼-- · 2020-02-17 06:34
现在同标准电流测试:
1A时候,对应AD值是13
2A时候,26
3A------39
就这样,到了4.7A就不成线性了。
请问各位大侠,在各位做项目中,
都是怎么把AD值转换成要显示的电流值的呢?
加载中...
xcodes
5楼-- · 2020-02-17 06:49
typedef struct _Current_
{
uchar OffSet; //偏置
uchar Channel; //通道
uint Max; //峰值
uint Min; //谷值
float Gain; //增益
uint ADCSum; //ADC和
uint ADCVar; //本次ADC值
uint ADCAver; //平均值
uint RealVar; //实际电流值
uchar ADC_Times; //ADC_采样次数
}Current;
Current PhaseA,PhaseB,PhaseC;
void Get_Current_ADC_Var(Current *SelectPhase)
{
uint Temp;
Temp=Get_ADC_Result(SelectPhase->Channel);
if(Temp<SelectPhase->Min)
SelectPhase->Min=Temp;
if(Temp>SelectPhase->Max)
SelectPhase->Max=Temp;
SelectPhase->ADCVar=Temp;
SelectPhase->ADCSum+=Temp;
SelectPhase->ADC_Times++;
SelectPhase->ADCAver=(SelectPhase->ADCSum-SelectPhase->Max-SelectPhase->Min)/(SelectPhase->ADC_Times-2);//去除峰值,谷值 后得到平均值
if(SelectPhase->ADCAver<=SelectPhase->OffSet)//小于偏置 为0
{
SelectPhase->ADCAver=0;
}
else
{
SelectPhase->ADCAver-=SelectPhase->OffSet; //减去零偏
}
SelectPhase->RealVar=SelectPhase->ADCAver/SelectPhase->Gain;//乘以增益得到真实值
SelectPhase->Max=0;//复位最大值
SelectPhase->Min=0x3ff;//复位最小值
SelectPhase->ADCSum=0;//复位ADC和
SelectPhase->ADC_Times=0;//复位采样次数
}
加载中...
xcodes
6楼-- · 2020-02-17 07:53
以上是我从我的 程序里面扣出来的
去基本上是 去除 峰值 谷值 后得到平均值 然后减去零偏 然后乘以增益 就得到实际值
加载中...
首页
上一页
10
11
12
13
14
15
16
17
下一页
一周热门
更多
>
相关问题
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
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
-----------------------------------------------------------------------
你的算法基本正确, 但要考虑是否有一个基值, 比如, 无电流时 AD=2, 电流1A时,AD=10,
则电流2A时 AD=18时,不清楚你的AD在0A时是否有非零值, 要考虑这种情况
1A时候,对应AD值是13
2A时候,26
3A------39
就这样,到了4.7A就不成线性了。
请问各位大侠,在各位做项目中,
都是怎么把AD值转换成要显示的电流值的呢?
{
uchar OffSet; //偏置
uchar Channel; //通道
uint Max; //峰值
uint Min; //谷值
float Gain; //增益
uint ADCSum; //ADC和
uint ADCVar; //本次ADC值
uint ADCAver; //平均值
uint RealVar; //实际电流值
uchar ADC_Times; //ADC_采样次数
}Current;
Current PhaseA,PhaseB,PhaseC;
void Get_Current_ADC_Var(Current *SelectPhase)
{
uint Temp;
Temp=Get_ADC_Result(SelectPhase->Channel);
if(Temp<SelectPhase->Min)
SelectPhase->Min=Temp;
if(Temp>SelectPhase->Max)
SelectPhase->Max=Temp;
SelectPhase->ADCVar=Temp;
SelectPhase->ADCSum+=Temp;
SelectPhase->ADC_Times++;
SelectPhase->ADCAver=(SelectPhase->ADCSum-SelectPhase->Max-SelectPhase->Min)/(SelectPhase->ADC_Times-2);//去除峰值,谷值 后得到平均值
if(SelectPhase->ADCAver<=SelectPhase->OffSet)//小于偏置 为0
{
SelectPhase->ADCAver=0;
}
else
{
SelectPhase->ADCAver-=SelectPhase->OffSet; //减去零偏
}
SelectPhase->RealVar=SelectPhase->ADCAver/SelectPhase->Gain;//乘以增益得到真实值
SelectPhase->Max=0;//复位最大值
SelectPhase->Min=0x3ff;//复位最小值
SelectPhase->ADCSum=0;//复位ADC和
SelectPhase->ADC_Times=0;//复位采样次数
}
去基本上是 去除 峰值 谷值 后得到平均值 然后减去零偏 然后乘以增益 就得到实际值
一周热门 更多>