LaunchPad开发板中使用的MSP430微控制器内置10位模数转换器(ADC)模块,可将其输入引脚的模拟电压转换为数字信号。在本篇文章中,我们将向您展示如何使用MSP430 LaunchPad的ADC模块,并在Energia IDE中建立一个示例应用程序。
MSP430 LaunchPad开发板中的ADC模块的功能包括:
● 10位分辨率
● 200 ksps转换率
● 逐次逼近寄存器(SAR)
● 8个独立的输入通道
● 可编程内部参考电压
● 外部参考电压输入
● 可编程采样和保持电路
10位ADC模块将输入电压转换为0到1023之间的数字量,分别对应电压下限值VR-和电压上限值VR +。 MSP430允许用户选择不同的参考电压值,可以是电源电压(VCC)和地、外部参考输入VREF + / VEREF +和VREF- / VEREF-以及内部电压2.5V和1.5V。假设我们使用电源电压VCC(3.6V)和GND作为参考限值,读数0和1023将分别代表0和3.6V,它们之间的任何ADC读数都可以使用下面的公式计算。
在Energia中,可以使用analogReference(option)函数选择ADC参考源。该函数的参数可以是DEFAULT(VR + = VCC,VR- = 0V)、INTERNAL1V5(VR + = 1.5V,VR- = 0V)、INTERNAL2V5(VR + = 2.5V,VR- = 0V)和EXTERNAL(VR + = VREF, VR- = 0V)。通过直接访问ADC10CTL0寄存器可以实现更多选项。
施加到模拟输入引脚的电压必须在VR-到VR +的电压范围内,才能获得有效的转换结果。模拟输入引脚的绝对最大额定电压为VCC。
LaunchPad有8个模拟输入引脚,从A0到A7,如下图所示。它们没有在LaunchPad的PCB上标注。
在Energia中,analogRead()函数用于读取应用于所选通道的模拟电压,并返回0到1023之间的整数。此函数需要通道编号作为输入参数。硬件多路复用器在内部将所选通道连接到ADC模块,而其余通道保持隔离。例如,“adcreading = analogRead(A4);”命令读取施加到引脚P1.4(A4)的模拟电压,并将结果写入int类型变量“adcreading”。每次转换大约需要100微秒。
在模数转换期间,模拟信号上的噪声可能会使转换结果失真并导致错误的读数。为了提高信噪比(SNR),使用过采样和平均技术是一种很好的做法。例如,连续读取五个样本并取其平均值将得到更准确的结果而不是读取单个样本。
内部还有一些其他通道连接到ADC模块(更多信息请参见ADC10CTL1寄存器)。其中之一是内部温度传感器的输出。要读取温度传感器数据,只需使用analogRead(TEMPSENSOR);命令。
激光绊线报警器
现在我们可以使用LaunchPad的ADC功能建立示例应用程序了。我们将使用激光二极管、光敏电阻、蜂鸣器、电阻和LaunchPad来构建激光绊线报警器。
光敏电阻(LDR)是一种半导体,其电阻值根据其表面上的光强度而变化。在黑暗环境中,其电阻可以增加到兆欧,并且在光照下它的电阻降低到几百欧姆。 LDR的特征曲线如下。
LDR在我们的应用中用作激光传感器。在日光的房间里,LDR的电阻约为1-2千欧。当激光束落在LDR表面上时,其电阻降低至100-200欧姆。我们需要知道LDR的电阻以检测绊线是否被切断。由于LaunchPad的ADC模块可以读取模拟电压,我们应该将电阻信息转换为电压。为此,将串联电阻连接到LDR,并将VCC电压施加到该电阻网络。根据LDR电阻,该分压器的电压输出会发生变化。您可以在下面看到该应用程序的原理图。
当激光束落在LDR表面上时,LDR的电阻测量为约200欧姆。在这种情况下,A0输入端的电压变为[3.6V /(1.5K + 0.2K)] * 1.5K = 3.18V。当绊线被切断时,LDR的电阻将增加,并且A0输入上的电压将减小。所以我们可以说如果我们从A0输入读取的电压低于3.0V,则认为线路切断并激活警报。
代码
使用Energia IDE编写的代码如下:
// the setup routine runs once when you press reset:
void setup() {
analogRefrence(DEFAULT); // Set VR+ = VCC:3.6B, VR- = GND:0V as the upper and the lower limits
pinMode(3,OUTPUT); // set the buzzer pin mode
}
// the loop routine runs over and over again forever:
void loop() {
// read the analog voltage at A0
int sensorValue = analogRead(A0);
// convert the ADC reading to voltage
float voltage = sensorValue * (3.6 / 1023);
if (voltage < 3.0) {
// tripwire is cut: activate the buzzer with oscillation
digitalWrite(3,HIGH);
delay(150);
digitalWrite(3,LOW);
delay(100);
}
else {
// tripwire is not cut: de-activate the buzzer
digitalWrite(3,LOW);
}
}
上一篇:使用MSP430 Launchpad和GPS模块的车辆跟踪和事故警报系统
下一篇:使用德州仪器MSP430FR2633构建电容式触摸接口
推荐阅读最新更新时间:2024-10-29 15:23
设计资源 培训 开发板 精华推荐
- LT1117CM-5 用于遥感的低压差正稳压器的典型应用
- LT1641-2 演示板,具有自动重试功能的正高压热插拔控制器 (-2)
- AM1S-0307SH30Z 1W DC-DC转换器典型应用
- LTC3104EDHD 演示板、2.8A 静态电流、15V、300mA 同步降压型 DC/DC 转换器和 10mA 静态电流
- AD8657ARMZ-RL电压跟随器运算放大器典型应用电路
- LTC3555EUFD-3 按钮启动的典型应用电路,具有自动排序、反向输入电压保护和 10 秒按下并保持硬关断
- 使用 NXP Semiconductors 的 TDA8933B 的参考设计
- 使用 ON Semiconductor 的 CAT871-20ULGT3 的参考设计
- 使用 NXP Semiconductors 的 TDA1016 的参考设计
- USB二口主机应用MIC2026A-2YM双通道配电开关典型应用