我正在尝试了解GPIO,并阅读了许多不同的博客文章,我想我已经快要掌握它了,但仍在努力解决一些问题。
我见过一些关于GPIO的参考,它们只能使用二进制值,但是其他帖子说该值可以在0-255之间。我假设这是模拟和数字GPIO之间的差异。那是对的吗?一个GPIO引脚能否同时充当模拟和数字引脚?
我正在尝试了解GPIO,并阅读了许多不同的博客文章,我想我已经快要掌握它了,但仍在努力解决一些问题。
我见过一些关于GPIO的参考,它们只能使用二进制值,但是其他帖子说该值可以在0-255之间。我假设这是模拟和数字GPIO之间的差异。那是对的吗?一个GPIO引脚能否同时充当模拟和数字引脚?
Answers:
GPIO引脚是“通用输入/输出”引脚。默认情况下,这仅是高电平或低电平(电压电平,高电平是微控制器的电源电压,低电平通常是地或0V)。但是“高”和“低”的电平通常以电压与电源电压的比例给出。因此,通常高于电源电压66%的任何东西都被认为是逻辑电平“高”,这意味着某些低电压设备可以与高压设备通信,只要该电平落在“高”范围内即可。例如,一个1.8–2.7V的低功耗微控制器或GPS接收器将无法直接与5V的微控制器通信,因为低电压设备将其视为“高”,而高电压设备根本不会认为它是高。这用于使用GPIO作为输入引脚,
有时,您可以通过配置GPIO引脚以供其他板载设备(如“模拟到数字”(ADC)转换器)使用,来将SINGLE引脚用于“模拟”值。该引脚设置为ADC上的一个通道,现在用作ADC的输入,而不是普通的GPIO引脚。然后,可以将ADC设置为采样,并读取ADC的结果寄存器值(如果分辨率为10位,则为0-1024)。
正如有人提到的那样,可以在软件中使用GPIO引脚来产生脉冲宽度调制(PWM)信号的效果,通常以低速进行GPIO切换。大多数微控制器都有专用的PWM发生器,可以将其配置为使用GPIO引脚作为输出引脚,与使用软件控制GPIO生成PWM信号相比,它们非常快速且稳定得多。PWM用于“平均”或“%”样式的信号,并允许您执行诸如昏暗的灯光之类的事情并控制电动机的速度。
GPIO引脚通常按组排列,称为端口。在小型控制器中,它们可能是8位架构,因此端口通常分为8个端口,并且可以通过读取表示这些端口逻辑高/低值的“数据寄存器”来同时读取所有值。针脚。同样,您可以将引脚设置为输出,然后将8位写入数据寄存器,而微控制器GPIO控制器将读取寄存器的更改值,然后根据您刚刚设置的值将其驱动为高电平或将其拉低。
在像Raspberry Pi和BeagleBone这样的较新的控制器(如ARM Cortex A8和A9)中,它们的GPIO控制器和不同的选项非常复杂。它们使用32位架构,因此,即使不是所有的GPIO引脚实际上都可用(某些引脚可能专用或未启用),大多数GPIO引脚仍布置在32引脚模块中。BeagleBone(我之前研究过)的大量针脚有一些非常不错的选择,有时您需要使用“针脚复用器”工具,该工具可用于设置某些针脚的特殊模式例如PWM,脉冲捕获,计时器输出,模拟(ADC)通道输入,甚至(无论如何在BeagleBone上)映射到ARM内核上可用的工业子处理器,但它们被认为是独立处理器,需要按顺序使用自己的引脚映射与外界联系。
您很可能是指Arduino的模拟输出,通常使用带有软件PWM的GPIO引脚。GPIO通常具有三种状态。高输出,低输出和输入/高阻态(高阻抗,不影响输出)。
PWM快速将输出从“输出高”切换到“输出低”(周期),以创建平均值(占空比),从而产生类似于模拟值的值。通过以50%(或128)的占空比切换二进制GPIO,输出仍然是二进制的,但平均到高电平和低电平之间的一半。
想想一个灯泡。您看到它打开或关闭。但是它确实每秒打开和关闭60次,如此之快,以至于您不会注意到它的闪烁真的很快。但是,请务必缓慢缓慢地手动打开和关闭灯泡,然后您会发现灯泡闪烁。255表示打开100%,小于255表示打开100%。
这就是二进制GPIO可以充当255状态模拟引脚的方式。