信号是运载消息的工具,是消息的载体。从广义上讲,它包含光信号、声信号和电信号等,我们今天主角是电信号。电信号是指随着时间而变化的电压或电流,因此在数学描述上可将它表示为时间的函数,并可画出其波形。由于非电的物理量可以通过各种传感器较容易地转换成电信号,而电信号又容易传送和控制,所以使其成为应用最广的信号。
如果你刚开始接触嵌入式或者硬件控制,我想可能你需要先明确 电信号的基本概念。
在电子线路中,我们将电信号进行如下的划分:
模拟信号
数字信号
模拟信号是指信息参数在给定范围内表现为 连续 的信号。
举个例子,发电机的转子转动一圈产生的感应电压正好是一个周期的三角函数,就像上图中左边的 波形 一样。同样,像广播的声音信号,或图像信号等生活中许多常见的信号,都是模拟信号。
数字信号是指幅度的取值是离散的,幅值表示被限制在有限个 数值 之内。二进制码就是一种数字信号。在这种二进制体系中,我们用 0
表示 低电平
, 1
表示 高电平
。
很可能你会问,高低电平指什么?
高低电平
你可以简单的理解为较高的电压为高电平,较低的电压自然就是低电平。当然,肯定有一套判定高低电平的准则:
一般规定低电平为 0~ 0.25 V,高电平为 3.5~5 V。
当然对于有些不同的芯片或者电路模组,对高电平或低电平的定义可能会有所差异。
如图所示:
当低电平突然跃升为高电平时,电信号的变化时间极快,几乎呈直角,从低电平直线攀升至高电平,这个电平跳变的过程我们称之为 上升沿。
当高电平突然下降为低电平时,电信号的变化时间极快,几乎呈直角,从高电平直线跌入低电平,这个电平跳变的过程我们称之为 下降沿。
同时从上面这张图你也可以看出,在数字信号中,我们的电压变化理论上只有 低电平 0
或 高电平 1
,因此我们的数字信号能够更好的被计算机所理解,并进行快速的运算。
我们上文说,数字信号更好被计算机理解、计算,但是现实世界中大部分信号,图像,声音等等都是连续信号,所以如果需要计算机来处理这些信号,就需要将这些模拟信号转换为数字信号。所以人们发明了各种各样的传感器来采集各种模拟量的数据,转化为我们需要的数字信号。
那么,计算机计算好了的信号,比如处理之后的声音信号,如何变为连续的信号输出,被扬声器播放呢?这就需要我们借助将模拟信号转换为数字信号的模块将数字信号转化为模拟信号输出了。
我们会 machine
模块中导入 Pin
这个类。
你一定很好奇,Pin
这个类里到底有什么,我们使用 TAB
按键来查看 Pin
中所包含的内容:
我们还可以使用下面两行代码查看 Pin
内容
from machine import Pin
help(Pin)
运行查看结果如下:
为了满足你的好奇心,接下来我们在 API 文档中分别介绍以上的内容。如果以下的内容刚开始对你来说很难以理解,没有关系,你只需建立起初步的概念,结合我们上文 开始之前 讲述的基本概念,之后使用到 Pin
的时候,再回过头来仔细翻看 API 吧。
下面的宏定义用于配置 Pin
,也就是将对应编号的真实的管脚配置成输入或者输出或者其他模式。
宏定义 | 含义 |
---|---|
Pin.IN | 信号输入 |
Pin.OUT | 信号输出 |
Pin.PULL_DOWN | 是否接入下拉电阻 |
Pin.PULL_UP | 是否接入上拉电阻 |
Pin.IRQ_RISING | 信号上升沿触发中断 |
Pin.IRQ_FALLING | 信号下降沿触发中断 |
Pin.WAKE_HIGH | 从高电平唤醒 |
Pin.WAKE_LOW | 从低电平唤醒 |
Pin.OPEN_DRAIN | 开漏 |
注意:不是每个端口都有下面的全部属性。例如某些引脚只能输入不能输出。
我们注意到其中的 Pin.OUT
为信号输出,而点亮 LED 灯是用到的代码 Pin(2, Pin.OUT)
,就是将 GPIO2 设置为输出模式,通过改变该 GPIO 的 value
为逻辑 1,于是便在该引脚上输出了高电平(3v 以上的电压),该 led 灯便被点亮。
对于上表中的数字信号,可能很多没有学过数字电路和模拟电路的同学,需要进行以下的科普。
id
:任意引脚号
mode
:引脚模式
Pin.IN
— 输入Pin.OUT
— 输出Pin.OPEN_DRAIN
— 开漏pull
:是否接入拉电阻
None
— 无上拉、下拉电阻Pin.PULL_UP
— 上拉Pin.PULL_DOWN
— 下拉value
:引脚电平状态
0
—低电平1
—高电平示例:
from machine import Pin
led = Pin(5,Pin.OUT)#也可写成led = Pin(5, mode=Pin.OUT, pull=None, value=0)
print(led)
pin (2)
函数说明:初始化引脚。
mode
:
Pin.IN
— 输入Pin.OUT
— 输出Pin.OPEN_DRAIN
— 开漏pull
:
None
— 无上拉、下拉电阻Pin.PULL_UP
— 上拉Pin.PULL_DOWN
— 下拉示例:
from machine import Pin
pin=Pin(2)
pin.init(mode=Pin.OUT)#也可以写作pin.init(Pin.OUT)
函数说明:获取或设置引脚电平状态,根据引脚的逻辑电平返回 0 或 1。
注意:不带参数时是读取输入电平,带参数时是设置输出电平。
value
:可以是 True
/False
,也可以是 1
/0
。
示例:
函数说明:配置一个引脚的中断处理程序,在引脚的电平满足条件时调用。
trigger
:
Pin.IRQ_FALLING
— 下降沿触发Pin.IRQ_RISING
— 上升沿触发handler
:中断被触发之后的回调函数
示例:
from machine import Pin
touch = Pin(25, Pin.IN)
touch.irq(trigger=Pin.IRQ_FALLING, handler=lambda t:print("IRQ triggered by your finger"))
然后我们找到Waffle上的G25引脚,我们用手触摸这个引脚就会触发里面的 print
函数。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。