0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在MSP430G2中使用ADC使用Energia IDE读取模拟电压

科技观察员 来源:circuitdigest 作者:阿斯文斯·拉吉 2022-11-16 17:24 次阅读

几乎所有嵌入式应用中使用的一个共同特性是ADC模块(模数转换器)。这些模数转换器可以从温度传感器、倾斜传感器电流传感器、柔性传感器等模拟传感器读取电压。因此,在本教程中,我们将学习如何在MSP430G2中使用ADC使用Energia IDE读取模拟电压。我们将一个小电位计连接到MSP板,并向模拟引脚提供变化的电压,读取电压并将其显示在串行监视器上。

了解 ADC 模块:

相信我,连接和编程 MSP430G2 以读取模拟电压几乎不需要 10 分钟。但是,让我们花一些时间来了解MSP板中的ADC模块,以便我们能够在所有即将推出的项目中有效地使用它。

微控制器是一种数字设备,这意味着它只能理解1和0。但在现实世界中,几乎所有东西,如温度、湿度、风速等,本质上都是模拟的。为了与这些模拟变化进行交互,微控制器使用称为ADC的模块。有许多不同类型的ADC模块可用,我们的MSP中使用的模块是SAR 8通道10位ADC。

逐次逼近 (SAR) ADC:SAR ADC在比较器和一些逻辑对话的帮助下工作。这种类型的ADC使用基准电压(可变的),并使用比较器将输入电压与基准电压进行比较,并从最高有效位(MSB)中保存差值(数字输出)。比较的速度取决于MSP运行的时钟频率(Fosc)。

10 位分辨率:该ADC是一款8通道10位ADC。这里术语 8 通道意味着有 8 个 ADC 引脚,我们可以使用这些引脚测量模拟电压。术语10位意味着ADC的分辨率。10 位表示 2 的 10 次方 (210) 即 1024。这是我们的ADC的样本步进数,因此我们的ADC值范围将从0到1023。该值将根据每步电压值从 0 增加到 1023,可以使用以下公式计算

poYBAGN0rDKAYOCjAAAZDAaJasY915.png

注意:默认情况下,在Energia中,参考电压将设置为Vcc(~3v),您可以使用analogReference()选项改变参考电压。

电路图:

在之前的教程中,我们已经学习了如何将LCD与MSP430G2接口,现在我们只需向MSP430添加一个电位计,为其提供可变电压并在LCD上显示电压值。如果您不知道LCD的接口,请回退到上面的链接并通读它,因为我将跳过信息以避免悔改。该项目的完整电路图如下。

poYBAGN0rDaAOl86AACET8FINtM846.png

poYBAGN0rDqAGsAOAADxL49zQ98313.jpg

如您所见,这里使用了两个电位计,一个用于设置LCD的对比度,另一个用于为电路板提供可变电压。在该电位器中,电位计的一端连接到Vcc,另一端连接到接地。中心引脚(蓝线)连接到引脚P1.7。该引脚P1.7将提供0V (地)至3.5V (Vcc)的可变电压。因此,我们必须对引脚P1.7进行编程以读取此可变电压并将其显示在LCD上。

在 Energia 中,我们需要知道引脚 P1.7 属于哪个模拟通道?这可以通过参考下图找到

poYBAGN0rD-AY4pcAAGlRcpsaTg495.jpg

您可以在右侧看到P1.7引脚,该引脚属于A7(通道7)。同样,我们也可以找到其他引脚的相应通道号。您可以使用从 A0 到 A7 的任何引脚来读取模拟电压,我选择了 A7。

针对 ADC 对 MSP430 进行编程:

对MSP430 进行编程以读取模拟电压非常简单。在此程序中,将读取值的模拟值并使用该值计算电压,然后在LCD屏幕上显示两者。完整的程序可以在此页面的底部找到,下面我将以片段形式解释该程序,以帮助您更好地理解。

我们首先定义LCD引脚。这些定义了 LCD 引脚连接到 MSP430 的哪个引脚。您可以参考您的连接以确保引脚分别连接

#define RS 2 #define EN 3 #define D4 4 #define D5 5 #define D6 6 #define D7 7

接下来,我们包括LCD显示器的头文件。这将调用包含有关 MSP 应如何与 LCD 通信的代码的库。默认情况下,此库将安装在Energia IDE中,因此您无需费心添加它。还要确保使用我们上面刚刚定义的引脚名称调用函数液晶。

#include //This librarey is insatlled by default along with IDE LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //Let the librarey know how we have connected the LCD

在我们的 setup() 函数中,我们只会给出一条介绍消息以显示在 LCD 屏幕上。我没有深入,因为我们已经学会了如何将LCD与MSP430G2一起使用。

lcd.begin(16, 2); //We are using a 16*2 LCD display

lcd.setCursor (0,0); //Place the cursor at 1st row 1st column

lcd.print("MSP430G2553"); //Display a intro message

lcd.setCursor(0, 1); // set the cursor to 1st column 2nd row

lcd.print("-CircuitDigest"); //Display a intro message

最后,在我们的无限循环()函数中,我们开始读取提供给A7引脚的电压。正如我们已经讨论过的,微控制器是一个数字设备,它不能直接读取电压电平。使用SAR技术,电压电平从0映射到1024。这些值称为 ADC 值,要获取此 ADC 值,只需使用以下行

int val = analogRead(A7); // read the ADC value from pin A7

这里函数analogRead()用于读取引脚的模拟值,我们在它里面指定了 A7,因为我们已将可变电压连接到引脚 P1.7。最后,我们将此值保存在名为“val”的变量中。此变量的类型是整数,因为我们只会获取要存储在此变量中的 0 到 1024 之间的值。

下一步是根据ADC值计算电压值。为此,我们有以下公式

Voltage = (ADC Value / ADC Resolution) * Reference Voltage

在我们的例子中,我们已经知道微控制器的ADC分辨率是1024。ADC 值也在上一行中找到,并存储了名为 val 的变量。基准电压等于微控制器的工作电压。当 MSP430 板通过 USB 电缆供电时,工作电压为3.6V。您还可以使用Vcc上的万用表和电路板上的接地引脚来测量工作电压。所以上面的公式适合我们的情况,如下所示

float voltage = (float(val)/1024) * 3.6; //formulae to convert the ADC value to voltage

您可能会对线浮点数 (val) 感到困惑。这用于将变量 “val” 从 int 数据类型转换为 “float” 数据类型。这种转换是必需的,因为只有当我们在浮点数中得到 val/1024 的结果时,我们才能将其乘以 3.6。如果以整数形式接收值,则始终为 0,结果也将为零。一旦我们计算了ADC值和电压,剩下的就是在LCD屏幕上显示结果,这可以使用以下行来完成

lcd.setCursor(0, 0); // set the cursor to column 0, line 0

lcd.print("ADC Val:");

lcd.print(val); //Display ADC value

lcd.setCursor(0, 1); // set the cursor to column 0, line 1

lcd.print("Voltage:");

lcd.print(voltage); //Display voltage

在这里,我们在第一行显示了ADC的值,在第二行显示了电压的值。最后,我们延迟 100 磨秒并清除 LCD 屏幕。这是每 100 密耳将更新的值。

测试您的结果!

最后,我们归结为有趣的部分,即测试我们的程序并使用它。只需按照电路图所示进行连接即可。我使用小型面包板进行连接,并使用跳线将面包板连接到 MSP430。连接完成后,我的如下所示。

然后通过 Energia IDE 将下面给出的程序上传到 MSP430 板。您应该能够在LCD上看到介绍文字,如果不使用电位计调整LCD的对比度,直到看到清晰的文字。另外,请尝试按下重置按钮。如果一切按预期工作,那么您应该能够看到以下屏幕。

pYYBAGN0rEOAC4JxAADpxYRPAb8944.jpg

现在改变电位计,您还应该看到LCD中显示的电压发生变化。让我们验证一下是否正确测量了电压 为此,请使用万用表测量 POT 中心和地面上的电压。万用表上显示的电压应接近LCD上显示的值,如下图所示。

poYBAGN0rESACGhKAADJHDZ8RRs569.jpg

就是这样,我们已经学会了如何使用MSP430板的ADC测量模拟电压。现在,我们可以将许多模拟传感器与我们的电路板连接,以读取实时参数

/*

* Reading Analog Voltage with MSP430 using Energia

*/


#define RS 2

#define EN 3

#define D4 4

#define D5 5

#define D6 6

#define D7 7





#include //This librarey is insatlled by default along with IDE

LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); //Let the librarey know how we have connected the LCD


void setup() {

lcd.begin(16, 2); //We are using a 16*2 LCD display

lcd.setCursor (0,0); //Place the cursor at 1st row 1st column

lcd.print("MSP430G2553"); //Display a intro message

lcd.setCursor(0, 1); // set the cursor to 1st column 2nd row

lcd.print("-CircuitDigest"); //Display a intro message




delay(2000); //Wait for display to show info

lcd.clear(); //Then clean it


}



void loop() {

int val = analogRead(A7); // read the ADC value from pin A7

Voltage = (ADC Value / ADC Resolution) * Reference Voltage

float voltage = (float(val)/1024) * 3.6; //formulae to convert the ADC value to voltage



lcd.setCursor(0, 0); // set the cursor to column 0, line 0

lcd.print("ADC Val:");

lcd.print(val); //Display ADC value

lcd.setCursor(0, 1); // set the cursor to column 0, line 1

lcd.print("Voltage:");

lcd.print(voltage); //Display voltage



}


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • adc
    adc
    +关注

    关注

    95

    文章

    5651

    浏览量

    539462
  • IDE
    IDE
    +关注

    关注

    0

    文章

    326

    浏览量

    46337
  • 模拟电压
    +关注

    关注

    6

    文章

    58

    浏览量

    18149
  • MSP430G2
    +关注

    关注

    1

    文章

    16

    浏览量

    12856
收藏 人收藏

    评论

    相关推荐

    Protues可不可以仿真MSP430G2系列啊?

    各位有么有MSP430G2系列的Protues仿真模型啊?
    发表于 01-24 15:36

    MSP430G2 LaunchPad的USB求解决

    MSP430G2 LaunchPad的USB求解决
    发表于 04-21 09:57

    MSP430G2系列单片机原理与实践教程完整版

    MSP430G2系列单片机原理与实践教程完整版,
    发表于 05-11 10:49

    msp430G2系列原理与实践教程

    msp430G2系列原理与实践教程
    发表于 05-13 13:19

    请问有ADS1120多机与MSP430G2通讯的例程程序吗?

    MSP430G2与多个ADS1120通讯,单独焊接一块ADS1120一切正常,连接多个ADS1120芯片后,虽然其余ADS1120的CS拉高,工作的ADS1120只能读取一次数值,请问有无多机通信案例程序以供参考。
    发表于 05-15 14:31

    如何使用MSP430G2 LaunchPad开发板驱动伺服电机

    在本篇文章,我们将主要介绍一些有关伺服电机的基础知识以及如何将伺服电机与MSP430G2 LaunchPad开发板进行连接。 MSP-EXP430G2是德州仪器提供的开发工具,也称为
    发表于 06-28 09:10

    如何将LCD液晶显示屏与MSP430G2 LaunchPad开发板进行连接

    如何将LCD液晶显示屏与MSP430G2 LaunchPad开发板进行连接?
    发表于 08-13 07:59

    如何使用MSP430G2 LaunchPad开发板驱动伺服电机?

    如何使用MSP430G2 LaunchPad开发板驱动伺服电机?
    发表于 09-29 07:08

    求一种基于MSP430G2口袋实验平台设计方案

    利用MSP430G2口袋实验平台(LaunchPad需焊接32.768kHz晶振,具体方法参见文献[3] p2)的相应模块,基于MSP430G2553 MCU,设计方案、编写程序(C语言)、进行调试
    发表于 11-29 06:13

    怎样去开发一种MSP430单片机的IDE

    怎样去开发一种MSP430单片机的IDE呢?如何使用Energia快速开发常见的MSP430/432LaunchPad呢?
    发表于 01-25 07:20

    怎样使用EnergiaMSP430进行编程呢

    MSP432在Energia上该怎样去使用?怎样使用EnergiaMSP430进行编程呢?
    发表于 01-25 07:09

    如何使用MSP430F5529ADC读取灰度传感器输出的模拟

    导语在所有的嵌入式应用几乎都会用到的一个功能就是ADC模块(模数转换器)。在这里笔者分享用CCS开发环境使用MSP430F5529ADC
    发表于 01-27 07:18

    有没有人尝试过使用MSP430G2板或任何其他发射板来对ESP-01进行通信和编程?

    有没有人尝试过使用 MSP430G2 板或任何其他发射板来对 ESP-01 进行通信和编程? 如果是这样,任何人都可以指导我如何做到这一点。 我已经用选择的通用 esp8266 板设置了
    发表于 05-16 07:25

    MSP430主控 Energia编译(似Arduino) TI坡道行驶小车(3)接线与Energia功能查找

    MSP430主控 Energia编译(似Arduino) TI坡道行驶小车(3)接线与Energia功能查找
    发表于 11-19 20:36 9次下载
    <b class='flag-5'>MSP430</b>主控 <b class='flag-5'>Energia</b>编译(似Arduino) TI坡道行驶小车(3)接线与<b class='flag-5'>Energia</b>功能查找

    MSP432在Energia上的使用(下)

    说的准备在VSCode里装Energia其实到现在还没弄,不过这里还是想介绍一下Energia的另一项功能,一个专属于MSP432的功能。发现事实证明多看官网还是有好处的,之前我在使用Ener
    发表于 11-30 12:06 0次下载
    <b class='flag-5'>MSP</b>432在<b class='flag-5'>Energia</b>上的使用(下)