Skip to content

Latest commit

 

History

History
144 lines (87 loc) · 7.47 KB

README_CN.md

File metadata and controls

144 lines (87 loc) · 7.47 KB

rm_usb2can

Version  Build  License

English/中文


简介

    本项目的开发目的是为了给英特尔® NUC及其它x86架构的平台提供一个CAN (Controller Area Network)的外设接口。由于NUC及大部分x86不具有SPI等简单外设接口,故无法使用MCP2515等SPI (Serial Peripheral Interface) 转CAN芯片。为此,本项目基于github的开源方案candleLight开发,采用STM32F072CBT6作为主控芯片,实现USB (Universal Serial Bus) 转CAN的功能。STM32F072CBT6具有能够同时工作的USB全速外设和CAN外设,封装为QFP64 (Quad Flat Package),是较为优秀的解决方案。下图为Intel NUC与USB2CAN连接实物图。

usb_hub


开发工具

  • EDA工具: Altium Designer 20.0.13
  • 编译工具: gcc-arm-none-eabi 8-2019-q3-update
  • 烧录工具: STM32CubeProgrammer v2.6.0

目录结构

  • bom:三个不同版本的USB2CAN物料表单。
  • candlelight:github开源方案candleLight的仓库。
  • circuit:用Altium Designer设计的电路原理图及PCB源文件。
  • gerber:三个不同版本的USB2CAN制造文件。
  • image:README中的图片。
  • firmware.bin:编译好的程序二进制文件。

注意:circuit文件夹下的PCB和原理图是示例电路,直接用它制造生产结果不是图示的产品。若想直接复现图示版本,请用gerber文件夹下的生产文件。


电路设计

原理图设计要点

    USB HUB电路设计:由于整车需要至少2路CAN总线来保证电机回传数据包的完整性,所以我们采用了GL850G作为USB HUB芯片实现USB一拖四的方案。另外,我们还通过使用施密特触发器来实现上电时序,保证USB设备枚举的顺序在每次上电后都是一致的。

usb_hub

    USB转CAN电路设计:用STM32F072CBT6实现USB转CAN功能。CAN电平转换芯片采用MAX3051EKA芯片,该芯片使用3.3V供电,且封装为SOT23-8 (Small Outline Transistor),为PCB小型化提供了基础。图中的R6、R7电阻用途为更改STM32的Boot模式,从而使STM32能够通过更改R6、R7的短接模式而在DFU (Device Firmware Upgrade) 烧录模式与Flash模式下切换,方便烧录固件。

stm32_can

PCB布局布线要点

  1. 所有USB总线需要设置成差分对,在布线时严格遵循差分信号布线规则。
  2. 所有CAN总线需要设置成差分对,在布线时严格遵循差分信号布线规则。
  3. 晶振和谐振电容底部最好挖空不铺铜。
  4. 电源线线宽应尽量大于0.3mm以保证电源轨道不塌陷。

电路制作

    我们提供了三个不同版本的Gerber文件用于生产,分别是扩展:两路CAN+UART+DBUS四路CANUART+DBUS。这三种版本的电路均采用两层PCB进行设计,面积约为20*30mm。你可以直接将打包好的gerber文件提交个生产厂家(如:嘉立创)进行生产。

    你可以在此处找到该板对应的BOM (Bill Of Material) 表,并且依据这张表格将元器件焊接到已经制作好的PCB上。焊接完成后,请仔细检查是否有引脚之间有残余的焊锡,那将会导致电路板发生短路,同时你还要检查引脚是否有虚焊的现象发生。

    焊接完成后,用万用表检查5V电源接口与GND之间是否短路、3.3V电源输出与GND之间是否短路。当确保上述情况没有出现时,再将板子连接电脑的USB口,此时应该可以看到板上的电源指示灯亮起,并且电脑能够识别到USB HUB芯片。

注意:请勿同时焊接用于切换STM32下载模式的上/下拉电阻,那样有可能使电源与GND之间出现短路!


固件烧录

    你可以点击此处下载已经编译好的固件,或者是跟随candleLight文档自行编译固件。最终你会得到.bin文件,我们使用STM32CubeProgrammer来将固件通过USB烧录到STM32中。下面展示了下载固件的步骤:

  1. 将STM32上BOOT0引脚的下拉电阻取下,焊接上上拉电阻。
  2. 将板子连接到电脑的USB口中,打开STM32CubeProgrammer。
  3. 在STM32CubeProgrammer中点击下图所示的三个按钮,搜寻可用的STM32设备。

stm32_programer_1

  1. 连接成功后点击“Read”按钮以读取固件,选择准备好的固件。

stm32_programer_2

  1. 点击“Download”以下载固件。下载成功后,可以看到成功的标识。

stm32_programer_3

  1. 将STM32上BOOT0引脚的上拉电阻取下,焊接上下拉电阻。此时再重新上电,固件将在STM32上开始运行。

在Ubuntu上测试功能

  1. 安装依赖软件包:
$ sudo apt-get update && sudo apt-get -y upgrade
$ sudo apt-get install -y can-utils net-tools
  1. 查看是否检测到CAN设备:
$ ifconfig -a
# 如果在列表中发现含有can名称的设备就说明该设备可以被识别到了
  1. 直连线将两个CAN口连接起来,便于进行回环测试。
  2. 初始化CAN0和CAN1设备,比特率为1Mbits:
$ sudo ip link set can0 up type can bitrate 1000000
$ sudo ip link set can1 up type can bitrate 1000000
  1. 打开一个新终端用于监测can0接收到的信息:
$ candump can0
  1. 在一个终端中使用can1发送信息:
$ cansend can1 200#5A5A5A5A5A5A5A5A

若能在监测can0的终端中看到can1发来的信息如下,说明通信成功,模块工作正常。

can0 200 [8] 5A 5A 5A 5A 5A 5A 5A 5A

许可证

源代码根据MIT条款许可证发布。

组织:DynamicX
维护人:朱彦臻, [email protected]

该产品已经在Ubuntu 18.04和20.04下进行了测试。这是一个研究代码,希望它经常更改,并且不承认任何特定用途的适用性。