MSP430内部温度传感器测试程序
- 格式:doc
- 大小:27.00 KB
- 文档页数:2
msp430实验报告msp430实验报告引言:msp430是一种低功耗、高性能的微控制器,被广泛应用于嵌入式系统和物联网设备中。
本实验报告将介绍我对msp430微控制器进行的一系列实验,包括实验目的、实验过程、实验结果以及对实验的总结和展望。
实验目的:本次实验的主要目的是熟悉msp430微控制器的基本功能和使用方法,以及学习如何进行简单的控制程序设计。
通过实验,我希望能够掌握msp430的基本操作和编程技巧,并且能够运用所学知识解决实际问题。
实验过程:在实验开始之前,我首先对msp430微控制器进行了一些基本的了解。
我了解到,msp430具有低功耗、高性能和丰富的外设接口等特点,可以满足各种嵌入式系统的需求。
接着,我根据实验指导书的要求,准备好实验所需的硬件设备和软件工具。
第一部分实验是关于GPIO口的实验。
我按照实验指导书上的步骤,将msp430与LED灯连接起来,并编写了一个简单的程序,实现了对LED灯的控制。
通过这个实验,我学会了如何配置GPIO口和编写简单的控制程序。
第二部分实验是关于定时器的实验。
我学习了如何配置msp430的定时器,并编写了一个简单的程序,实现了定时闪烁LED灯的功能。
通过这个实验,我深入了解了定时器的工作原理和编程方法。
第三部分实验是关于ADC的实验。
我学习了如何配置msp430的ADC模块,并编写了一个简单的程序,实现了对外部模拟信号的采样和转换。
通过这个实验,我了解了ADC的基本原理和使用方法。
实验结果:通过一系列实验,我成功地掌握了msp430微控制器的基本功能和使用方法。
我能够独立完成GPIO口的配置和控制、定时器的配置和编程、ADC的配置和采样等任务。
实验结果表明,msp430具有强大的功能和灵活的编程能力,可以满足各种嵌入式系统的需求。
总结和展望:通过本次实验,我对msp430微控制器有了更深入的了解,并且掌握了一些基本的操作和编程技巧。
然而,由于实验时间和条件的限制,我还没有完全发挥出msp430的潜力。
MSP430单片机的热敏电阻温度测量测量温度一般采用热敏电阻做传感器,测量的方法有R —V 转换电压测量法和R —F 转换频率测量法。
这两种方法的电路复杂且成本高,电路中很多元器件直接影响测量精度。
本文论述一种类R —F 转换频率的测量法,用NE555定时器和热敏电阻等器件构成振荡器,由MSP430单片机的捕获功能来捕获多谐振荡器输出信号的高低电平并计数,热敏电阻Rt 与捕获高低电平时的计数值的差值成正比关系。
该方法电路简单、成本低,系统流程框图如图1所示。
1负温热敏电阻PT-25E2热敏电阻温度阻值变化曲线如图2所示。
PSB 型负温热敏电阻由Co 、Mn 、Ni 等过渡金属元素的氧化物组成,经高温烧成半陶瓷,利用半导体毫微米的精密加工工艺,采用玻璃管封装,耐温性好,可靠性高,反应速度快且灵敏度高。
它采用轴向型结构,便于安装,能承受更高温度,且玻璃封装耐高低温(-50~350℃)。
2 MSP430单片机计数法测温原理以NE555定时器为核心组成典型的多谐振荡器,把被测热敏电阻Rt 作为定时元件之一接入电路中,NE555定时器输出引脚接MSP430单片机的P1.2脚(Timer_A:捕获、CCI1A输入引脚)。
系统电路如图3所示。
由NE555工作原理可知,多谐振荡器输出信号(周期性矩形波)的高电平时间(1个周期内)为:由上述测量原理可知,误差主要来源为:R1、R2精度,单片机的定时器和电容器的精度以及稳定度。
这里选用高精度(±0.001%)、温度系数小于±0.3×10-6/℃的精密金属箔电阻器。
因此当选用高精度、高稳定度的电容器,且单片机的工作频率足够高,就可以得到较好的测温精度。
3 MSP430单片机捕获原理捕获计数法的原理如图4所示。
通过MSP4.30单片机TACTL寄存器给定时器A设置一个固定的时钟频率,和计数模式(本系统设为连续模式)。
又知Timer A工作在连续计数模式时,TAR(16位)计数范围是O-FFFFH值。
MSP430内部温度传感器测试程序
//MSP430基础实验开发组件 - ADC12内部模块演示程序之内部温度传感器
//时钟设置:
////ACLK = n/a, MCLK = SMCLK = default DCO ~ 800kHz, ADC12CLK = ADC12OSC //当前演示程序功能描述:
////利用MSP430F14X内部的温度传感器,通过ADC12的通道10进行AD转换
////计算取得摄氏温度和华氏温度,通过断点在View->Watch中观察温度值
////由于定标问题, 可能会存在温度的误差
#include <msp430x14x.h>
unsigned int long temp;
unsigned int long
TemperF;
//华氏温度
unsigned int long
TemperC;
//摄氏温度
void main(void) {
WDTCTL = WDTPW +
WDTHOLD; //关闭系统看门狗 ADC12CTL0 = SHT0_8 + REFON + ADC12ON; //内部1.5V参考电压,打开ADC12模块,设置采样保持定时器
ADC12CTL1 =
SHP;
//采使用采样定时器
ADC12MCTL0 = SREF_1 +
INCH_10; //参考电压和通道选择 ADC12IE =
BIT0;
//ADC12MEM0
ADC12CTL0 |=
ENC;
//允许转换
_BIS_SR(GIE);
//开启系统中断
while(1) {
ADC12CTL0 |=
ADC12SC; //开始采样并AD转换
//oF = ((x/4096)*1500mV)-923mV)*1/1.97mV = x*761/4096 - 468
//IntDegF = (ADC12MEM0 - 2519)* 761/4096
TemperF = (temp - 2519) * 761;
TemperF = TemperF /
4096; //简化的华氏温度转换公式
//oC = ((x/4096)*1500mV)-986mV)*1/3.55mV = x*423/4096 - 278
//IntDegC = (ADC12MEM0 - 2692)* 423/4096
TemperC = (temp - 2692) * 423;
TemperC = TemperC /
4096; //简化的摄氏温度转换公式
_NOP();
//加入断点可用来观察IntDegF和IntDegC结果
}
}
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR(void) {
temp =
ADC12MEM0;
//保存转换结果
}。