基于CAN总线的老化测试系统的设计
摘要: 汽车上用的电子设备的可靠工作与优良性能关系者驾驶者的生命安全。车用电子设备出厂前要求对设备内部电路板进行长时间老化测试,以检测电路板在高温环境和各种输入信号条件下,是否仍正常工作。只有经过老化测试的电路板才能出厂。由于需要老化测试的电路板数量巨大,要求该系统能同时老化测试许多块被检测电路板,因此设计了本老化测试系统。整个老化测试由 1个通信模块、 10个测试模块、1个温控模块及上微机软件构成。本老化检测系统的系统结构图如图 1所示。
0 引言
汽车上用的电子设备的可靠工作与优良性能关系者驾驶者的生命安全。车用电子设备出厂前要求对设备内部电路板进行长时间老化测试,以检测电路板在高温环境和各种输入信号条件下,是否仍正常工作。只有经过老化测试的电路板才能出厂。由于需要老化测试的电路板数量巨大,要求该系统能同时老化测试许多块被检测电路板,因此设计了本老化测试系统。整个老化测试由 1个通信模块、 10个测试模块、1个温控模块及上微机软件构成。本老化检测系统的系统结构图如图 1所示。
图 1 系统结构图在本系统中,每个检测模块最多可同时检测 10块电路板,共有 10个检测模块,因此,整个系统在一次老化检测过程可以同时检测100块电路板。检测模块将检测的数据通过 CAN通信送给通信模块,由通信模块通过串行通信发送给上位机,由上位机软件对检测数据进行解析,判断被测电路板的工作状态,显示每一块被测电路板的工作状态,存储每块被测电路板的检测数据,生成历史报表。上位机软件还向操作员提供良好而方便的人机交互界面,操作员通过该界面,可以设置系统老化的时间、温度与测试模式。
1 通信模块设计
通信模块在老化系统中处于核心地位,它完成两方面的任务:一方面,通过串行异步通信与上位机通信,接收用户通过上位机发来的控制命令,向上位机发送检测的数据。另一方面,通过 CAN通信方式与 10个检测模块及 1个温控模块通信,向检测设备发送命令和采集数据。通信模块的硬件系统框图如图 2所示。
1.1 硬件设计
通信模块采用 C8051F040作为核心。C8051F040具有许多优点。1.采用高速 8051微控制器内核,流水线结构,大部分指令的执行时间为一或两个系统时钟周期。
2.有 4352字节的内部 RAM和 64K字节的 FLASH,满足大多数应用设计对存储空间的需要,无需外接存储器,因而了简化系统设计。
3.配置多种端口,如 SPI、SMBus和 UART。
4.C8051F040内置标准 CAN控制器,只要外接 CAN通信接口芯片就可以进行通信,方便实现 CAN总线通信,提高通信的可靠性。
[#page#]
由于 C8051F040集成的是 CAN控制器,要使实现 CAN总线通信,还需要外接 CAN总线收发器,常用的 CAN总线收发器有 Philips公司的 PCA82C250收发器、高速 TJA1050收发器等。本设计采用了 TJA1050高速 CAN收发器,TJA1050具有电磁辐射低、防短路、不上电时对总线无影响等特点。为了进一步提高系统的抗干扰能力,C8051F040的 CAN控制器引脚CANTX、CANRX和收发器 TJA1050之间并不直接相连,而是通过由高速光耦 6N137构成的隔离电路后再与 TJA1050相连,这样就可以很好的实现了 CAN总线上各节点的电气隔离。增加隔离电路虽然增加了节点的复杂性,但它却提高了节点的稳定性和安全性。此外,为避免信号反射,导致通信的可靠性与抗干扰能力下降,甚至无法通信,因此,在 CAN总线的两端需要加有 2个 120欧姆的总线阻抗匹配电阻。由于 C8051F040的端口电压为 3.3V,串行通信电路采用的电平转换芯片为 MAX3232。
1.2 软件设计
1.2.1 串行通信程序设计
通信模块一方面通过串行通信接收上位机的命令,主要命令有启动、停止和参数设置命令。用户通过参数设置命令为系统设置不同参数,可以保证老化的正确进行。另一方面通过串行通信向上位机发送检测到的数据。为简化设计,通信模块和上位机的串行通信采用固定长度的信息帧格式,一帧信息包括帧头、有效数据或命令、 CRC16校验位等。通信模块接收上位机信息通过中断方式实现。在中断服务程序中,每接收到一个帧头后,开始接收后面若干字节的信息,经 CRC16校验有效后,就认为是一个有效的信息帧,按照约定的串行通信协议解析该信息帧,取出其中的有效命令。通信模块每收到一个有效命令帧,向上位机发送一帧应答信息。为保证通信正确,上位机软件对通信采用超时机制。
由于通信模块接收命令和处理命令速度的不同步,为保证上位机发来的每条命令得到执行,需要将有效命令放入到命令缓存队列的队尾。该命令缓存队列采用环形结构,接收的有效命令被放到队尾,而主程序从命令缓存队列的头部取出一条命令,进行后期处理。为方便从命令缓存队列存放或存取一条命令,在实现命令缓存队列时,采用了二维数组结构,即数组的每一个元素为一条固定长度的有效命令。通过选取适当的队列长度,可以保证在正常工作中,保证命令缓存队列不会产生溢出。本设计中,命令缓存队列的数据结构如下:
unsigned char s_queue[QUEUE_LEN][CMD_PACK_LEN];
unsigned char s_front;
unsigned char s_rear;}
通信模块向上位机发送检测数据时,按照约定的串行通信协议把一组完整的检测数据组装成一个信息帧发送。为简化设计,该信息帧的发送不采用中断方式,而是采用查询方式完成。为减少 C8051F040的等待时间,结合 C8051F040的时钟频率,串行通信采用了的波特率为 57600bps。经过在现场测试,在此波特率下进行串口通信,没有引起通信的错误。
1.2.2 CAN通信程序设计
通信模块与 10个检测模块及 1个温控模块通过 CAN总线连接。理论上,在 CAN总线上,任意一个检测模块都可以向通信模块发送检测到的数据,通信控制板模块可以同时向 10个检测模块发送命令。 CAN总线上的发送的数据帧带有 ID字段,ID字段的值决定每个数据帧的优先级,数据帧的 ID值越小,该数据帧的优先级越高。同一时间,在 CAN总线上,不同的节点,不能发送相同 ID值的数据帧。否则会造成通信错误。在本设计中,分配每个检测模块 1个固定的 ID值,可以看作该设备的地址编号。这样不同的设备发出的数据帧具有不同的优先级。这样导致一个问题:如果任由每个检测模块主动向通信模块发送数据帧,会造成 ID值较大的数据帧因优先级低,而不能发出。另外,每个检测模块的设计也采用了 C8051F040的作为控制核心,一方面完成信号检测,另一方面完成与通信模块的 CAN通信。
在 C8051F040的 CAN控制器内部有 32个缓冲区,每个缓冲区为 8字节,每个缓冲区需要指定一个固定的 ID值。每个缓冲区可以被设置为发送缓冲区或接收缓冲区。当某个缓冲区被设置为发送缓冲区时,该数据帧在底层带有 ID值。当该缓冲区被设置为接收缓冲区时,则仅接收 CAN总线上具有相同 ID值的数据帧。
在设计中,通信模块的 CAN控制器的 32个缓冲区与 ID值分配如下:第 1至第 10缓冲区为发送缓冲区,对应的 ID值 21至 30。第 1缓冲区用于向第 1个检测模块发送数据帧,依次类推,第 10缓冲区用于向第 10个检测模块发送数据帧。第 11缓冲区为发送缓冲区,对应 ID值为 31,用于向温控模块发送数据帧。第 20缓冲区至第 30缓冲区为接收缓冲区,对应 ID值 50至 60。与此对应,则 10个检测模块的 CAN控制器的 32个缓冲区内的第 1缓冲区均为接收缓冲区,分别对应的 ID值是 21至 30。第 2缓冲区至第 11缓冲区均为发送缓冲区,对应的 ID值 50至 60。即 10个检测模块发送的 CAN数据帧具有相同的 ID值。采用上述分配的原因在于:每个检测模块同时检测 10个被测电路板,每次有 10个数据帧要同时向通信模块发送。前提条件,10个检测模块不能同时向通信模块发送数据。
[#page#]
通信控制板和检测模块之间通信采用主从应答通信方式。在工作过程中,通信模块从串口命令缓冲队列的队首取出一条命令,进行协议转换,组装成 8字节的 CAN信息帧。其中最后 1个字节值设为前 7个字节的 CRC8校验值,虽然 CAN总线本身具有 CRC校验,在应用层再次进行校验,可以提高通信的可靠性。
通信模块将该 CAN信息帧通过 CAN内部第 1缓冲区发送,这样 CAN总线上的第 1个检测模块收到该信息帧,该检测模块校验信息帧,如果通过校验,进一步解析该信息帧。如果是参数设置命令,则检测设备提取其中的参数,然后向通信模块发送 1个信息帧作为响应。如果是读数据命令,则将 10个被测电路板的参数组装成 10个 CAN数据帧,分别通过检测设备的 CAN缓冲区的第 2至第 11缓冲区向外发送,该 10个数据帧,仅被总线上的通信模块接收,分别放在第 20至第 30缓冲区。通信模块将这些信息通过串口向上位机发送。按照同样的方式,通信模块与其它 9个检测模块及 1个温控模块完成 CAN通信,实现了命令的设置与测试信息的获取。
2 检测模块的设计
老化系统的 10个检测模块完全一样,完成同样的功能。根据分析被测电路板的特性,设计了检测模块实现检测的方法与流程。检测模块首先检测被测电路板是否存在短路故障与断路故障,如果发现被测电路板存在断路故障或断路故障,则不再进一步检测,在与通信模块通信过程发送该故障信息。如果被测电路没有短路故障或断路故障,则检测模块向被测电路板加上额定工作电压与有效的激励信号,使被测电路板正常工作,然后检测被测电路板的输出信号的波形类型及频率,按照设定的检测算法判断被测电路板是否存在其它故障。在 100多个小时的测试过程中,测试环境的温度可以根据用户的设置不断变化或自动变化,检测模块提供的输入激励信号采用多种组合。
3 温控模块设计
在老化过程,被老化的电路板被放置在密闭的柜体中。该柜体内的温度保持在一定的范围,以模拟中电路板的实际工作环境的温度。温控模块通过 CAN总线接收通信模块发来的信息帧,解析信息帧,得到用户要设置的温度值。温控模块检测柜体温度,控制加热装置加热与否,使柜体的温度达到用户设置的温度。
温度检测采用 DS18B20完成,在温控模块中设置 4个 DS18B20。将测得的 4个温度值进行算术平均,作为老化柜体内的温度值。温控模块的继电器输出接加热棒及排风风扇。采用了 PID控制算法,使柜体内温度达到用户设置温度。4 上位机软件的设计上位机软件采用 VC++ 6.0设计完成,串口通信部分使用 Windows API函数完成,使用 API函数处理串口灵活高效。上位机软件实时显示每个被测电路板是否正常工作及当前老化柜的温度及老化时间等信息,还提供历史数据查询及参数设置等功能。
4 结束语
本老化测试系统,采用 CAN总线作为系统的主要通信方式,采用模块化结构,方便系统的设计与调试,同时,各模块挂在 CAN总线,易于系统实现与扩展。本系统已经应用于生产中,达到了设计要求,运行效果稳定良好。本系统已产生经济效益近 30万元。
本文作者创新点:本老化系统的检测模块与通信模块采用 CAN总线进行通信,通信稳定,高速;整个系统采用检测模块-通信模块-上位机的三层结构,实现了对大批量被测电路板的检测。
帧命令后的若干时间没有收到通信模块的应答信息,就再次发送该命令信息,连续 3次没收到应答信息,就可以认为存在通信故障,从而产生报警信息,提示用户处理。
暂无评论