交直流信号的测量.docx
- 文档编号:10088241
- 上传时间:2023-05-23
- 格式:DOCX
- 页数:19
- 大小:121.47KB
交直流信号的测量.docx
《交直流信号的测量.docx》由会员分享,可在线阅读,更多相关《交直流信号的测量.docx(19页珍藏版)》请在冰点文库上搜索。
交直流信号的测量
专业技能实训报告
题目(宋体三号,居中)
学院(全称,宋体三号,居中)
专业(全称,宋体三号,居中)
班级(宋体三号,居中)
学生(宋体三号,居中)
学号(宋体三号,居中)
指导教师(宋体三号,居中)
二〇一年月日(宋体三号,居中)
摘要
四、交流信号单片机软件设计
摘要
日常生活及学习中,我们一般需要之间测量交流信号,测量交流信号的方法有很多,而在应用单片机的测量中,我们常常用来测量直流电压,现在将介绍一种基于msp430单片机实现的交流电压和直流电压的测量方法。
系统的构成主要分硬件设计和软件设计两块来介绍。
一、实验的内容、要求
1.1实验内容
交流信号:
0.1V-10V,频率范围:
1Hz-1MHz,直流信号:
0-10V,测量精度:
1%;
1.2、实验要求
(1)设计方案中能用软件实现的尽量用软件实现,这样可以减少成本,也减少了硬件的一些干扰。
(2)本实验采用STC12C5A32AD单片机,由实验室提供了该单片机的最小系统,线路板,在该线路板上扩展了部分功能,多余的I/O口也扩展出来。
二、主要元器件简介
2.1、STC12C5A32AD芯片简介这是宏晶的mcs-51兼容单片机,最大频率可以达到35HMz,最大速度可以达到35MIPS。
这种单片机有32kBFlash,其中部分可以作为EEPROM使用;有1280BytesRAM,其中256Bytes是基本RAM,其他是扩展RAM,需要采用外部RAM方式访问;有2路10位ADC,可以简化外部硬件;多组PWM输出,可以免除外部DAC;有上电复位电路和看门狗,可以大大降低最简系统成本和体积;有多种封装,可以便于选用。
最大的优势是,STC采用mcs-51构架,拥有极大的软件优势和极多的用户群,使得这个产品的出货量很大,能够保证供货和较低成本。
三、测量原理及电路设计
3.1、数字式直流电压测量原理
数字式直流电压表的组成结构图如下图所示:
图二、数字直流电压表结构图
直流电压经过输入电路变换为合适的电压后,用A/D转换器将模拟电压变换成数字量,再由电子计数器对数字计数得到测量结果,逻辑控制电路控制电路的协调工作,在时钟的作用下顺序完成整个测量过程。
这次设计采用多的是STC12C5A32AD系列带A/D转换的单片机,电压输入型A/D,可做温度检测,电池电压检测,按键扫描,频谱检测等。
10位A/D转换结果计算公式如下:
(ADC_DATA[7:
0],ADC_LOW[1:
0]=1024*Vin/Vcc.
图三、电压测量原理框图
3.2、直流大电压信号的测量
在AD采样前面加一级分压电路即分压器,可以扩展直流电压测量的量程。
如下图所示:
U0位电压表的量程,r位其内阻,r1,r2位分压电阻U0为扩展后的量程。
3.3、直流小电压信号的测量
图四、直流小信号放大电路
对于直流小信号(20Mv-200Mv)的测量,需要设计信号放大电路将信号适当的放大再进行AD采样。
3.4、多量程分压器原理
采用这种分压电路虽然可以扩展电压表的量程,但在小量程档明显降低了电压表的输入阻抗,着在实际使用中是所部希望的,所以,实际数字万用表的直流电压档为下图所示:
他能在不降低输入阻抗的情况下达到相同的分压效果。
3.5、译码部分的调试
图7,74HC595结构图
图7,74HC595结构图
译码部分主要是检验74HC595片选和译码是否正常。
我们选用了检测数码管以及74HC595是否完好的程序进行下载并检测,这样不仅可以检测这两部分是否完好,而且还可以检测电路板及单片机是否完好。
我们通过给单片机下载检测程序,结果在数码管上显示的数字与我们预期的结果又很大的出入,经过我们一番检查也没找出原因之所在,最后我们问王老师才知道原来是我们的74HC595芯片给焊接错了,由于我焊接时出心大导致把74HC595的两根管脚短焊了,这才没有达到预期的效果,经过后来的一番改进,终于实现了检测功能。
3.6、单片机与译码部分整体调试
上面是对译码部分单独进行了调试,而74HC595和数码管的工作是要在单片机的控制下工作的,所以我们做了这样一步测试。
我为单片机编写了在数码管上动态点亮数码管并让四个数码管依次显示“0,1,2,3,到9”的程序,烧录并将单片机接入电路后发现数码管上显示的为“0000,1111,….9999.说明一切工作正常。
3.7、整机调试
在进行电路的分局部调试之后,我们又进行了系统整机调试。
首先为LM358接上5V的电压,为其他芯片接上2V的工作电压。
另外还要输入待测的模拟电压,该电压从200mV以下的电压开始输起,依次增大。
直到达到供端电压的上限5V为止,在这过程中,记录测量数据如下表所示。
由于前面的分局部调试进行得还比较顺利,因此整机调试较为顺利。
四软件设计:
对于交流采集,需要在1个工频周期内采集40个点,即时间间隔为500us,时间间隔采用定时器实现。
整个程序主要包括初始化程序和采集程序。
初始化程序主要是设置A/D采集通道和定时器A,采集程序主要是通过定时器来实现每间隔500us采集1次。
采集程序使用定时器中断服务程序实现,在定时器中断里读出数据,当采集完40个点的数据后,设置一个标志通知主程序已经采集完40个点的数据,主程序通过全局的数据缓冲区与定时器中断服务程序实现数据的交互。
单片机程序设计:
(根据TI公司所给软件的例程改编得到)
#include
charnADC_Flag;
intnADC_Count;
intADC_BUF[40];
voidInit_CLK(void);
voidInit_ADC(void);
voidInit_TimerA(void);
voidInit_ADC(void)
{
//设置P6.0为模拟输入通道
P6SEL=0X01;
//设置ENC为0,从而修改ADC12寄存器的值
ADC12CTL0&=~(ENC);
//设置参考电压分别为AVSS和AVCC,输入通道为A0
ADC12MCTL0=INCH_0+EOS;
//转换的起始地址为:
ADCMEM0
ADC12CTL1=0X00;
ADC12CTL1+=CSTARTADD_0;
//采样脉冲由采用定时器产生
ADC12CTL1+=SHP;
//转换模式为:
多通道、多次转换
ADC12CTL1+=CONSEQ_1;
//内部时钟源
ADC12CTL1+=ADC12SSEL_0;
//时钟分频为1
ADC12CTL1+=ADC12DIV_0;
ADC12CTL0+=8*0x100;
ADC12CTL0+=MSC;
ADC12CTL0+=ADC12ON;
ADC12IE=0;
//关闭各个通道的转换中断
ADC12IE|=0X00;
//使能ADC转换
ADC12CTL0|=ENC;
return;
}
voidInit_TimerA(void)
{
//选择SMCLK,清除TAR
TACTL=TASSEL1+TACLR;
//1/8SMCLK
TACTL+=ID1;
TACTL+=ID0;
//CCR0中断允许
CCTL0=CCIE;
//时间间隔为500us
CCR0=500;
//增记数模式
TACTL|=MC0;
return;
}
voidInit_CLK(void)
{
unsignedinti;
BCSCTL1=0X00;//将寄存器的内容清零
//XT2震荡器开启
//LFTX1工作在低频模式
//ACLK的分频因子为1
do
{
IFG1&=~OFIFG;//清除OSCFault标志
for(i=0x20;i>0;i--);
}
while((IFG1&OFIFG)==OFIFG);//如果OSCFault=1
BCSCTL2=0X00;//将寄存器的内容清零
BCSCTL2+=SELM1;//MCLK的时钟源为TX2CLK,分频因子为1
BCSCTL2+=SELS;//SMCLK的时钟源为TX2CLK,分频因子为1
}
interrupt[TIMERA0_VECTOR]voidTimerA_ISR(void)
{
intresults;
//关闭转换
ADC12CTL0&=~ENC;
//读出转换结果
results=ADC12MEM0;
ADC_BUF[nADC_Count]=results;
//计数器加1
nADC_Count+=1;
//采集完40个点
if(nADC_Count==40)
{
//设置标志
nADC_Flag=1;
//计数器清0
nADC_Count=0;
}
//开启转换
ADC12CTL0|=ENC+ADC12SC;
}
voidmain(void)
{
intADC_BUF_Temp[40];
inti;
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
//关闭中断
_DINT();
//初始化
Init_CLK();
Init_ADC();
Init_TimerA();
//打开中断
_EINT();
//循环处理
for(;;)
{
if(nADC_Flag==1)
{
nADC_Flag=0;
for(i=0;i<40;i++)
{
ADC_BUF_Temp[i]=ADC_BUF[i];
}
}
}
}
小结:
本设计想法采用MSP430单片机实现交流电压得采集测量。
主要通过介绍交流电压的极性转换电路、输入处理电路以及采用定时器中断服务程序进行交流电压数据的采集。
由于本人水平有限,此方法比较简单,不过具有一定的实用性。
参考文献:
1.《msp430系列16位超低功耗单片机原理与应用》利尔达策划清华大学出版社
2.《现代检测技术》周杏鹏仇国富王寿荣操家顺编著高等教育出版社
3.《msp430单片机技术白皮书》TI公司
4.交流电压测试方法介绍利尔达公司
5.《msp430单片机c语言应用程序设计》秦龙编著电子工业出版社
6、杨将新,李华军,刘东骏.2006.单片机程序设计及应用从基础到实践.北京:
电子工业出版社
7柴钰,《单片机原理及应用》,西安电子科技大学出版社,2009
8、唐晨光,唐旭伟,覃媛.2010.单片机原理与应用.北京:
清华大学出版社.
9、刘文涛,单片机语言C51典型应用及设计,人民邮电出版社,2005
10、门刚.2005.精通ProtelDXP模块范例篇.北京:
中国青年电子出版社
附录一:
摘要
日常生活及学习中,我们一般需要之间测量交流信号,测量交流信号的方法有很多,而在应用单片机的测量中,我们常常用来测量直流电压,现在将介绍一种基于msp430单片机实现的交流电压的测量方法。
系统的构成主要分硬件设计和软件设计两块来介绍。
硬件设计:
单片机电路如下图所示:
整个电路如下图:
软件设计:
对于交流采集,需要在1个工频周期内采集40个点,即时间间隔为500us,时间间隔采用定时器实现。
整个程序主要包括初始化程序和采集程序。
初始化程序主要是设置A/D采集通道和定时器A,采集程序主要是通过定时器来实现每间隔500us采集1次。
采集程序使用定时器中断服务程序实现,在定时器中断里读出数据,当采集完40个点的数据后,设置一个标志通知主程序已经采集完40个点的数据,主程序通过全局的数据缓冲区与定时器中断服务程序实现数据的交互。
单片机程序设计:
(根据TI公司所给软件的例程改编得到)
#include
charnADC_Flag;
intnADC_Count;
intADC_BUF[40];
voidInit_CLK(void);
voidInit_ADC(void);
voidInit_TimerA(void);
voidInit_ADC(void)
{
//设置P6.0为模拟输入通道
P6SEL=0X01;
//设置ENC为0,从而修改ADC12寄存器的值
ADC12CTL0&=~(ENC);
//设置参考电压分别为AVSS和AVCC,输入通道为A0
ADC12MCTL0=INCH_0+EOS;
//转换的起始地址为:
ADCMEM0
ADC12CTL1=0X00;
ADC12CTL1+=CSTARTADD_0;
//采样脉冲由采用定时器产生
ADC12CTL1+=SHP;
//转换模式为:
多通道、多次转换
ADC12CTL1+=CONSEQ_1;
//内部时钟源
ADC12CTL1+=ADC12SSEL_0;
//时钟分频为1
ADC12CTL1+=ADC12DIV_0;
ADC12CTL0+=8*0x100;
ADC12CTL0+=MSC;
ADC12CTL0+=ADC12ON;
ADC12IE=0;
//关闭各个通道的转换中断
ADC12IE|=0X00;
//使能ADC转换
ADC12CTL0|=ENC;
return;
}
voidInit_TimerA(void)
{
//选择SMCLK,清除TAR
TACTL=TASSEL1+TACLR;
//1/8SMCLK
TACTL+=ID1;
TACTL+=ID0;
//CCR0中断允许
CCTL0=CCIE;
//时间间隔为500us
CCR0=500;
//增记数模式
TACTL|=MC0;
return;
}
voidInit_CLK(void)
{
unsignedinti;
BCSCTL1=0X00;//将寄存器的内容清零
//XT2震荡器开启
//LFTX1工作在低频模式
//ACLK的分频因子为1
do
{
IFG1&=~OFIFG;//清除OSCFault标志
for(i=0x20;i>0;i--);
}
while((IFG1&OFIFG)==OFIFG);//如果OSCFault=1
BCSCTL2=0X00;//将寄存器的内容清零
BCSCTL2+=SELM1;//MCLK的时钟源为TX2CLK,分频因子为1
BCSCTL2+=SELS;//SMCLK的时钟源为TX2CLK,分频因子为1
}
interrupt[TIMERA0_VECTOR]voidTimerA_ISR(void)
{
intresults;
//关闭转换
ADC12CTL0&=~ENC;
//读出转换结果
results=ADC12MEM0;
ADC_BUF[nADC_Count]=results;
//计数器加1
nADC_Count+=1;
//采集完40个点
if(nADC_Count==40)
{
//设置标志
nADC_Flag=1;
//计数器清0
nADC_Count=0;
}
//开启转换
ADC12CTL0|=ENC+ADC12SC;
}
voidmain(void)
{
intADC_BUF_Temp[40];
inti;
//关闭看门狗
WDTCTL=WDTPW+WDTHOLD;
//关闭中断
_DINT();
//初始化
Init_CLK();
Init_ADC();
Init_TimerA();
//打开中断
_EINT();
//循环处理
for(;;)
{
if(nADC_Flag==1)
{
nADC_Flag=0;
for(i=0;i<40;i++)
{
ADC_BUF_Temp[i]=ADC_BUF[i];
}
}
}
}
小结:
本设计想法采用MSP430单片机实现交流电压得采集测量。
主要通过介绍交流电压的极性转换电路、输入处理电路以及采用定时器中断服务程序进行交流电压数据的采集。
由于本人水平有限,此方法比较简单,不过具有一定的实用性。
参考文献:
1.《msp430系列16位超低功耗单片机原理与应用》利尔达策划清华大学出版社
2.《现代检测技术》周杏鹏仇国富王寿荣操家顺编著高等教育出版社
3.《msp430单片机技术白皮书》TI公司
4.交流电压测试方法介绍利尔达公司
5.《msp430单片机c语言应用程序设计》秦龙编著电子工业出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 直流 信号 测量