前言
最近需要做一块工业设备的控制板,从方便编程和成本出发,选择了esp32 c3作为主控,但是在加入了屏幕、编码器后,全芯片就只剩下4个io可以用了,无法满足多路控制需求;所以,我打算加入一块mcu扩展出多个io接口,mcu与现有主控之间通过i2c协议通信。
现在有关两块控制芯片负责哪些内容无法定夺,写一篇文章,我自己也好梳理一下。
难点:通过自己设计硬件和软件,代替成熟的PLC,需要充分考虑到实际生产时控制板的稳定性,应急情况下如何快速停机/车。
大概分为两种方式,以A芯片代指esp32,B芯片代指mcu。
方式一
A芯片负责用户界面,即屏幕显示,编码器反馈,按钮反馈;负责把每一次指定接口的开关信号指令给B芯片;并且把用户自定义的数值保存在flash中。
B芯片负责接收A芯片的指令,判断可行后,对具体io进行信号输出。
此种通信频率高。
方式二
A芯片负责用户界面;对于控制相关的信号,只输出行为指令给B芯片,由B芯片进行对信号输出可行性,信号输出接口选择,信号输出时间的判断和操作。
利弊
方式一
利:将多数代码放在A芯片中,充分利用A芯片的大flash空间优势;工艺更新可以只升级A芯片的程序,编程简单。B芯片的指令兼容性高,可以一套固件应对多种生产需求。
开发时间成本和硬件成本低,控制板泛用性强。
弊:芯片间通讯频繁,每一个决定性指令均会经过一次芯片间通讯,若出现数据传输错误,可能导致生产安全事故,虽然B芯片能加入代码进行指令的可行性验证,但很难完全排错。A芯片可能会因为人为误操作导致死机/出错,此时控制信号不可信,也无法由B芯片判断对错;若在B芯片中写入完整的工艺流程判断指令对错,那与方式二无异。
传感器数据也需要由B芯片回传给A芯片,交其处理。
芯片间通讯出错概率高、出错事故率大(相对)。
方式二
利:代码执行与用户操作分开,A芯片只作为“赛跑”的发令员,“赛跑”的所有细节操作均交给B芯片处理、执行,能增加生产时的稳定性;传感器信息可以一并由B芯片处理,省去通讯时间,快速反馈。
稳定性高。
弊:每一套生产需求都得编写两套代码,程序后期升级困难;A&B芯片强绑定,若一颗芯片需要更换得一起换,售后成本高;对B芯片素质要求高,复杂控制仍会有出错空间。程序编程较为困难,调试时需要同时更新两个芯片的程序。
开发时间成本极高。
结语
这几天搞这些真的是花钱又花时间,有点撑不住了;此文我会分享一下,读者可以一起思考思考哈。
最后的解决方案一定是个取两者利处的最优解,还得让我思考一段时间,决定好了会写文章整理的。