2.3.1 核心板方案设计
核心板的硬件结构包括控制芯片电路、下载电路、晶振电路、复位电路、芯片电源
电路、 RS485 通信电路、状态选择电路、状态指示电路、 I/O 指示电路、电平转换电路
等。
控制芯片采用目前较为流行的“ MCU+FPGA ”的方式进行控制 [32] 。 MCU 是微控制
单元( Micro Controller Unit ),又称单片微型计算机或单片机,是将中央处理器、内存、
计数器、 USB 、 A/D 转换、 UART 、 PWM 、 DMA 等周边接口集成到一片芯片上,形成
芯片级计算机,应用于手机、遥控器、汽车、机械臂等控制领域。 FPGA 是现场可编程
门阵列( Field Programmable Gate Array ),它是专用集成电路中的一种半定制电路,通
过编程对底层逻辑门阵列进行组合,从而实现内部各模块之间以及 I/O 之间的连接方式。
FPGA 具有以下优点:并行度高,可以支持多个模块同时进行独立的计算;可定制,即
通过编程实现自己的逻辑电路,并且可以无限次编程;运算速度快,通常情况下任务在
硬件上跑比软件上跑得要快,比如比较一个 64 位数高 32 位和低 32 位的大小,在 CPU
下需要 2 条区数指令,两条位与指令,一条移位指令一条比较指令和一条写回指令,而
在 FPGA 下只要一个比较器就行了。 FPGA 同时也存在着缺点,所有功能均依靠硬件实
现,无法实现分支条件跳转等操作,同时诸如 A/D 转换、 flash 等外设很少,这正好能
够靠 MCU 来弥补。因此本文利用 MCU 和 FPGA 组合的方式,能够最大的发挥两者各
自的优势 [33] 。
MCU 选择意法半导体集团开发的 32 位 STM32 微控制器,该芯片是基于 ARM
Cortex-M 处理器内核的嵌入式单片机,有着集成度高、低功耗等特点。 FPGA 选择
ALTERA 的 Cyclone IV 系列芯片,该系列芯片在 Cyclone 、 CycloneII 、 CycloneIII 的基
础上提升了性能并降低成本。 STM32 利用其自身丰富的外设作为主控芯片,使用 UART
与外界通信; FPGA 利用运算速度快、并发性好的特点,对 I/O 信号进行处理。 STM32
和 FPGA 之间的通信方式有串行通信、并行通信以及共用存储器通信。串行通信所需引
脚少,但是速率没有另外两种通信方式快;共用存储器通信方式在硬件线路上较为复杂,
一般用在数据交换量较大的场合,用在这里有点大材小用;并行通信虽然占用引脚较多,
但是通信效率高 [34] 。综合来看选择并行通信方式。
电源电路需要根据控制芯片所需电压来决定,核心板上选择的控制芯片 STM32 的
具体型号为 STM32F103ZET6 ,工作电压为 3.3V , FPGA 的具体型号是 EP4CE6E22C8 ,
工作电压为 3.3V 、 2.5V 和 1.2V 。
STM32 的下载方式包括 SWD 和 JTAG 方式, SWD 模式比 JTAG 在高速模式下面更
加可靠,在大数据量的情况下面 JTAG 下载程序会失败,但是 SWD 发生的几率会小很
多,并且 SWD 需要的引脚数量少,可以节省 PCB 空间。 STM32 虽然有 8MHz 内部晶
振,但是精度没有外部配置的高速晶振精度高。外部晶振有高速晶振和低速晶振两种,
典型的低速晶振为 32.768KHz ,高速晶振可选择 4~32MHz ,然后可以经过锁相环设置将
主频升至 72MHz 。核心板上需要预留的扩展模块接口用于连接多个扩展模块,而与扩
展模块之间的通信方式这里选择 RS485 通信,因为 RS485 支持一主多从模式。同时
STM32 周围需要设计状态选择电路和状态指示电路,状态选择电路是用拨码开关作为
STM32 的引脚输入,状态指示电路是用 LED 作为 STM32 的引脚输出。
FPGA 没有片内 flash ,因此 FPGA 的程序需要存储到片外 flash 中,这里选择
EPCS4SI8N 作为 FPGA 的片外 flash 。 FPGA 的下载方式有 JTAG 模式、 AS 模式和 PS
模式。 AS 模式是将程序烧入到配置芯片 EPCS 中, FPGA 每次上电时,作为控制器从配
置芯片 EPCS 中读取数据; PS 模式是将 EPCS 作为控制器件,将 FPGA 作为存储器, FPGA
上电时, EPCS 会主动将数据写入到 FPGA 中,此模式可以实现对 FPGA 的在线编程;
JTAG 模式是最常用的一种模式,直接把程序烧录到 FPGA 的 SRAM 中,所以掉电后程
序会消失。 FPGA 在正常工作时,它的配置数据存储在 SRAM 中,加电时须重新下载。
在实验系统中,通常用计算机或控制器进行调试,因此可以使用 PS 。但是在实用系统
中,多数情况下必须由 FPGA 主动引导配置操作过程,这时 FPGA 将主动从外围专用存
储芯片中获得配置数据,而此芯片中 FPGA 配置信息是用普通编程器将设计所得的 .pof
格式的文件通过 AS 烧录进去。通过 JTAG 模式烧录 .sof 文件会将程序烧录到 SRAM 中,
但是通过文件转换,将 .sof 文件转换成 .jic 文件,通过 JTAG 模式烧录会将程序通过 FPGA
固化到配置芯片 EPCS 中,这样 FPGA 重新上电是会从 EPCS 中读取程序。本文最终考
虑到调试的方便性,所以选择了 JTAG 模式。
FPGA 的主频需要用到外部晶振, STM32 内部有晶振的起振电路故可以用无源晶振,
但 FPGA 没有,所以 FPGA 外部只能接有源晶振,这里选择 50MHz 作为 FPGA 时钟源,
通过锁相环的倍频后可以得到高达 300MHz 的时钟。
FPGA 的引脚既可以配置为输入模式,也可以配置为输出模式,都是 3.3VTTL 信号,
FPGA 输入输出引脚直接控制 LED ,作为 I/O 指示灯,共 40 个, 16 个输入点、 16 个输
出点、 8 个高速输出点。核心板与接口板通过接插件接在一起,用来传递 I/O 点数据信
号,在 FPGA 与接插件之间还要接入电平转换芯片,在 3.3VTTL 信号与 5VTTL 信号之
间转换,并且电平转换芯片能够起到保护作用,避免 FPGA 引脚直接与外部连接 [35] 。
2.3.2 接口板方案设计
接口板的硬件结构包括光耦输入电路、继电器输出电路、晶体管输出电路、 RS485
通信电路、 USB 通信电路、以太网通信模块、 DC/DC 降压电路、与核心板和电源板的
接口电路等。
光耦输入电路用于对外部开关量信号的输入,一般 PLC 的输入模块由若干输入点
和一个公共端组成。如图 2-9 中 a) 和 b) 是 PLC 直流输入电路的两种不同形式,区别在于
当外部开关闭合时, a) 中的电流从公共端 M 流出 PLC (源型输入), b) 中的电流从公共
端 M 流入 PLC (漏型输入)。当开关闭合时, PLC 内部光耦的发光二极管点亮,光敏三
极管饱和导通,再将该信号传送至中央处理器,认为有输入信号。 c) 和 d) 分别是 a) 和 b)
的多路信号结构。为了适应更多的现场设备,本文使用 e) 所示的混合型输入电路,光耦
选择双向输入型光耦,外部接线形式既能源型输入也能漏型输入。
2.5 软件方案设计
2.5.1 嵌入式操作系统
虽然嵌入式应用程序能够在芯片上直接运行,但是为了能够更加合理的调用多任务、
充分利用系统资源,本文采用在 STM32 上移植嵌入式操作系统的方案。目前常用的嵌
入式操作系统有 μClinux 、 μC/OS-II 、 eCos 和 FreeRTOS 。
μClinux ( micro-control Linux )是微控制 Linux ,同标准 Linux 相比, μClinux 内核
小,但仍然继承了 Linux 良好的稳定性、可移植性,并具有强大的网络功能、出色的文
件系统、标准丰富的 API 以及 TCP/IP 网络协议等。在移植方面,由于 μClinux 是 Linux
针对嵌入式系统的一种改良,所以其结构比较复杂,目标处理器需要足够容量的外部
ROM 和 RAM ,对于 STM32F103 来说,移植此系统需要至少 512KB 的 RAM 空间, 1MB
的 ROM/FLASH 空间,而 STM32F103 仅有 256KB 的 FLASH ,所以需要外接存储器,
这就增加了硬件成本。并且 μClinux 结构复杂,移植难度大,实时性也差,不适合作为
本系统的移植方案。
μC/OS-II 是用 C 语言编写的一个结构小巧、抢占式的多任务实时内核。 μC/OS-II
最多支持 64 个任务,分别对应优先级 0~63 ,其中 0 代表优先级最高, 63 为最低,系统
保留了 4 个最高优先级和 4 个最低优先级,所以用户可以使用的任务数有 56 个。
μC/OS-II
能够提供任务调度与管理、内存管理、任务间同步与通信、时间管理和中断服务等功能,
具有执行效率高、占用空间小、实时性能优良和扩展性强等特点。在移植方面, μC/OS-II
支持当前流行的大部分 CPU ,由于其本身内核小,最小代码仅有 2KB ,需要数据空间
仅有 4KB 的 RAM ,所以移植相对简单,只需要修改与处理器相关的代码即可,比较适
合在本系统上移植。
eCos ( embedded Configurable operating system )是嵌入式可配置操作系统,是一种
源代码开元的能够配置、可移植、面向深度嵌入式应用的实时操作系统。其最大的特点
就是内核可配置,采用模块化的设计方式带来的灵活的配置,核心部分由小同的组件构
成,通过 eCos 配置工具能够方便的配置内核、 C 语言库和底层运行包等组件,能够很
好的满足不同嵌入式应用需求。在移植方面, eCos 内核小,最小代码仅有 10KB ,所需
数据空间仅有 10KB 的 RAM ,可移植性好,比 μClinux 和 μC/OS-II 都更加容易,但是
其应用并不广泛,资料没有 μC/OS-II 多,更适用于例如消费电子领域中的应用。
FreeRTOS 是一款完全免费并能够在小 RAM 单片机上运行的实时操作系统,具有源
代码开元、可移植性强、可裁剪、调度策略灵活等特点。 FreeRTOS 操作系统能够完成
任务管理、时间管理、信号量、消息队列、内存管理、记录等功能,可以满足一个最小
操作系统的基本需求。在移植方面, FreeRTOS 能够方便的移植到不同处理器上,例如
ARM 、 MSP430 、 PIC 、 AVR 、 C8051F 等, STM32 的内核就是 ARM ,所以 FreeRTOS
适合本系统移植,也是本文所采用嵌入式操作系统。
2.5.2 软件系统
软件系统由系统程序和用户程序组成。系统程序是固化在控制芯片中的程序,本控
制器由主控制器和远程模块构成,主控制器上有 STM32 和 FPGA 两个控制芯片, 5 种
远程模块为实现各自功能分别有一个 STM32 作为控制芯片,因此需要设计 7 套不同的
系统程序,编程语言包含 STM32 所需的 C 语言和 FPGA 所需的 Verilog HDL 语言。用
户程序的编辑本文设计了两套方案,一是设计一款 PC 端编程软件,通过 USB 端口下载
到主控制器 STM32 上的 flash 中,另一种是现场编程功能,即通过人机交互界面,利用
关键词让没有编程基础的普通用户能够编写简单的测试程序,方便现场调试 [36][37] 。
2.5.3 模块化功能
本文设计了模块化功能,运动控制和过程控制。运动控制经常用于机械、机床、机
器人、电梯控制等场合,用于驱动步进电机、伺服电机或交流电动机,此时需要控制器
产生相应的驱动信号,如驱动异步交流电动机需要用 SPWM 、 SVPWM 算法,同时运动
控制还会经常用到编码器来测量速度和位置,本文在软件上设计高数计数器功能。过程
控制经常用于冶金、化工、锅炉控制等场合,用于对温度、压力、流量等模拟量的闭环
控制,此时需要控制器实现 PID 算法。
2.5.4 通信协议
各个 PLC 厂商一般都有自己的通信协议,比如罗克韦尔的 PLC 都支持 DF1 协议,
GE 的 90-70 和 90-30 系列 PLC 支持 SNP 协议,西门子 S-200 系列 PLC 支持 MPI 、 PPI
等协议,施耐德 PLC 支持 Modbus 和 Modbus Plus 协议,欧姆龙 PLC 支持 Host Link 协
议,三菱 PLC 支持 CC-Link 协议,松下 PLC 支持 MEWTOCOL-COM 协议。这其中Modbus
已经不仅仅是 PLC 的通信协议,在许多智能仪表、变频器中也有应用,已经在工控领
域中得到广泛的应用 [38] 。本文选择 Modbus 作为主控制器与远程模块之间通信的数据协
议,上述的协议中 MEWTOCOL-COM 协议对外开放且简单,本文在其基础上做些更改
作为 RMEN 与 I/O 模块之间通信的数据协议,后称为 RM-COM 协议。
信迈提供STM32+FPGA的运动控制解决方案。