基于MSP430单片机的交流电压测量设计

基于MSP430单片机的交流电压测量设计
基于MSP430单片机的交流电压测量设计

基于MSP430单片机的交流电压测量设计 东南大学仪器科学与工程学院

许欢 摘要:在单片机的一些测量中,有时候需要我们直接测量交流信号,

现介绍一种基于

msp430

单片机实现的交流电压的测量方法。

关键字:MSP430单片机,交流电压,测量,中断

日常生活及学习中, 我们一般需要之间测量交流信号, 测量交流信号的方法有很多, 而在 应用单片机的测量中,我们常常用来测量直流电压,现在将介绍一种基于 msp430单片机实 现的交流电压的测量方法。 系统的构成主要分硬件设计和软件设计两块来介绍。

硬件设计:

为了保证硬件电路设计的通用性, 采用单级性电压测量的方法,

将输入的双极性电压转换

成单级性电压进行测量。

整个电路主要包括极性转换电路和输入处理电路。

其中,极性转换

电路主要由放大电路实现,在此我采用

MCP 601放大芯片。

MCP601芯片:(Microchip 公司的一款高性能的放大芯片)

Vcc 管脚:电源管脚 GND 管脚:接地管脚 VIN-管脚:负输入端管脚 VIN+管脚:正输入端管脚 OUT 管脚:输出管脚 极性转换电路设计:

在进行A/D 转换时,我们一般会采用芯片的工作电压作为 A/D 转换的参考电压。由于一般 芯片的工作电压都为正电压, 而我们在这里要测量交流电压, 所以要对输入的交流信号进行 极性转换,将双极性变成单级性。下图为极性转换电路:

如图所示,该芯片共有 8个管脚,

在极性转换电路中,ADOUT 为输出信号。输出信号是在输入信号 ADIN 的基础上叠加了一

个直流分量,调节上面的

Vref 的值就可以改变直流分量的值。如果调节

Vref 使直流分量的

值为1.5V ,并且此时输入信号是幅值为 1.5V 的交流正弦信号,那么输出信号就为最大值为

3V ,最小值为0V 的单级性正弦信号。在极性转换电路基础上我们将很容易设计出我们要的 输入电路。 输入处理电路:

在极性转换电路基础上,输入处理电路需要将 220V 的交流电压信号变为幅值为

1.5V 左右

的交流信号,此外,还需要为

MCP 601提供适当的参考电压信号。电路如下图所示:

从所设计的电路中我们可以得到, 首先通过变压器将 220V 的交流电压降成 8V 的交流电压,

再经过极性转换电路将双极性的交流电压转换为单级性的交流电压。电路中的 R405电位器

主要用于调节参考电压, R404电位器用于调节交流输入电压的幅度。

经过上面电路的处理,

可以将输入的交流电压转换成

0?3V 的单级性交流电压,这样很容易使用

MSP430单片机

自带的A/D 转换通道进行模拟量采集,从而实现交流电压的测量。 在上面的电路中,电压采用

3V 供电,电源芯片采用 TPS76030,实现电路如下图所示:

R403 0.0 4.19K 厂

C4M

R401 4 721t

C404

O.O47nf

tic

NC _S O.lnf ^C4C2 V1H-

Vcc

7 J

■ ? r

riTTT —s

UU 1

GHD HC

_5

2

kDOUT

琴曲

3

MOI~ —斗

I 01肚

vcc

zz^ClO?

0.1 Ilf

单片机电路如下图所示:

f

l

IN OUT

EH

GHD NC

5

4

2

CI03 aapf —

^cioQ

0.1 nf

cin

i

-一啓

1*1

取述■

T—

C10J (I(if JJ

D1

.

11-■4i M n

f

l

—1「■

1

n

3

-

fc

n

A

O

l B

O S

I

K

14

L

Pit

Pi.” 叫

Pi 7 '血

好:a

MOPIICUL g余

讣用.F屈Pl?

nl m?

PIS Pl *

MS国巳ZEES&SSS国国国国因

平FPPPPFPF皆n:?

整个电路如下图:

+

J

1

o

_

?

*

*

i

J

?

?

1

c

-

>

*

+S 矿

JJMH 71

+*

T

J

41

4i

1?

TT

3*

37

4

软件设计:

对于交流采集,需要在

1个工频周期内采集 40个点,即时间间隔为 500US ,时间间隔

采用定时器实现。整个程序主要包括初始化程序和采集程序。

初始化程序主要是设置 每间隔500US 采集1次。采集程序使用定时器中断服务程序实现, 当采集完

40个点的数据后,设置一个标志通知主程序已经采集完 过全局的数据缓冲区与定时器中断服务程序实现数据的交互。

单片机程序设计:(根据TI 公司所给软件的例程改编得到)

#include vmsp430x14x.h>

char nADC_Flag; int nADC_Count; int ADC_BUF[40];

void lnit_CLK(void); void Init_ADC(void); void Init_TimerA(void);

void Init_ADC(void) {

〃设置P6.0为模拟输入通道

P 6SEL = 0X01;

〃设置ENC 为0,从而修改 ADC12寄存器的值

4l f d I

亡 lAlpT.

=,,1■: (>*

T?■wli

clhE

卜和 r*l Jj + I

r IT

I IUEH11 北 I ±-^Z±j r.JM-|

川川I 川山川

U.Li-*|

I l-ll-l

ipnT r

1 ■

.I l s

zf_n.

J

■ -1-1 . _■丄W

3

iOOill

1 "g 怦s

> iH. _L

w

ton

:|r ' J .

I-

-if — =1

MJ

J

UCTwi

F

4一

13

■i|

~iZ

^Ifrl

RC

A/D 采集通道和定时器 A ,采集程序主要是通过定时器来实现 在定时器中断里

读出数据, 40个点的数据,主程序通

ADC12CTL0 &= ~(ENC);

II设置参考电压分别为AVSS和AVCC,输入通道为A0

ADC12MCTL0 = INCH_0 + EOS;

II转换的起始地址为:ADCMEMO

ADC12CTL1 = 0X00;

ADC12CTL1 += CSTARTADD_0;

〃采样脉冲由采用定时器产生

ADC12CTL1 += SHP;

II转换模式为:多通道、多次转换

ADC12CTL1 += CONSEQ_1;

〃内部时钟源

ADC12CTL1 += ADC12SSEL_0;

〃时钟分频为1

ADC12CTL1 += ADC12DIV_0;

ADC12CTL0 += 8 * 0x100;

ADC12CTL0 += MSC;

ADC12CTL0 += ADC12ON;

ADC12IE = 0;

II关闭各个通道的转换中断

ADC12IE |= 0X00;

〃使能ADC转换

ADC12CTL0 |= ENC;

return;

}

void Init_TimerA(void)

{

II 选择SMCLK ,清除TAR TACTL = TASSEL1 + TACLR;

II 1I8 SMCLK

TACTL += ID1;

TACTL += ID0;

II CCR0 中断允许

CCTL0 = CCIE;

II 时间间隔为500us

CCR0 = 500;

II 增记数模式

TACTL |= MC0; return;

}

void Init_CLK(void)

{

unsigned int i;

BCSCTL1 = 0X00; //将寄存器的内容清零

//XT2 震荡器开启//LFTX1 工

作在低频模式//ACLK 的分频因

子为1

do

{

IFG1 &= ~OFIFG;

for (i = 0x20; i > 0; i--);

}

while ((IFG1 & OFIFG) == OFIFG);

// 清除OSCFault 标志

// 如果OSCFault =1

BCSCTL2 = 0X00; BCSCTL2 += SELM1;

BCSCTL2 += SELS; }

//将寄存器的内容清零

//MCLK 的时钟源为TX2CLK ,分频因子为1 //SMCLK 的时钟源为TX2CLK ,分频因子为1

interrupt [TIMERA0_VECTOR] void TimerA_ISR(void) {

int results;

// 关闭转换

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;

开启转换

void main(void)

{

int ADC_BUF_Temp[40];

int i;

//关闭看门狗

WDTCTL = WDT PW + WDTHOLD; //关闭中断 _DINT();

//初始化 lnit_CLK(); lnit_ADC(); Init_TimerA();

//打开中断 _EINT(); //循环处理 for(;;) {

if(nADC_Flag == 1) {

nADC_Flag = 0; for(i = 0;i < 40;i++) {

ADC_BUF_Tem p[i] = ADC_BUF[i]; }

小结: 极性转换电路、输入处理电路以及采用定时器中断服务程序进行交流电压数据的采集。 本人水平有限,此方法比较简单,不过具有一定的实用性。 本设计想法采用 MSP430单片机实现交流电压得采集测量。 主要通过介绍交流电压的 由于

参考文献: 1《msp430系列16位超低功耗单片机原理与应用》 2. 《现代检测技术》周杏鹏

仇国富王寿荣操家顺 3. 《msp430单片机技术白皮书》 TI 公司 4. 交流电压测试方法介绍 利尔达公司 5. 《msp430单片机c 语言应用程序设计》秦龙 编著

利尔达策划清华大学出版社 编著高等教育出版社

电子工业出版社

两汉:诸葛亮

出师表

相关主题
相关文档
最新文档