20160814 【为STM32站台】基于多核心嵌入式平台的便携式多线检仪

论文 徐 自远 689℃ 0评论

【我要为STM32站台】基于STM32L073的多核心嵌入式平台的
便携式多线检测仪

项目介绍:

  1. 方案主题;

本设计就手工查线效率低下和现有测线仪灵活性、通用性较差的问题,提出了多线检测的设计方案,以两片STM32L073单片机为核心控制部件,可对正反接口的150路数据线进行短路和断路测试,并通过液晶屏进行交互操作、实时显示测试结果。

  1. 方案功能;

对正反接口的150路数据线都能够进行短路和断路测试;
利用STM32L073灵活的控制技术,保证检测的准确性,设备便于携带;
弥补传统人工测线的缺陷,提高工作效率,检测结果直观可见;
使用240X128液晶与7寸触摸屏组成方便操作的人机界面,易用性高。

3、关键词;

STM32L073单片机;多线检测;数据处理;触摸屏。

工作原理介绍

1、硬件组成与介绍;

1.1 硬件框架设计

设计研制的第一要务,就是选择单片机芯片,需要功能合适、资源足够,且价格在研制成本能承担的范围内,通过对占用I/O口的个数的计算,确定选用STM32L073ZET6和STM32L073RBT6这两款单片机。功能与价格都能满足设计需求。

确定好核心元器件单片机,接下来完成整体电路的设计,生成PCB板进行制作,焊接元器件、搭建电路,并完成实物的装配。电路总原理图如图2所示,各模块详细原理图见附录。


图2 电路总原理图

1.2 电源供电设计

本系统为手持设备,所以需要内置电池并增加内置电池的充电管理芯片。本方案中使用TP4057作为电源管理芯片。TP4057是一款完整的单节锂离子电池充电器,带电池正负极反接保护,采用恒定电流/恒定电压线性控制。其SOT封装与较少的外部元件数目使得TP4057便携式应用的理想选择。TP4057可以适合USB电源和适配器电源工作。

引脚功能:

CHRG(引脚1):漏极开路输出的充电状态指示端。当充电器向电池充电时,CHRG管脚被内部开关拉到低电平,表示充电正在进行;否则CHRG管脚处于高阻态。

GNG(引脚2):地。

BAT(引脚3):充电电流输出。该引脚向电池提供充电电流并将最终浮充电压调节至4.2V。该引脚的一个精准内部电阻分压器设定浮充电压,在停机模式中,该内部电阻分压器断开。

VCC(引脚4):正输入电源电压。该引脚向充电器供电。VCC的变化范围在4V9V之间,并应通过至少一个1uF电容器进行旁路。当VCC降至BAT引脚电压的30mV以内,TP4057进入停机模式,从而使IBAT降至2uA以下。

STDBY(引脚5):电池充电完成指示端。当电池充电完成时STDBY被内部开关拉到低电平,表示充电完成。除此之外,STDBY管脚将处于高阻态。

PROG(引脚6):充电电流设定、充电电流监控和停机引脚。在该引脚与地之间连接一个精度为1%的电阻器RPROG可以设定充电电流。当在恒定电流模式下进行充电时,引脚的电压被维持在1V

TP4057有两个漏极开路状态指示输出端,CHRGSTDBY。当充电器处于充电状态时,CHRG被拉到低电平,在其它状态,CHRG处于高阻态。当电池没有接到充电器时,CHRG输出脉冲信号表示没有安装电池。当电池连接端BAT管脚的外接电容为10uF时,CHRG闪烁周期约0.5-2秒。


3 电源模块

1.3 显示模块设计

显示模块使用240*128液晶四线电阻式触摸屏,可进行交互操作,省去了机械按键。该屏触摸芯片输出AD参数为12位数据,所以相对精度比较高,从而使手感更舒适。显示模块主要工作是进行线路检测端口数的设置和检测结果的显示,并通过蜂鸣器进行报警提示。显示模块的电路原理图如图4所示。


4 显示模块

CH240128D-6点阵绘图型液晶显示模块(LCM)采用240×128点阵液晶显示屏(LCD)与低功耗LED背光和四线电阻式触摸屏组成,是一款邦定工艺4.9寸的240128带触摸液晶屏。内置T6963C控制器,全屏可显示8排汉字,每排显示15个(16X16点阵)汉字,可完成图形方式,文本方式以及图形与文本混合显示。Intel8080系列微处理器接口,可与MCU单片机直接连接,广泛应用于各类仪器仪表与电子设备上。引脚功能如表1所示。

1 引脚功能图

管脚

符号

管脚描述

管脚

符号

管脚描述

1

FG

铁框接地

18

FS

字体选择

2

GND

19

VEE

电压输出

3

VCC

电源

20

BLA

背光正极

4

V0

对比度调节

21

BLK

背光负极

5

WR

写数据

22

DCLK

触摸屏外部时钟输入

6

RD

读数据

23

CS

触摸屏片选信号

7

CS

片选信号

24

DIN

触摸屏串行数据输入口

8

C/D

指令、数据信号

25

STA

触摸屏应答信号

9

RST

复位信号

26

DOUT

触摸屏串行数据输出口

10-17

DB0-DB7

数据线0-7

1.4 硬件电路设计小结

经过多日的设计与修改,终于完成整体电路的设计,生成PCB板进行制作,焊接元器件、搭建电路,并完成实物的装配。PCB板如图5所示,电路板焊接完成图如图6所示。硬件电路完成后,可以进行软件部分的编程调试。


PCB正面                                PCB背面

5 PCB界面


6 电路板焊接完成图

2、此项目中STM32的功能;

stm32L073芯片在本项目中起到至关重要的作用。

1)低功耗控制

在平时工作中,stm32L073芯片处于低功耗模式,降低电池的电量消耗。当触摸屏芯片发出唤醒信号后,stm32L073芯片退出低功耗模式,进入正常工作状态。

当用户点下检测按钮后, stm32L073芯片唤醒协处理芯片STM32F103,并根据要求发送串口指令控制STM32F103芯片进行管脚检测。

2)人机界面显示

stm32L073负责本项目的人机界面控制。控制一块工业级240×128液晶屏显示检测信息,控制一块电阻触摸屏进行触摸控制。

3、软件流程介绍。

硬件电路完成后,进行软件部分的编程调试。首先研究完成操作系统的移植,其次编写各模块的驱动程序、以实现控制、显示、触摸操作功能,接着完成检测部分(将线的一端置为高电平,另一端置为低电平,然后检测高电平的一端是否被对应的一端拉低,就可以知道此线路是否为短路或断路),最后完成人机界面的调试,实用验证,并对程序进行改进完善。

3.1 检测原理与流程

多线检测仪的检测流程如图7所示,由STM32RBT6(主机)单片机通过串口向STM32ZET6(从机)单片机发送检测命令,从机模块接收到命令后,从第一个检测管脚从上到下依次置为低电平,然后查询其余管脚是否被拉低,检测完成后,将结果通过串口发送给主机模块,主机接收到信息后,判定检测的线路中的互连关系,检测完成即通过蜂鸣器鸣响告知,并将检测到的线间互连关系以表格形式显示出来。


7 检测流程图

3.2 主机模块串口处理程序

STM32ZET6(从机)单片机检测完端口后,需将检测数据通过串口发送给STM32RBT6(主机)单片机,则主机需将接收到的数据进行处理,如下为串口处理程序:

串口处理程序

void serial_cmd(void)//串口通讯命令处理

{

    uint16_t CMD=0;//定义一个命令控制字缓存变量

    uint16_t Num=Rx_num;//定义一个变量用来存储需要处理的数据数量

    uint16_t cmd_num=0;//定义一个变量用来存储当前已经处理完的命令数量

    while(Num!=0)//判断数据是否全部处理完成

    {

        if(     RxBuffer1[0] == 0xA5 )//判断命令的开头是否与通讯协议定义的前导头一致

        {

            RxBuffer1_to_UP_DATA();//将缓存中的数据赋值到结构体中

            if( jiaoyan() )//将接收到的命令进行格式数据校验

            {

                CMD=UP_DATA.CMD1;//保存控制字

                CMD=(CMD<<8)+UP_DATA.CMD2;

                switch(CMD)//查找对应的命令,进行相应处理

                {

                    case GJ_CMD:    //管脚导通数据命令

                        write_DATA();//将数据保存到Flash中

                        Data_num++;//命令数量累加

                        if(Data_num>=cmd_num)GJ_CC_OK=1;

                //当接收到的数量大于等于需接收的命令数量时,将应答标志位置1

                    break;

                    case GJ_CC_num:        //管脚导通数量命令

                    cmd_num=UP_DATA.DATA[0]*256+UP_DATA.DATA[1];//保存需接收命令数量

                    if(cmd_num==0)GJ_CC_OK=1,Data_num=0;

                    //如果需接收数量为0,则将应答标志位置1

                    break;

                    default: break;

                }

                if(Num>=(UP_DATA.Long+2))

                {

                    Num=Num-(UP_DATA.Long+2);//数据

                    memcpy(&RxBuffer1[0],&RxBuffer1[UP_DATA.Long+2],Num);

                }

            }

            else Num=0;//缓存数据清零

        }

        else Num=0;//缓存数据清零

        osDelay(1);//延时函数

    }

}

串口通讯命令处理函数程序流程图如下所示:


8 串口通讯命令处理函数程序流程图

3.3 触摸屏坐标采集程序

ADS78434线电阻触摸屏转换接口芯片。它是一款具有同步串行接口12位取样模数转换器ADS7843是一款连续近似记录(SAR)a/d转换器。可通过连结触摸屏X+触摸信号输入到a/d转化器。同时打开 Y+Y-的驱动,然后数字化X+的电压。从而得到当前Y位置的测量结果。同理,也可得到X方向的坐标。当点击触摸屏时,ADS7843会产生一串数字信号,此时程序员需将这些数据捕捉下来,并进行处理分析。电阻屏坐标采集函数流程图如图9所示。如下为触摸屏坐标采集程序:

触摸屏坐标采集程序

#define times 4//宏定义采样次数

void ADS7843_Rd_Addata(uint16_t *X_Addata,uint16_t *Y_Addata)//坐标采集函数

{

    uint16_t        i=0,j=0,k=0,x_addata[times],y_addata[times];//定义缓存变量

    for(i=0;i<times;i++)                    //采样4.

    {

        SPI1_Config();//SPI配置

        ADS7843_CS_LOW();    //芯片允许

        ADS7843_WrCmd( CHY ) ;//写入读取Y坐标控制字

        SPI1_SCK_HIGH();//产生一个下降沿

        SPI1_SCK_LOW();

        y_addata[i] = ADS7843_Read() ;//保存Y坐标AD

ADS7843_CS_HIGH();

     ADS7843_CS_LOW();    //芯片允许

        ADS7843_WrCmd( CHX ) ; //写入读取X坐标控制字

        SPI1_SCK_HIGH();//产生一个下降沿

        SPI1_SCK_LOW();

        x_addata[i] = ADS7843_Read() ; //保存X坐标AD

ADS7843_CS_HIGH();

    }

    for(i=0;i<times;i++)//将采集的坐标数据进行升序排列

    {

    for(j=0;j<times;j++)

    {

if(x_addata[j] < x_addata[i])

{

k = x_addata[j];

x_addata[j] = x_addata[i];

x_addata[i] = k;

}

            if(y_addata[j] < y_addata[i])

{

k = y_addata[j];

y_addata[j] = y_addata[i];

y_addata[i] = k;

}

}

}

    *X_Addata=((x_addata[1] + x_addata[2]) >> 1); 9 屏坐标采集函数流程图

//去掉一个最大的和最小的,然后取平均值

*Y_Addata =((y_addata[1] + y_addata[2]) >> 1);

}

3.4 从机模块管脚检测程序

STM32ZET6(从机)单片机接收到检测管脚指令时,从机需对所有端口进行逐一检测,若检测到有端口与其他端口导通,则需将此信息保存起来,等待全部检测完成后,再将所有数据信息发送给主机。管脚检测函数流程图如图10所示。

如下为管脚检测程序:

管脚检测程序

void GPIO_text(uint8_t num)//管脚检测

{

    uint16_t i=0,j=0;

    DATA_num=0;

    for(i=0;i<(num/2);i++)//循环置P1端为输出,并读P1和P2端IO口状态

    {

        GPIO_Init(P1_gpio[i][0],P1_gpio[i][1]);//配置P1端IO输出口

        for(j=i;j<(num/2);j++)//循环P1端1/2Num次

        {

            if(Read_GPIO_Pin(P1_gpio[j][0],P1_gpio[j][1])==0&&i!=j)

            {    //读P1端IO口状态

                DATA[DATA_num][0]=1;DATA[DATA_num][1]=(i+1);

                //保存此端口与其导通端口的数据信息

                DATA[DATA_num][2]=1;DATA[DATA_num][3]=(j+1);

                DATA_num++;//导通数量累加

            }

        }

        for(j=j;j<num;j++)//循环P2端1/2Num次

        {

            if(Read_GPIO_Pin(P2_gpio[j-num/2][0],P2_gpio[j-num/2][1])==0&&i!=j)

            //读P2端IO口状态

            {

                DATA[DATA_num][0]=1;DATA[DATA_num][1]=(i+1);

                //保存此端口与其导通端口的数据信息

                DATA[DATA_num][2]=2;DATA[DATA_num][3]=((j-num/2)+1);

                DATA_num++;//导通数量累加

            }

        }

    } 图10 管脚检测函数流程图

    for(i=0;i<(num/2);i++)//循环置P2端的输出口,并读P2端IO口状态

    {

        GPIO_Init(P2_gpio[i][0],P2_gpio[i][1]);//配置P2端IO输出口

        for(j=i;j<(num/2);j++)//循环P2端1/2Num次

        {

        if(Read_GPIO_Pin(P2_gpio[j][0],P2_gpio[j][1])==0&&i!=j)//读P2端IO口状态

            {

                DATA[DATA_num][0]=2;DATA[DATA_num][1]=(i+1);

                //保存此端口与其导通端口的数据信息

                DATA[DATA_num][2]=2;DATA[DATA_num][3]=(j+1);

                DATA_num++;//导通数量累加

            }

        }

    }

}

实物与演示

1、实物图片与应用实验;


实物图片

成品应用试验

样机完成后,对不同数量和类型的接线进行检测试用,并与传统万用表人工检测方式进行了比对,对检测耗费的时间、检测结果的准确率进行了统计。通过比对记录于表一。

表一
多线检测仪使用比对记录

实验序号

被测线数

设置断路、短路故障数

万用表人工检测

多线检测仪检测

检测平均耗时

检测准确率

检测平均耗时

检测准确率

1

1

0

1s

100%

0.5s

100%

2

5

0

5s

98%

0.5s

100%

3

10

3

14s

91%

0.5s

100%

4

15

3

25s

87%

0.5s

100%

5

20

4

40s

86%

1s

100%

6

30

4

55s

82%

1s

100%

7

40

9

81s

76%

2s

100%

8

50

15

122s

73%

3s

100%

结论:使用多线检测仪,可以完成对不同数量线路的检测(150路),直接给出线路间互连关系表格,检测用时明显缩短、工作效率高,检测过程由程序控制自动进行,不会出现因人工操作失误导致的误判、准确率高,操作使用便捷。

后期改进意见:人机界面更优化,显示更明确,并研究与手机的通讯,检测种类更丰富。其准确率对应图表如下图所示。


14 检测耗时与准确率对应表

2、演示视频和源码;

http://v.youku.com/v_show/id_XMTYzNDIzNzAxMg==.html

转载请注明:徐自远的乱七八糟小站 » 20160814 【为STM32站台】基于多核心嵌入式平台的便携式多线检仪

喜欢 (0)

您必须 登录 才能发表评论!

苏ICP备18041234号-1 bei_an 苏公网安备 32021402001397号