ACS712测交流电压测试ACS712测交流电压测试
/***********************************************************************
******
* 函数名: ADC_Read;
* 功能: 读取ADC转换数据函数;
* 输入: amx(0-7) 通道选择;
* 输出: none;
* 返回: 返回AD转换值,范围:0~1023
* Note: none;
* 设计者:***; 设计时间:2009-9-20; 版本号:V1.0 电压测量:交流采集在1个工频周期内采集...
ACS712测交流电压测试
/***********************************************************************
******
*
名: ADC_Read;
* 功能: 读取ADC转换数据函数;
* 输入: amx(0-7) 通道选择;
* 输出: none;
* 返回: 返回AD转换值,范围:0~1023
* Note: none;
*
者:***; 设计时间:2009-9-20; 版本号:V1.0 电压测量:交流采集在1个工频周期内采集40个点间隔500us然后通过公式计算出电压有效值或电流有效值。
************************************************************************
*****/
unsigned int ADC_Read(unsigned char amx)
{
unsigned int ad_value;
float ftmp=0;
unsigned long temp=0;
unsigned char i;
AMX0P = 8+amx; //改变AD通道
Delay_us(20);
AD0INT = 0; // 清除中断标志
//等待波形过零点
while(1)
{
AD0BUSY = 1; //开始转换
while(AD0INT==0); // 等待转换完成
AD0INT = 0; // 清除中断标志
ad_value = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
if((ad_value>=524) && (ad_value<=525))//判断是否为零点
{
TR0=1;//启动定时器0,启动A/D转换
break;
}
}
//从零点开始采集40个点---定时器0每500us溢出触发A/D中断
for(i=0;i<40;i++)
{
//ad[i]=ad_value;
while(AD0INT==0); // 等待转换完成
AD0INT = 0; // 清除中断标志
ad_value = (unsigned int)ADC0H*256 + ADC0L; // 读取并计算AD值
if(ad_value>=525)
ad_value = ad_value - 525;
else
ad_value = 525 - ad_value;
//ftmp = ad_value * 706.316 / 1024;//调试方式:测试输入电压对应的运放输出
电压
ftmp = ad_value * 2.4 / 10.24;
temp +=(ftmp*ftmp);
}
TR0=0;//关闭定时器0,停止A/D转换
AD0INT = 0; // 清除中断标志
TH0 = 0xfc; ////定时器赋初值---每500US溢出一次
TL0 = 0x89;//定时器赋初值
temp = temp/40;
temp=sqrt(temp);//开平方
//Send_Data(temp);Uart0_SendString(" ");
return temp;
}
本文档为【ACS712测交流电压测试】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。