概述
在和客户的接触中,发现多个客户参与了仓储项目,也算是一个典型项目案例,具体情况如下:
- 每个货架货位一个显示屏,显示货品名称、库存数量等基本信息
- 通过订单系统发送通信请求,将需要取货的货品屏幕背景颜色改变,并显示取货数量。
- 对于价值较高的货品,比如药品货架,需要带有电子秤,当货品拿走后,可以自动根据重量判断货品数量,防止出错
客户常用的方案是使用STM32单片机接电子秤HX711,同时接一个串口屏完成显示,对于这个方案,我们的意见是使用SHMICTRL串口屏可以完全减掉STM32单片机,直接使用串口屏驱动HX711,并且使用485完成通信
硬件框架
此项目硬件设计重点在于两点,一是大规模多屏带来的供电问题,二是屏端电子秤驱动
一、供电模式:
考虑到大量屏幕使用,为减少施工难度,屏端采用了VH3.96mm的4P座子,这种设计在行业中称“手拉手连接”,通过4P的连接线将相邻的两块屏连接起来完成串联,解决供电和通信问题;
但是这种模式,会有一个电流累计的问题,例如手拉手一组10块屏幕,单屏供电是5V 300mA,则10块屏幕最初的那个插座将有3A电流,这会导致大量的发热和线损,会出现这组最后一块屏亮度比第一块屏差很多的现象。
为解决这个问题,就需要将供电电压升高来降低电流,从而提高一组屏的串联数量。按2A最大供电电流来算: 3.3V 300mA (3.3*0.3=0.99W;0.99W/90%=1.1W; 1.1W/12V=0.092 约92mA 2/0.092=21)因此一组大约可以带20~22块屏
实际电路如下:
通过DC-DC变压将12V转化成3.3V
这是485通信电路:
二、电子秤电路:
通过串口屏的E5和E6扩展端口接到HX711的DA和CLK端口,就可以使用串口屏中的程序控制IO端口获取电子秤的重量数据
软件实现:
void getdzc(){
//获取电子秤AD值
int i;
gpio_mode(4,1); //clk
gpio_mode(5,2); //da
gpio_out(4,0);
count=0;
while (gpio_inp(5)==1){};
for (i=0;i<24;i++){
gpio_out(4,1); //SCLK H
count=count<<1;
gpio_out(4,0); //SCLK L
count=count+gpio_inp(5);
}
gpio_out(4,1); //SCLK H
count=count^0x800000;
gpio_out(4,0); //SCLK L
}
以上是核心函数,通过控制E5 E6端口读取电子秤的ad值。