当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]在我的上一篇博文里,我介绍了串行总线和网络的概念。虽然有这些概念模型很有帮助,但仅靠理论远远不够。微控制器的设计初衷是直接与实际硬件交互。

在我的上一篇博文里,我介绍了串行总线和网络的概念。虽然有这些概念模型很有帮助,但仅靠理论远远不够。微控制器的设计初衷是直接与实际硬件交互。

在这篇文章中,我使用了W55MH32L-EVB开发板、一包跳线、一个FT232RL USB转TTL转换板、一个WIZ850io网络模块,并结合官方引脚图,来让实际信号通过物理引脚传输。

第一步:解码引脚图

从软件转向硬件时,第一个障碍就是意识到引脚具有多重功能。以W55MH32L-EVB的引脚图为例,每个物理引脚对应一个GPIO标签(如PA2、PB10、PD14等),同时还会用彩色方框标注其替代功能(如UART、SPI、I2C、ADC、定时器)。

我在早期就注意到几个重要点:

•首先检查预留的外设:仔细查看引脚说明,发现USART1已被专门用于MicroPython的REPL/USB桥接功能。尝试为外部设备占用 USART1 会干扰你的 Thonny 交互式控制台。如需与外部硬件通信,请选择可用的备用外设,例如 USART2 或 USART3。

•地线不可协商:数字信号是相对于地线测量的电压。当连接两个独立的电路板时,必须将它们的 GND 引脚相连。如果没有共同的参考点,其中一个电路板上的 3.3V 可能会被另一个电路板视为漂浮噪声。

•交叉 UART 线缆,并匹配 SPI/I2C 线缆:

•UART:电路板上的 TX(发送)应连接到另一设备的 RX(接收),RX 应连接到 TX。

•I2C:SDA 连接到 SDA,SCL 连接到 SCL。

•SPI:SCK 连接到 SCK,MOSI 连接到 MOSI(或外设输入),MISO 连接到 MISO(或外设输出)。

MicroPython 模式:类、对象和方法

从标准 Java 和 C++ 来看,MicroPython 在 machine 模块中的硬件抽象方式非常熟悉。几乎所有外设的工作流程都遵循完全相同的面向对象模式:

•从 machine 模块导入类(例如 Pin、UART、I2C、SPI)。

•通过指定硬件外设 ID 和配置参数来实例化对象。

•调用该对象的方法来执行实际操作(例如 high()、low()、value() 或 write())。

基础 GPIO 控制

在深入多线通信协议之前,最简单的起点是通用输入/输出(GPIO)。GPIO 引脚可以实现两项基本功能:将引脚驱动至数字电压电平(输出),或读取外部电压是否为高电平或低电平(输入)。

以下是控制输出引脚(如板载 LED)和读取输入引脚(如按钮)的基本模式:

直接切换引脚有助于理解电路板在底层的实际工作原理。复杂的通信协议本质上就是微控制器以精确而高速的时钟频率进行类似的操作。

1. UART:与 PC 终端通信

为了测试 UART,我使用了一块连接到电脑的 USB-to-TTL 板。我将该板的 UART TX 和 RX 引脚连接到适配器上(记得将 TX 与 RX 反向连接),并接一根地线。

在电脑上,我启动了串行监视器(PuTTY),并将波特率设置为 115200。

PuTTY 在这里的作用是直接连接到我电脑的 USB 端口(本例中我想要监控的是 COM4 端口),监听硬件发送的原始数据,并将这些数据打印到我的屏幕上。

在这一段代码中,我向另一个端口和串行监视器发送了“Hello from W55MH32L via UART!”,PuTTY 会接收到它。此外,如果我在电脑上的串行监视器中输入“1”、“2”和“3”(通过键盘敲入):

•微控制器控制台会显示:从 PC 接收:b'1', b'2', b'3'

•而电脑的串行监视器则接收:回显:1

2. I2C:扫描总线以查找设备

如果我们在不连接任何设备的情况下,尝试运行以下脚本到我所使用的开发板上:

我们会在微控制器的控制台看到如下内容:

I2C 通过地址来识别连接到其两条线上的不同设备,但在这里我们看到有 9 个设备,尽管我并没有将任何设备连接到板子上……这是怎么回事?

实际上,地址 56 只是板子上一个普通的传感器。起初我感到困惑,但经过进一步研究后发现,这个开发板本身内置了一个传感器——AHT20 温湿度传感器。

然而,80到87的这一段来自一个单个EEPROM存储芯片,它假装是八个独立的设备。较小的存储芯片会将存储空间划分为八个部分,并利用额外的地址(80至87)像房间编号一样,来选择要读取的区域。或者,如果芯片较大,其地址设置引脚可能未接地而处于“漂浮”状态,在扫描过程中会错误地对所有八个数字作出响应。

3. SPI:高速同步传输

SPI 的速度远高于 UART 和 I2C,但需要显式处理片选(CS)引脚。请注意,我们之前学习的 GPIO 知识与这一点密切相关:虽然 SPI 类别负责时钟和数据线,但你通过一个标准的数字输出引脚来控制 CS 线。

由于 SPI 设备采用低电平激活方式,你需要将 CS 引脚拉低以选择设备,执行数据传输后,再将其拉高以取消选择。

在本次 SPI 实验中,我使用了一个 WIZ850io 网络模块,并采用了以下引脚配置。

接着,我查看了电路板的引脚布局,并连接了相应的引脚。

该脚本设置了一个微控制器,使其通过高速 SPI 通信与外部设备(如传感器或显示屏)进行交互:首先配置数据线速度和引脚,通过复位引脚(rst)干净地唤醒芯片,然后像拿起电话又挂断一样,使用片选引脚(cs),将其拉低表示“开始监听”,通过 spi.write() 发送 3 字节的命令数据,用 spi.read() 读取 1 字节的响应数据,最后将其拉高以结束通信。

我们应得到的结果是微控制器控制台输出“b'0x04'”。

截至目前的关键要点:

•GPIO是基础:无论是通过PD14切换LED,还是通过PA4切换片选线,基本的数字I/O都是实现更大外设控制的基石。

•务必查阅引脚分配图:备用外设操作简单;但若将引脚与内部走线重叠或使用REPL桥接器,可能会导致无法打印内容,令人困惑。

•字符串 vs. 字节:调用.write()时,MicroPython期望的是字节类似对象(例如b"text"或bytearray([...])),而不是标准Python的Unicode字符串。忘记添加b前缀,是初学者最常见的语法错误。

•硬件循环:无论你驱动的是单个引脚,还是运行完整的总线协议,Import、Instantiate和Method调用的顺序始终一致。

现在基本的串行管道和GPIO已验证并正常工作,下一步自然就是利用板载以太网控制器和套接字库进行网络通信。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭