- 课程目录
- 相关资源
- 课程笔记
大家好,我是 Jon Valvano。
在本视频中,我将向您
展示如何把开关连接到微控制器。
我们将首先介绍一下开关的定义及其工作原理。
首先,让我们把物理器件,
即此处的开关连接到微控制器输入
引脚。
然后,在我们把它连接到微控制器之后,
我们将需要一系列函数,这些
函数允许我们进行初始化并执行
与该器件相关的 I/O。
我们把所有这些函数整合在一起,并把它们
称为软件驱动程序。
现在,我们在该模块中讨论开关的原因是,
我们要实际将碰撞开关
放置在机器人前部,以便在机器人接触到墙时 --
这不是一件好事。
但是,如果发生这种情况,机器人中的软件
将会知道发生了糟糕的事情。
让我们开始吧。
大家都知道,开关的工作原理相当简单。
它要么处于未按下状态,要么处于按下状态。
如果它未按下,那么它近似于开路。
但更正式地讲,当开关未按下时,
开关的两个端子之间存在大约 100 兆欧的电阻。
如果它按下,两个端子之间将存在大约
0.1 欧姆的电阻。
现在,您将在实验中使用的特定开关
实际上是一个单开关,但它连接了四条导线。
您可以看到,一连接到二,
三连接到四。
因此,开关本身就存在于这里,
比如在端子二和四之间。
这是我们在实验中必须处理的物理部件。
那么,接下来,我们必须要做的
是对它进行连接,以形成接触状态 --
当开关被按下时存在 0.1 欧姆电阻,
我想把它映射到逻辑信号。
我可以通过两种方法来实现它。
我可以把它映射到 3.3V,
当它未按下时,100 兆欧电阻,开路状态
映射到零伏。
我将使用连接下拉电阻的方法来实现它。
您在那里看到它了吗?
下拉电阻。
我要使用一个下拉电阻来实现
该映射功能。
这意味着,这里是我的开关。
这是当它按下时电路的样子。
这是当它未按下时的同一电路。
因此,下拉电阻器用于
在开关未按下时创建逻辑低电平。
现在,如果开关按下,正如您知道的,
这在本质上是 0.1 欧姆电阻。
因此,微处理器引脚的电压变为大约 3.3 伏。
但开关打开时,这将变为 100 兆欧电阻。
这将显示为 0 伏。
因此,您会看到选择了该 10k下拉电阻,
从而使它远远大于短路电阻,
并且使它远远小于开路电阻。
现在,我们要把该下拉电阻器
接口归类为正逻辑,因为
真条件 --
开关按下,真条件 --
将映射到一个高电压。
假条件 --换句话说,
开关未按下 --映射到低电压
或小电压。
我把它称为正逻辑。
我本来是可以使用负逻辑的。
换话句话说,进行相反的映射。
采用 0.1 欧姆电阻,把它映射到零伏。
采用 100 兆欧电阻,把它映射到 3.3 伏。
我本来是可以这么做的。
这就是负逻辑。
我可以使用一个上拉电阻来实现它。
您可以看到,电阻器位于另一侧。
这里是开关。
这里还是开关,闭合然后断开。
现在,如果开关闭合,
该 0.1 欧姆阻抗是如此之小,
以至于这会变成零伏。
如果开关断开,那么该 100 兆欧
电阻是如此之大,以至于这会变成 3.3 伏。
但是,我要把它归类为负逻辑,
因为这里的真条件,按下开关
会产生低电压,零电压。
开关的假条件,打开开关
被转换为数字高电平,或 3.3 伏。
请注意,有时我们使用正逻辑。
有时我们使用负逻辑。
这通常没有问题,只要硬件和软件
保持一致并且您知道它们的
对应关系就可以了。
具体来说,在 LaunchPad 本身上 --
这是您的红色小电路板 --
位于您的红色电路板一侧的两个开关,在这里
连接到 P1.4 和 P1.1 --
这已经通过导线在您的电路板上进行物理连接 --
它们采用的是负逻辑。
有一个内部电阻器,它将针对其中的每个
引脚进行设置。
但您可以看到,在接触状态下
会产生0V的电压。
松开状态,即未被接触时,会产生 3.3V的电压。
我们将会看到,在初始化期间,
软件将要求我们设置该内部上拉电阻。
那么,让我们来讨论一下软件。
既然我们已经对它进行了连接,那么让我们来执行有趣的部分。
这就是编写驱动程序。
驱动程序就是一系列允许您快速
配置硬件的函数。
那么,有两种类型的函数。
一种是发生一次以进行初始化的函数。
另一种是一系列
您不断调用以执行操作的函数。
在本例中,它们用于实现开关的输入。
因此,这是一个输入器件。
那么,我们将在 MSP432 中设置方向寄存器
以便将这个引脚指定为输入。
这里是一个示例,在该示例中,如果
我采用一个开关 --再强调一次,无论这是正逻辑
还是负逻辑都没有关系。
我将采用正逻辑。
把这个点连接到 P1.0。
然后,如果我要使该引脚实现输入,
那么我首先要做的是,
获取端口P1上的8位数值--
我将获取该端口的全部8个位。
然后,我将做的是,
仅选择我感兴趣的位。
在本例中,我对Bit0感兴趣。
因此,我要使用 1对它进行选择。
现在,该信号,如果这是一个正逻辑
开关,当开关按下时,该信号,
变量 n,将为真。
如果开关未按下,它将为假。
这就是我
要对该器件进行操作的方法,
使用掩码来选择
我感兴趣的位。
这里是用于与 LaunchPad 上
两个开关连接的实际代码。
在来自德州仪器 (TI) 的特定实例中,
开关连接到 --
负逻辑开关连接到 P1.4 和 P1.1。
我们将使这些输入 -- 这些引脚
成为输入。
我们确实希望有一个上拉电阻器。
要配置一个上拉电阻,
需要执行两个步骤。
我将设置相应的位。
那么,为了实现上拉,我要将 REN
设置为 1,并且将输出寄存器设置为 1。
对于该相应的位,方向寄存器配置为 1、
输出寄存器配置为 1、电阻
使能寄存器配置为 1 的组合
将配置一个内部上拉电阻。
当我对这进行读取时,我可以读取输入。
然后,再针对我使用的位对它进行掩码。
这是一种实现它的简单方法。
不幸的是 -- 这实际上会起作用。
但不幸的是,您可以看到,
我对设置每个寄存器中的两个位感兴趣,因为我
需要这样。
但它也产生了不利的后果,
它实际上将这里的寄存器的其他六个位
都设置成了 0。
您的实验伙伴可能希望发生这种情况,
也可能不希望。
现在,我要调用该函数,它将设置比您的需要
更多的位,这不是友好的行为。
相反,如果您通过正确的方法的实现它 --
这位于这里的特定行中,
我们需要BIT4和BIT1为零。
我们需要清除这两个位。
我将使用读取、修改、写入操作
来清除我感兴趣的位,
并使其他六个位保持不变。
再说一次,在本例中,
我希望BIT4和BIT1变为 1。
同样这里希望BIT4和BIT1变为 1。
这是一种有效得多的 --
我把它称为友好的 --对该初始化的访问。
那么,正如我说过的,我们要实现它的方法是,
我们要将碰撞开关连接到机器人前部。
它们看起来是什么样的关系并不大。
我们要将该开关连接到
微控制器。
总之,在这里,您了解了
什么是正逻辑
和负逻辑。
它并不十分复杂,但它要求您至少
基本了解欧姆定律,
从而理解上拉和下拉是怎样工作的。
然后,能够了解LaunchPad 的驱动程序
然后,为该实验编写您自己的驱动程序软件。
具体来说,正如您在采用外部下拉
电阻的正逻辑中
看到的,您要将三个开关连接到
微控制器,这将是您的
实验任务的前半部分。
在下一个视频中,我们将讨论 LED,
但这是一个有趣的实验,
因为它是第一个物理实验,您必须在该实验中到处布线。
您可能会犯错。
希望您喜欢本次实验。
拿出您的电压表吧。
课程介绍
共计3课时,32分59秒
猜你喜欢
换一换
推荐帖子
- 说锂离子电池
- 说到锂离子电池,都应该想到几个部分:电芯,电量计,电池保护板,电池充电电路。 For example,电池参数: 电芯: 根据锂离子电池所用电解质材料不同,锂离子电池可以分为液态锂离子电池(li thiumion battery,简称为LIB)和聚合物锂离子电池(polymer li thiumion battery,简称为...
- qwqwqw2088 模拟与混合信号
- 新手问一个简单的问题
- 我写了一个简单的求正旋值的c程序: #include<math.h> #define NX 180 #define pi 3.14159 short i; double x[NX]; double r[NX]; void main(void) { for(i=0;i<NX;i++) {x=pi*i/180;  ...
- glancegreen 模拟与混合信号
- 急,又出问题了
- 问下,看定时器A那部分的时候,用软仿还是硬仿,在增计数模式下,tar的值都没达到ccr0的设定值就出现中断,怎么回事啊 源程序: //****************************************************************************** // MSP-FET430P140 Demo - Timer_A, Toggle P3.4, CCR...
- passion07 微控制器 MCU
- 430头文件的函数说明在哪?
- 大家好,最近做低功耗的竞赛使用了__bis_SR_register设置低功耗模式。 但是跳到INTRINSICS.H函数定义初也没有看到有关的函数说明,这个要从哪里看呢? 请指教! ...
- nemo1991 微控制器 MCU