基于MSP430单片机的数字电压表的设计0300VWord格式.docx

上传人:b****6 文档编号:18846678 上传时间:2023-01-01 格式:DOCX 页数:14 大小:304.48KB
下载 相关 举报
基于MSP430单片机的数字电压表的设计0300VWord格式.docx_第1页
第1页 / 共14页
基于MSP430单片机的数字电压表的设计0300VWord格式.docx_第2页
第2页 / 共14页
基于MSP430单片机的数字电压表的设计0300VWord格式.docx_第3页
第3页 / 共14页
基于MSP430单片机的数字电压表的设计0300VWord格式.docx_第4页
第4页 / 共14页
基于MSP430单片机的数字电压表的设计0300VWord格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

基于MSP430单片机的数字电压表的设计0300VWord格式.docx

《基于MSP430单片机的数字电压表的设计0300VWord格式.docx》由会员分享,可在线阅读,更多相关《基于MSP430单片机的数字电压表的设计0300VWord格式.docx(14页珍藏版)》请在冰豆网上搜索。

基于MSP430单片机的数字电压表的设计0300VWord格式.docx

下面介绍三种数字电压表的设计方案。

方案一:

这种设计方案是由模拟电路与数字电路两大部分组成,模拟部分包括输入放大器、A/D转换器和基准电压源;

数字部分包括计数器、译码器、逻辑控制器、振荡器和显示器。

其中,A/D转换器是它的核心器件,它将输入的模拟量转换成数字量。

模拟电路和数字电路是相互联系的,由逻辑控制电路产生控制信号,按规定的时序将A/D转换器中个组模拟开关接通或断开,保证A/D转换正常进行。

A/D转换结果通过计数译码电路变换成段码,最后驱动显示器显示出相应的数值。

此方案设计其优点是,设计成本低,能够满足一般的电压测量。

但设计不灵活,都是采用纯硬件电路。

很难将其在原有的基础上进行扩展。

方案二:

这种方案是利用单片机系统与模数转换芯片、显示模块等的结合构建数字电压表。

由于单片机的发展已经成熟,利用单片机系统的软硬件结合,可以组装出许多的应用电路来。

此方案的原理是模数(A/D)转换芯片的基准电压端,被测量电压输入端分别输入基准电压和被测电压。

模数(A/D)转换芯片将被测量电压输入端所采集到的模拟电压信号转换成相应的数字信号,然后通过对单片机系统进行软件编程,使单片机系统能按规定的时序来采集这些数字信号,通过一定的算法计算出被测量电压的值。

最后单片机系统将计算好了的被测电压值按一定的时序送入显示电路模块加以显示。

此方案不仅能够继承上一种方案的各种优点,还能改进上一种设计方案设计不灵活,难与在原基础上进行功能扩展等不足。

方案三:

基于MSP430G2553单片机为主控芯片,12位A/D转换器在单片机内部集成。

通过程序来控制模拟开关选择适当的电压取样电路,将输入的电压取样,取到的电压通过430单片机内部集成的A/D转换器实现模拟量向数字量的转换,然后再经过单片机程序的处理计算最终通过低功耗高亮度数码管来将电压值显示出来。

方案用模拟开关替代继电器减少了硬件的负担和准确快速性,通过程序来控制和计算电压值并显示可以达到稳定和可操作性强的目的,所以最终选择方案三。

模拟电压信号经过档位切换到不同的分压电路衰减后,经隔离干扰通过转换开关控制,若测量直流电压直接送到单片机进行A/D转换,若测量交流电压有效值经真有效值转换器后送单片机进行A/D转换,然后进行数据处理,处理后的数据送到LED中显示。

结合以上几种方案分析与比较,本设计选用第三种设计方案。

三、单元电路(含传感器选型和电路)的设计与说明

1、单片机最小系统

如上图所示,最小系统由MSP430G2553,复位电路,震荡电路组成。

MSP430G2553是系统设计的核心器件。

通过程序控制,由自带的10位AD转换电路完成电压的采集,对采集信息处理换算后,采用模拟SPI模式把电压发信息至LED显示。

单片机最小系统端端口定义如下表。

引脚号

引脚名

接口说明

备注

1

VCC

电源正端

3.3V

2

P10

OLEDSCL

OLED串行通信时钟

4

P11

OLEDSDA

OLED串行数据

5

P12

OLEDRST

OLED复位

6

P13

OLEDDC

11

P14

按键

16

RST

复位

20

GND

电源地

2、输入电路部分

输入电路部分的作用是把不同量程的被测的电压规范到测量所要求的电压值0-

±

0.2V。

9M、900K、90K、和10K电阻构成1/10、1/100、1/1000的衰减器。

输入衰减电路可由开关来选择不同的衰减率,从而切换档位。

在输入电路中当信号衰减后还应该通过直流、交流档位控制开关,控制被测信号接入相应测量通道。

交流信号经过有效值转换电路送入A/D转换电路,直流信号直接送入A/D转换电路。

3、真有效值转换电路

真有效值转换器AD736,AD736是经过激光修正的单片精密真有效值AC/DC转换器。

其主要特点是准确度高、灵敏性好(满量程为200mVRMS)、测量速率快、频率特性好(工作频率范围可达0~460kHz)、输入阻抗高、输出阻抗低、电源范围宽且功耗低最大的电源工作电流为200μA.用它来测量正弦波电压的综合误差不超过±

3%。

4、模拟开关自动切换参考电压电路

程序中通过判断不同的电压量程来决定模拟开关CD4052的通道和选通位置,然后自动切换到相应的档位,实现了0-300V的数字电压表的自动切换量程的功能。

5、电源电路

电源电路电压从P2端口输入。

通过拨动开关s控制电路的供电与断电。

MSP430G2553单片机和LED显示模块工作电压均为3.3V,所以使用1117A系列3.3V的稳压芯片进行稳压输出。

1117A33稳压芯片输入电压范围4.75~15V,输入调整率0.2%,负载调整率0.4%,最大输出电流1A.满足了本设计要求。

LED1为电源指示灯,可通过灯的亮灭来判断电源电路是否正常工作。

6、自动切换量程部分

通过计算电阻分压,将输入电压永远通过分压后得到2v的标准电压可供真有效值模块工作,然后通过模拟开关来切继电器来达到量程的自动选择。

7、LED显示接口电路

LED显示模块接口与单片机通信采用模拟SPI方式,减少了单片机I/O口的消耗,同时使电路变的更简单。

四、监控软件设计与说明

监控软件通过IAR_EW430环境来编写,主要模块程序设计思路如下。

1、主函数

主函数的流程框图如图1所示。

主函数主要是调用系统初始化函数和循环开启ADC转换,这是由于ADC10采用单通道单次转换模式,每次采样后需要重新开启ADC,才会进行下一次信号采样转换。

另外,信号的采样与处理以及电压值的显示都是通过中断来完成。

2、系统初始化函数

系统初始化的流程框图如图2所示。

该函数对看门狗的工作模式、所需的I/O口以及ADC10和OLED显示进行定义或初始化配置。

3、ADC初始化函数

ADC初始化的流程框图如图3所示。

该函数的任务是对转换控制寄存器ADC10CTL0和ADC10CTL1的初始化配置。

其中,ADC10CTL0需要配置的是ADC10的开关、采样周期、参考电压、ADC10中断使能;

而ADC10CTL1则只需要对外部采样通道和ADC的工作模式进行选择。

4、LED屏初始化

LED显示屏初始化的流程框图如图4所示。

完成对LED写命令和LED显示屏界面的初始化。

五、其它需要说明的问题

对于本电压数字智能表,测量直流和交流的时候分别对应的硬件电路略微有所不同,需要注意。

六、附录(包括电路原理图、程序流程图、程序清单、参考资料清单等)

1、整体电路原理图

 

2、程序流程图:

3、程序代码

/******************************************************************/

/*数字式交直流电压表*/

#include"

io430.h"

codetab.h"

LQ12864.h"

#defineXLevelL0x00

#defineXLevelH0x10

#defineXLevel((XLevelH&

0x0F)*16+XLevelL)

#defineMax_Column128

#defineMax_Row64

#defineBrightness0xCF

#defineX_WIDTH128

#defineY_WIDTH64

#defineuintunsignedint

#defineucharunsignedchar

#defineBIT(x)(1<

<

(x))

voidSystem_Init(void);

voidADC_Init(void);

voidDelay_nms(uintn);

longintVoltage1,Voltage2;

//全局变量Voltage1,Voltage2

uintVoltage_Range;

unsignedchar*table[]={"

0"

"

1"

2"

3"

4"

5"

6"

7"

8"

9"

};

/***********************延时函数*************************/

voidDelayms(uintn)

{

uchari;

while(n--)

for(i=0;

i<

115;

i++);

}

/*********************************************************

函数功能:

系统初始化

入口参数:

出口参数:

函数说明:

*********************************************************/

voidSystem_Init(void)

WDTCTL=WDTPW+WDTHOLD;

BCSCTL1&

=~XT2OFF;

BCSCTL3+=XT2S_2;

do

{

for(inti=0xff;

i>

0;

i--);

IFG1&

=~OFIFG;

}

while((IFG1&

OFIFG)!

=0);

BCSCTL2=0X00;

BCSCTL2+=SELM1;

BCSCTL2+=SELS;

WDTCTL=WDT_ADLY_250;

//看门狗工作在定时器模式,1s中断一次

IE1|=WDTIE;

//使能看门狗中断

P1DIR|=BIT0+BIT1+BIT2+BIT3;

//相应的位端口设置为输出

P1SEL|=BIT4;

//P1.4为A4通道

Delayms(40);

LCD_Init();

//oled初始化

ADC_Init();

//ADC初始化;

ADC初始化

voidADC_Init(void)

{

ADC10CTL0&

=~ENC;

//复位转换允许位

ADC10CTL0|=ADC10ON+ADC10SHT_0+SREF_0+ADC10IE;

//设置转换控制寄存器ADC10CTL0,ADC10ON=0x010,使ADC10内核工作

//ADC10SHT_0=0*0x800u,确定采样周期为4xADC10CLKs

//SREF_0=0*0x2000u,选择参考电压为VR+=AVCC,VR-=AVSS

//ADC10IE=0x00使对应通道转换后产生中断

ADC10CTL1|=INCH_4+CONSEQ_0;

//设置AD转换控制寄存器ADC10CTL1,INCH_0=0*0x1000u,选择通道A4

//CONSEQ_1=1*2u,设置工作模式为单通道、单次转换模式

ADC10CTL0|=ENC+ADC10SC;

//设置转换控制寄存器ADC12CTL0,ENC=0x002使转换允许位为1

//ADC12SC=0x001使采样/转换控制位为1

_EINT();

//总中断使能

/***************************ADC中断函数****************************/

#pragmavector=ADC10_VECTOR

__interruptvoidADC10_Interrupt(void)

uintdata;

data=ADC10MEM;

//将AD采样值存入data

Voltage1=(uint)(33.3*data/10.23);

//V(实际)=(VR+-VR-)*data/1023+VR-Voltage是实际电压值的1000倍

Voltage2=(uint)(33.3*data/10.23*4.0);

P1OUT|=BIT5;

Delayms(400);

P1OUT&

=~BIT5;

}

/***************************WDT中断函数****************************/

#pragmavector=WDT_VECTOR

__interruptvoidwatchdog_timer(void)

longintnum1,num2;

uintge1,fen1,bfen1,qfen1;

uintshi2,ge2,fen2,bfen2,qfen2;

num1=Voltage1;

num2=Voltage2;

ge1=(num1/1000)%10;

//个位

fen1=(num1/100)%10;

//十分位

bfen1=num1/10%10;

//百分位

qfen1=num1%10;

//千分位

//LCD_P8x16Str(60,2,table[shi1]);

LCD_P8x16Str(68,2,table[ge1]);

LCD_P8x16Str(84,2,table[fen1]);

LCD_P8x16Str(92,2,table[bfen1]);

LCD_P8x16Str(100,2,table[qfen1]);

shi2=(num2/10000)%10;

//十位

ge2=(num2/1000)%10;

fen2=(num2/100)%10;

bfen2=num2/10%10;

qfen2=num2%10;

LCD_P8x16Str(60,4,table[shi2]);

LCD_P8x16Str(68,4,table[ge2]);

LCD_P8x16Str(84,4,table[fen2]);

LCD_P8x16Str(92,4,table[bfen2]);

LCD_P8x16Str(100,4,table[qfen2]);

voidmain(void)

inti;

System_Init();

i<

8;

i++)//显示“桂林电子科技大学”

LCD_P16x16Ch(i*16,0,i);

}

for(i=10;

12;

i++)//显示“电压”

LCD_P16x16Ch((i-10)*16,2,i);

LCD_P16x16Ch((i-10)*16,4,i);

LCD_P8x16Str(32,2,"

1.V"

);

//初始化电压显示格式

LCD_P8x16Str(32,4,"

2.V"

while

(1)

//开启ADC转换

4、参考资料

[1]孙肖子.模拟电子电路及技术基础.西安电子科技大学出版社

[2]MSP430系列单片机系统工程设计与实践谢凯赵建编著

[3]洪利.MSP430单片机原理与应用实例详解.北京航空航天大学出版社

[4]王晓亮.基于MS430单片机的数字电压表的设计.科学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 职业教育 > 职业技术培训

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1