资料介绍
PCB图如下:
描述
具有集成 LoRa 和 CAN 总线的 ATMEGA328P 模块
具有集成 LoRa 和 CAN-BUS 的 ATMEGA328P 模块
介绍
为了完善我的 LoRa 遥测系统,我已经完成了很多原型。这篇文章将重点介绍下一个节点设计。由于我将部署系统的区域非常大,但边界围栏线大致呈方形,我决定尝试减少覆盖整个区域所需的 LoRa Radio 节点的数量。这为利用 CAN-BUS 将仅传感器节点连接到无线电节点并让它们报告异常状态以及来自无线电节点的请求提供了机会。
因此,该设备将用作 LoRa 到 CAN-BUS 网关,具有一些本地自动化来控制向主站传输数据。这个概念也可以适用于其他领域,例如家庭自动化或工业环境。
在该设备的核心,我坚持使用多功能 ATMEGA328P,排除当前的芯片短缺和当前的高价,它是一款非常便宜的芯片,具有许多经过良好测试的库,并且学习曲线相对较低,主要是由于它在 Arduino 生态系统中的广泛使用。
LoRa 组件由 AI-Tinker(非赞助)的 RA-02 甚至 RA-01H 模块处理。正如我们在之前的原型中看到的那样,该设备需要使用逻辑电平转换器,因为它只接受 3.3v 逻辑电平。虽然如果我从 3.3v 为 ATMEGA328P 供电,我可以摆脱这些问题,但它会产生两个问题,其中一个仍然会强制使用电平转换器......
我选择以 16Mhz 运行 ATMEGA328P,这基本上迫使我使用 5v 为芯片供电。除非您非常彻底地阅读了一些数据表,否则第二个原因并不那么明显......
CAN 总线组件由 MCP2515 独立 SPI 转 CAN 控制器以及 TJA1050 CAN 总线收发器处理。
这就是事情变得有趣的地方...... MCP2515 可以在 3.3v 上运行,但 TJA1050 是仅 5v 的设备。因此,理论上我可以只在 MCP2515 和 TJA1050 之间使用逻辑电平转换器,同时在 3.3v 上运行电路的其余部分......
鉴于我宁愿在 16Mhz 上运行 ATMEGA328P,而且我的 LoRa 无线电模块电路及其逻辑电平转换器电路工作得非常好,我决定不改变这一点,并保持 CAN 总线在 5v 下运行一路走来,因为我仍然必须为此目的在 PCB 上使用 5v 稳压器。
LoRa 和 CAN BUS 模块的 IO 连接
两个集成组件(Lora 和 CAN)都是 SPI 设备。这意味着它们共享公共 SCK、MISO 和 MOSI 线(在 ATMEGA328P 上分别由引脚 D13、D12 和 D11 提供。然后通过使用 CE 引脚进一步选择单独的 SPI 设备进行操作,每个设备一个唯一的引脚, MCU将其拉低以向设备指示它应该注意在SPI总线上传输的数据......
LoRa 和 CAN 都使用其他引脚,LoRa 需要一个连接到 D9 的复位引脚,一个连接到 D10 的 CS/CE 引脚以及一个连接到 D2 的硬件中断引脚。(请注意,这是与 Sandeep Mistry 的 LoRa 库一起使用的。Radiolib 库需要一个额外的引脚,通常连接到 LoRa 模块上的 DIO1。该设备在其当前布局中不提供对这些引脚的访问,因此您只能使用它与 Sandeep Mistry 图书馆,至少现在......)
CAN 模块在 D4 使用 CE/CS 引脚,在 D6 使用 IRQ 引脚,虽然不是硬件中断引脚,但确实具有 PCINT 功能。
引脚 D10、D9 和 D2 未断开以供用户访问。虽然我决定允许访问 D4 和 D6 以及 SPI 总线 D11、D12、D13,以允许与逻辑分析仪连接,或将其他 SPI 设备添加到总线......
这给我们带来了一个非常有趣的观点……这两个 SPI 设备真的可以一起玩吗?我所说的“一起玩得很好”是什么意思?
为了回答这个问题,我们不得不先看一些理论,以及了解 SPI 和 I2C 之间的根本区别......
SPI和I2C的区别
我们大多数人都会非常熟悉 I2C,因为它是一种非常常见的协议,用于将传感器连接到微控制器。它仅由两条 IO 线组成,SDA 用于数据,SCL 用于时钟。总线上的每个设备都有自己的内置地址,就像 PCF8574 IO 扩展器一样,该地址可以在 0x20h 和 0x27h 之间选择。所有设备共享这些公共数据线,并且只有在主控制器专门寻址时才会响应......除非您不小心将具有相同地址的两个设备放在同一总线上,(如果这甚至可以工作),没有错误的设备会响应任何数据请求的方式......
另一方面,SPI 以完全不同的原理运行,使其比 I2c 快很多倍,有源设备同时发送和接收数据...... SPI 也称为四线协议。每个设备至少有 4 条数据线,分别是 SCK(时钟)、MOSI(用于从主设备传输到从设备的数据)、MISO(用于从从设备传输到主设备的数据)和一个 CE 或 CS(芯片选择 ) 引脚。
SCK、MISO 和 MOSI 对所有设备都是通用的,这意味着它在所有设备之间共享。CE/CS 是每个设备的唯一引脚,这意味着如果总线上有四个 SPI 设备,则必须有四个单独的 CE/CS 引脚!
如果主机将其各自的 CE/CS 引脚拉低,则设备将或者更确切地说应该只响应 SPI-BUS 上的数据。现在你应该很快就会明白,这会很快变成一个非常非常复杂的混乱。
让我们举一个很好的例子。ST7789 SPI显示模块,有便宜的版本,在速卖通和其他网上商店都有卖。我假设这个特定模块是为了使其更易于使用,默认情况下,CE/CS 引脚在内部被拉低到地……那你可能会问呢?这有什么问题,因为它为您节省了一个 IO 引脚?
事实上这是非常错误的,如果您曾经尝试在 SPI 总线上使用其中一个显示器与其他 SPI 设备一起使用,您将很快发现这一事实......什么都不起作用,或者只有显示器可以工作(如果你是幸运的)
但为什么?
将 CE/CS 拉低,向芯片发出信号,表明它应该响应公共 SCK、MISO 和 MOSI 线上的指令。将引脚内部拉低,从而迫使该芯片始终响应,即使它不应该响应。因此用垃圾污染了整个 SPI-BUS...
问题的答案
在这个非常冗长的解释之后,这仍然是非常基本的,是时候回到我们最初的问题了:
Sx127x ( RA-02 ) 模块和 MCP2515 控制器能否在同一总线上运行良好?答案并不简单,因为它归结为您使用哪些库......
请记住,库必须拉低它要与之通信的设备的 CE/CS 引脚。一些库错误地认为它们是唯一在使用的库,并忽略了一个简单的事实,即它们应该在每次事务后释放 CE/CS 引脚,以释放总线以供其他设备使用它......
然而,经过广泛的测试,我可以说Sandeep Mistry 的 LoRa 库以及mcp_can库确实可以很好地结合使用。这两个库不会将单独的 CE/CS 引脚拉低,并允许共享 spi 总线。
上面讨论的 ST7789 模块并非如此,硬件实际上一直在拉动引脚……
仔细看看PCB
让我们仔细看看PCB。Ra-02 模块 ( LoRa ) 占据了 PCB 左侧的大部分区域,ATMEGA328P 在其右侧。RA-02 被电平转换器包围,使用 BSS138 N 沟道 Mosfet 和 10k 电阻器(Q1 至 Q6、R1、R2、R3、R4、R5、R6、R8、R9、R10、R11、R12、R13 )
C1 和 C2 是 Ra-02 模块的旁路电容
在左下角,我们有一个硬件重置按钮,用于重置 ATMEGA328P,旁边有一个黄色跳线(H1)。该跳线控制 CAN 总线的 120 欧姆镇流电阻 (R17)。移除跳线将移除镇流器。正下方是 CAN 连接器,标记为 U5,CH 为 CAN-H,CL 为 CAN-L 端口。
U3 和 U4 与 R18、R19、X2、C16、C17 一起构成 PCB 上的 CAN 组件。去耦由 C6、C7、C8 以及 C9 和 C12 提供(包括 ATMEGA328P 的去耦)
在 U1 (ATMEGA328P) 上方提供了一个 ICSP 编程头,用于与 USPASP、AVRASP 或 Arduino 作为 ISP 和类似设备一起使用。
板上没有提供 USB 到串行转换器,可以通过 Arduino 引导加载程序为 Arduino NANO 加载串行上传(以利用所有模拟输入)。RxD、TxD 和 DTR 引脚在 PCB 的两侧分出,以及接入 3.3v、5v 和 GND 引脚。
提供一个直流电源插座。它可以接受高达 12v 的直流电压,尽管我建议不要超过 7.2 伏,以免对 PCB(LDO1 和 LDO2)背面的 LDO 稳压器施加太大压力。
在上图中,我已将 USB 转串口转换器以及 CAN-BUS 连接到设备。
原理图,示意图
详细示意图如下:
表 1(上图)负责 ATMEGA328p 及其支持电路,以及通过 LDO 稳压器提供的电源。
表 2(下)负责逻辑电平转换器、RA-02 (Sx1278) LoRa 模块以及 CAN-BUS 控制器和收发器电路。
软件和固件
为了测试这个模块,我使用了Cory J Fowler 的 mcp_can 库,用于 CAN-Bus 部分,
以及Sandeep Mistry 的 Arduino-LoRa
同时使用 LoRa 和 CAN 的组合示例将与项目的下一部分一起发布,即 CAN 继电器模块
代码
https://github.com/sandeepmistry/arduino-LoRa
- 基于ATmega328P微控制器的Ardu键盘 0次下载
- 基于ATmega328P的DIY macropad 0次下载
- 简单的独立ATMega328p微控制器 0次下载
- 如何通过ATMEGA328P AU(SMD)制作广告面板 0次下载
- 带ATMEGA328P的定制LoRa基础模块 0次下载
- Atmega328P脉宽调制控制器 1次下载
- 基于ATmega328P的电感计 4次下载
- 带有ATMEGA328P设备的Arduino Uno门铃项目 2次下载
- 使用ATmega328p的迷你示波器 8次下载
- 带Atmega8a/168/328的CAN继电器模块 1次下载
- 基于Atmega328P的PWM控制器卡 2次下载
- 适用于所有atmega328p项目的通用板 8次下载
- 最低系统ATmega328p开源 15次下载
- Atmega328P不带Arduino PCB设计 11次下载
- Arduino Atmega328P开发板软件下载与安装 128次下载
- CAN总线的特点和FPGA实现 327次阅读
- CAN总线的发展历程 CAN XL总线的典型应用 663次阅读
- 金升阳R4S系列CAN/485总线隔离收发模块介绍 755次阅读
- 如何利用ATmega328P构建一个可靠的LoRa设备 4827次阅读
- 如何为ATmega328P刷bootloader? 5296次阅读
- LoRa通信模块的特点及缺点 2w次阅读
- 飞凌嵌入式CAN总线转接板介绍 2001次阅读
- CAN控制器模块的智能总线接口设计 2292次阅读
- 工业控制中的CAN总线接口模块硬件设计原理解析 7637次阅读
- CAN总线转CANopen方案推荐 7652次阅读
- CAN总线协议是什么?CAN总线协议有哪些?CAN总线协议知识分析 7.3w次阅读
- 为什么要用光纤CAN转换器_基于光纤转CAN模块的CAN总线通信改造 7546次阅读
- CAN总线概述及应用_CAN总线的应用案例(汽车CAN总线应用) 3.3w次阅读
- CAN总线定义与CAN协议的基本概念 3w次阅读
- 基于DSP和CAN总线的RTU的设计 1535次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多