讲座视频第二部分 - 连接输入和输出 - LED

展开字幕 关闭字幕 时长:18分56秒
评论 收藏 分享 上传者:hi5
大家好,我是 Jon Valvano。 在本次讲座中,让我们讨论一下发光二极管。 我们将从电压、电流和功率等 基本原理开始。 我们将向您展示如何使用电路LED 连接到 LaunchPad 然后,一旦我们将它连接好, 我们将编写一组函数来使用 LED 并将这组函数嵌入到软件 驱动程序中 -- 驱动程序就是一系列函数的集合。 最后,我们将在本次课程中讨论 LED 对于解决机器人难题而言是一项多么重要的功能。 好,让我们开始吧。 让我们从电阻器这样简单的东西开始, 怎么样? 那么,如果这是一个 1 千欧的电阻器 -- 我将执行一个示例 -- 如果我在该电阻上施加 2V的电压,我们 知道将有电流流过。 欧姆定律告诉我们, 在电压电阻确定的情况下,就能计算出电流 那么,假设连接的电压为 2V, 我可以看到它将生成 2mA的电流 电流的方向为从电压正极流向负极。 在这一点上,电阻是线性的 -- 欧姆定律。 LED 不是电阻,对吧? 它是二极管。 因此它具有两种属性,我们马上 就会看到。 首先,它是有极性的。 换句话说,阳极是正极侧,阴极 是负极侧。 因此,如果我在它两端施加2V的电压,将会产生电流 但是,如果我按照另一个方向施加 2 伏的电压 -- 以相反的方向-- 将不会产生 电流,因为它处在曲线这个地方。 因此,当我增加二极管上的电压时, 它最终会达到阈值,然后开始增加。 那么 LED 的第二个方面 是它是指数性的。 该关系是指数性的。 因此,它不仅是极化的,而且是非线性的。 现在,我们要做的是 控制LED的输入功率。 功率是电压乘以电流 这将设置它的亮度。 例如,如果我对该点感兴趣 -- 这里是一组真实 LED 电压/电流关系。 我对这个红色的很感兴趣。 我可以看到我在这里有一个运行点,它的 电流为 1mA -- 电压为 1.6V。 如果我可以达到该点,您可以 看到我将得到 1.6毫瓦的电功率。 该电功率足以使该 LED 开启。 再说一次,亮度与功率相关。 关于连接LED,我必须知道的另一件事是 由于 LED 是极化的,因此我必须确定 哪一侧是阴极以及哪一侧是阳极。 阳极是正极侧, 它是两根引脚中较长的一端 因此大电压连接到较长的 引脚 让我们接着连接这个 1.61 毫安的 LED 这就是我们在这里要做的事情。 但是,正如您看到的,由于是非线性的,该二极管 上的 3 伏电压实际上会毁坏它。 因此我们需要设置该 LED 电压和电流,以便它能够 正常工作。 我们将通过放置一个与该 LED 串联的电阻器 来保护它。 现在,它已经连接到微控制器 因此软件可以开启和关闭它。 例如,如果软件设置该输出端口输出 高电平 -- 我们将在该点得到 3.3V电压。 我希望发生的是, 该电压在 LED 上产生电压降为 1.6 伏。 现在,这一切必须相符。 因此,如果那是 3.3V,而这里 是 1.6V,那么施加在 电阻上的电压必须是1.7V。 现在,我可以使用欧姆定律来选择电阻值, 以便 1.7V可生成1mA的电流 -- 这是欧姆定律决定的。 这会将我的电阻器设置为 1.7 千欧。 现在证明 1.7 千欧是一个不通用的电阻值。 如果我到商店并且想买一个, 我会发现一个很接近的电阻器,它是 1.6 千欧。 它将比 1 毫安要亮一点,但它 会很好地工作。 那么,如果我要大致实现它,对于 电路中的任何LED,我会这么做。 我需要的电阻器值将是微控制器 输出引脚电压减去 我要设置的二极管电压 -- 我要为运行点设置的二极管 电压,然后除以我要 得到的二极管电流 那么,这是用于连接该类型的 LED 一般公式。 一切都会很好地工作,只要我的 电流小于 6 毫安即可,因为这是 我能够从MSP432 的引脚 获取的最大电流 我们要将这称为正逻辑, 因为输出高电平转换成了 LED 开启。 如果输出是低电平 -- 如果这是 0 伏 -- 即 0 伏。 没有电流 这将使 LED 关闭。 那么,该高电压实现开启、低电压 实现关闭的现象被分类为正逻辑。 请注意,有时我们希望使用负逻辑 我们希望采用另一个方向的连接方式。 我们将使用完全一样的 LED 但现在我要调换输出和 电源的位置。 那么,现在我要将一端连接到 3.3V, 而不是接地。 电阻器现在与 LED串联,但 LED 的底部 -- 阴极 --连接到 控制器的输出端口。 那么,如果我希望开启它, 我会设置输出为低电平。 我会在这里得到 0 伏,在那里得到 1.6 伏,在那里得到 1.7 伏, 并且使用完全一样的公式 来生成所需的电阻器值,1.7 千欧。 再说一次,这是负逻辑,因为 低电压导致 LED导通。 而高电压 -- 如果这是 3.3 伏、就没有 电流流过LEDLED 会截止。 因此这是负逻辑。 请注意,有时 LED电流大于 6 毫安。 例如,这里是一个不同的 LED 如果我对某个运行点感兴趣 -- 好的,那么在这里的特定接口中,我将 尝试达到 10毫安、1.8 伏 -- 10 毫安、1.8 伏设定点。 我们得到的公式与先前得到的公式非常类似。 但是我们 -- 由于高电流,我们 需要一个驱动器 因此我们可以使用 BJT,或者我们可以使用开集电路 这是一个开路集电极,不是栅极,这样一来, 如果微控制器为高电平-- 如果这是3.3V-- 驱动器开启,我将在那里得到0.5伏的电压。 现在我可以做与先前相同的事情, 让我们大致执行它。 我需要的电阻值,它将会设置电流大小 3.3V减去这里的二极管电压 -- 这是我希望设置的二极管电压 -- 减去驱动器这里的输出 低电压,然后除以我尝试 达到的设定点电流 那么,我大致就是这么做的。 您可以看到,在本例中我有一个 100 欧的电阻器。 因此,如果您的 LED 可以驱动大于 6mA的 电流,这是对的。 现在,MSP432 上有四个引脚 -- 端口P2.3、端口P2.2、端口P2.1和端口P2.0。 这四个引脚可以驱动高达 20 毫安的电流 但所有其他引脚具有6 毫安的最大电流 好,现在我们已经把它连好了, 让我向您展示如何编写软件 那么,在这个特定的软件包中,我要 尝试解决的问题是, 端口P2.0连接到一个低电流、高效 LED 就像这样. 那么我要将微控制器端口P2.0连接到 一个 LED 那么初始化我, 需要 -- 将方向寄存器设置为高电平。 现在,如果我希望具有大电流驱动能力, 我还将设置 DS 寄存器。 它用于这四个具有20mA驱动能力 引脚 现在,输出到 LED 的过程包含三个步骤。 我需要读取输出的所有位, 修改我感兴趣的位, 然后写输出寄存器。 这样,我就不会影响其他的位 -- 在本例中,不会影响端口P2的其他7位。 因此,它在这里看起来的样子是 -- 我将首先读取所有位。 现在,在本例中,我要开启 LED 在这里的示例中,我要设置该位。 因此,第二步是设置我想要开启且 位于临时变量中的位。 第三步是将数据写到输出寄存器。 因此,您可以看到它的结果 当BIT0变为高电平,LED 开启, 但这个端口相应寄存器的其他 7 个位不受影响。 现在,如果我想清除某个位,我就执行同样的三个步骤。 我要将它们全部读出来。 现在清除我希望清除的位。 在本例中,我将清除BIT0。 再次重新设置寄存器。 仍然保持其他 7 个位不变。 这是您的 LaunchPad 开箱即用。 它上面已经有 LED 您可以在这里看到,它的端口P1.0上 有一个低电流 LED,它的端口P2上连接了 三个高电流 LED 那么,对于该三色 LED 我们必须要设置这三个引脚的 20mA 电流输出模式。 那么让我们为 LaunchPadLED 编写驱动程序,以便 您可以使用它们。 再说一次,这里的驱动 函数将配置这个需要高电流驱动的-- 三色 LED 三个 LED,它们分别连接到端口P2.2、P2.1 和 P2.0。 我们要将方向寄存器设置为高电平,这 意味着它是输出。 我们要将驱动强度设置为高,这意味着它现在 可以输出20mA驱动电流 然后我们将首先关闭 LED 现在,要实现这个动作,我们只需向P2端口 写入 3 个位。 虽然它非常简单, 但您可以看到这里的代码 -- 它不仅影响我希望更改的 3 个位,而且 还影响了其他我不想改变的 5 个位。 因此这种方式简单但不可取 那么,如果我希望以恰当的方式做同样的事 -- 换句话说,如果我希望将Port2 的低位的3 个位设置为高电平, 以实现输出 -- 我将使用读取、修改、写入 --或者“或”、“等于”使其他 5 个位 保持不变。 这会在不影响其他5 个位的情况下设置 低位的 3 个位。 我要再次清除全部 3 个位 -- 全部 3 个低位 --不影响其他 5 个位。 现在写入任意数据会 复杂一点。 那么,我们来解决该问题。 第一步是读取。 这里的第一步是,我将看到 -- 我将获取端口P2的8位7、6、5、4、3、2、1、0 -- 我将获取现有的位。 它是一个 8 位端口。 然后我将以1 1 1 1 0 0 0 结束它。 这样的结果是,它将为我提供 位 7、6、5、4、3 --我不关心其他 5 个位。 但它将使这些位变为 0 那么,现在当我使用我的数据命令它时 -- 再次假定数据中具有这些位 -- 希望结果是保持 7、6、5、4、3为原来的数据 加上 x、y、z 参数 -- 假设该 3 位数是 x、y、z。 我们知道这3个参数代表了BIT2、BIT1、BIT0 -- 我们可以看到,一旦我这么做,现在我具有 5 个不变的位,加上 3 个需要改变的位。 然后,当我重新配置输出寄存器的时候,我就对它产生了影响。 现在,如果您希望自己来执行它, 您可以看到,这是称为 输入输出入门项目中的示例代码 之前我们已经向您展示了 LED 是什么, 我们向您展示了软件代码 为什么上述方法很重要? 如果您知道调试的一般规则,即 -- 我们需要能够控制软件做什么。 然后,我们需要能够观察发生了什么。 LED 为我们提供了一种非常简单、非常快速、 具有极高非侵入性 -- 或具有极低侵入性 -- 的方法来查看软件在做什么。 那么,如果我们仅采用一个 LED,我们可以开启它, 我们也可以关闭它。 这基本上是您可以 放置在机器人上的一位基本信息, 您可以在机器人奔跑时查看它。 因此,您的机器人 代码中可能嵌入某种模式、某些条件, 现在您可以在机器人 奔跑时将该想法 向操作员显示为1 或 0 -- 即真或假 因此我们将这称为检测信号。 我们可以通过查看 LED来了解您的软件正在做什么。 另外 -- 即使仅使用单个 LED 我们实际上也可以获取更多信息。 那么,如果我使 LED 闪烁 -- 我开启它,我关闭它 -- 我可以通过我的双眼看到它。 只要它的频率小于10 赫兹,我就可以看到它。 但我还可以更改我使它闪烁的频率。 我可以使它每秒闪烁一次,每秒闪烁两次,每秒闪烁四次, 因此,我实际上可以通过 LED 生成多于 1 位的信息。 因此,我可以再次在我的头脑中 LED不同的闪烁频率状态 -- 设定不同的含义 -- 从而进行编码,以便我可以 看到我的软件在做什么。 由于能够观察或了解您的软件 在做什么是调试的 关键部分,因此我鼓励您在您的 LaunchPad 上使用 LED 在原型板上连接一些额外的 LED 以便您的机器人 在赛道上赛跑时有大量的闪烁的状态灯。 总之,我们讨论了 LED 它是具有极性的。 换句话说,它有正极和负极。 阳极是正极,阴极是负极。 它具有非线性特性,我们 需要使用一个电阻来连接它。 该电阻将设置流过LED的电压电流 我们针对电阻, 而不是针对 LED使用欧姆定律。 然后我们编写了一组软件函数 -- 初始化函数,它执行了一次,然后是 输出函数,在我希望LED开启或关闭时使用。 好的,请您尽情享受。 在您的机器人上放置一些 LED,以便您可以看到它在奔跑。 祝您本次实验愉快。334
课程介绍 共计3课时,32分59秒

TI-RSLK 模块 8 - 连接输入和输出

TI 机器人 检测 输入 输出 RSLK 碰撞

此模块的目的是开发接口开关和 LED,使机器人能有效检测壁面碰撞。许多传感器和传动器都采用 LED,因此了解它们的工作原理对于构建机器人非常重要。
展开

  • 相关产品
  • 样品申请
  • EVM购买
  • 文档下载
  • 软件/工具
  • TI Design
分享到X
微博
QQ
QQ空间
微信

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新文章 手机版

站点相关: EEWORLD首页 EE大学堂 论坛 下载中心 Datasheet 活动专区 博客

北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2017 EEWORLD.com.cn, Inc. All rights reserved