基于功能模块及权重因子的嵌入式控制器原理图自动设计算法及实现
2022-07-21李国建路林吉
李国建 路林吉
(上海交通大学,上海,200240)
0 引言
在传统的嵌入式控制器的原理图设计中,只能依靠硬件工程师的设计经验,通过Altium designer等EDA软件进行原理图的设计,这些软件往往只提供元器件级别的数据库,工程师需在元器件的基础上进行原理图的绘制和编辑,硬件工程师自身水平决定了原理图设计的正确与否。
本文基于“模块化设计”的思想,将硬件原理图分为MCU主控电路和外围功能电路两大部分,将外围电路根据功能不同分成不同的标准功能模块,形成数据库,结合专家系统连线算法,实现嵌入式系统硬件原理图设计的自动化实现。
1 常规嵌入式系统硬件设计方法
在常规的嵌入式系统设计中,硬件工程师在接到硬件设计的任务后,第一步是分析项目需求,将项目需求细化成具体的某几项功能,然后根据功能要求进行对应的功能模块设计,包括MCU的选型、功能模块的设计方案、元器件的选型等等,最后利用Altium designer等EDA软件完成原理图的绘制,生成BOM(Bill of Material,物料清单)表。
以一个简单的蓄水池液位控制设计为例,需要MCU、A/D模块、显示模块和电机驱动模块等,整个设计过程完全依靠硬件工程师的设计经验,设计的原理图正确与否完全取决于设计者自身的水平。尤其对于刚入职的硬件工程师来说,硬件原理图的设计起步很困难,往往会出现模块功能设计不合理、元器件选型错误等问题,拖延了项目进度,甚至会带来一定的经济损失。
2 基于功能模块的嵌入式控制器设计
2.1 功能模块的设计
应用“模块化设计”的思想[1],任何嵌入式系统都可以被分为两个部分,一个是MCU主控部分,另外就是围绕着MCU主控、具有各种功能的外围电路。这些外围电路可以根据功能和类型不同,划分成为相对独立的功能模块,每个功能模块可以看成一个黑盒,内部是由元器件组成的实现既定功能的内部电路,外部只有和MCU连接的外部端口。
图1给出了64KB EEPROM程序存储器扩展模块,对外界来讲,除VCC和GND以外,该模块只有SDATA和SCLK两个接线端口。
图1 64KB EEPROM程序存储器扩展模块内部结构和外部端口
根据上述思路,可以把嵌入式控制系统划分成一些功能模块大类,这些功能模块在硬件设计过程中具有较高的使用频率,每个功能模块大类下面都有通用性和实用性较强的具体功能模块。
以外部通信模块为例,它包含了RS232通信模块、RS485通信模块、WIFI通信,TCP/IP通信模块等常用的通信模块[2]。这些具体模块在进行原理图设计时,可以充分考虑其性能、成本及通用性,从而实现功能模块的标准化。
表1 功能模块的分类
2.2 数据库设计
数据库技术是计算机数据处理与信息管理系统的核心,研究和管理的对象是数据[3]。在本项目的研究中,数据库系统则采用了开源的MySQL数据库系统,各个功能模块和其他信息均以结构化数据的形式存储在数据库中,方便随时调用。
数据库主要起到以下几个方面作用:
1)数据存储:在软件开发起步始阶段,存储用户信息,功能模块的各类信息,包括外部详图,框图、属性表、BOM表等信息,还包括原理图,建立基础数据库,方便用户在使用的时候进行相关数据的调用;
2)数据修改与保存:在软件运行的过程中,用户所需要的数据从基础数据中被提取出来,形成临时数据暂存在数据库中[4],后续可对其进行数据的调整、删除等各类操作。此外,用户还可以根据需要,按照特定的规则要求,对数据中的数据进行添加,比如对功能模块的导入等。
基本数据库表包括如下内容:
1)用户信息表;
2)功能模块总表;
3)功能模块的详图表;
4)功能模块的框图表;
5)功能模块的属性表;
6)原理图表;
7)器件表。
2.3 算法设计
基于功能模块的嵌入式控制系统设计要点如下:
1)以主控模块(MCU模块)为核心;
2)所有的外围模块均只和主控模块连接;
3)假设各个模块的VCC、GND都是同规格的;
4)多个模块依次连接到主控模块;
5)类似于总线型,可以接多个模块的连线;
6)不考虑模块连线的驱动能力(假设足够)。
2.3.1 功能模块选择算法
首先按照项目设计需求,进行功能模块选择:
1)用户根据项目需求分析将各模块需求录入需求分析表后,程序读取相关的需求数据,再根据优先级依次开始遍历查找电源模块、通信模块等外围电路功能模块。在同等功能情况下,以输入输出数量较少为原则。
2)外围模块个体按照优先级依次查找完成之后,则对功能模块外部端口的数目进行统计,再对MCU模块集合进行扫描。MCU必须满足输入、输出、通信各部分要求,同时也要满足外围电路接线的限制。
3)在满足上述条件的前提下,选择外围接线数最少的MCU模块。
模块选择算法如下(以MCU主控模块为例):
2.3.2 模块接线端口连接算法
模块接线端口连接算法是基于权重方法进行,也即按照优先级进行,具体算法如下:
1) 连接所有的模块VCC和GND管脚;
2) 判别MCU主控模块的第3个管脚是何种类型(输入或输出);
3) 判别MCU主控的第3个管脚与相应类型的模块的输入(假设主控模块是输出)是否匹配;
4) 依次判别MCU主控模块的第4、第5个管脚等等。
2.3.3 连线矩阵自动生成和标记算法
连线矩阵是本项目的核心内容,它表示了各个模块之间连线的方式。具体实现方法如下:
1) 将选中的模块依次按照优先级及管脚数量做成一个N×M二维矩阵,其中N为MCU主控模块的管脚数,M为所有模块的管脚数总和;
2) 以行为单位,依次扫描列中每一个坐标的定义字符,例如,如果行的名称为VCC,则在列的名称为VCC交叉处数值赋1,如果行的名称为GND,则在列的名称为GND交叉处数值赋1;
3) 从除MCU外的第一个功能模块的第一个行引脚开始扫描,只扫描MCU所在列的引脚(VCC、GND除外),如果该功能模块某个行引脚的属性恰好与MCU列引脚相反(如表2中的引脚1是输出,MCU引脚2是输入),则在两者交叉处的矩阵的位置赋1;
4) 如果是通信接口(如RS-232、RS-485等),则在外围模块和MCU引脚名称完全一致的矩阵交叉处的位置赋值1;
5) 重复上述步骤,直到所有模块的管脚都扫描结束及在相应的交叉点赋值结束。注意:某一矩阵交叉处被标记后,则不再参与接下来的扫描。
最终,可以形成一个自动生成的EXCEL表,这个表(表2)代表了各个模块之间的连线关系。
表2 矩阵自动生成和标记算法示意表
3 实验结果
根据上述思路,笔者设计了一个嵌入式控制器原理图自动设计平台,平台界面见图2所示。
图2 设计平台主界面
在这个平台上,笔者进行了多个嵌入式控制器原理图自动设计,实践证明设计出来的原理图是正确无误的。
4 结论
本文在建立MCU主控模块和外围电路模块的基础上,采用基于权重因子的连线遍历算法,并采用矩阵方式表示各个模块之间的具体连线,通过编制专用软件实现了嵌入式控制器原理图的自动设计。本文提出的方法,为高质量、快速实现嵌入式控制器原理图的设计提供了一种可行的思路。