基于WK2168的气象采集站多串口采集方案的设计与实现
2018-11-01张达郭银博赵广宇胥勋伟
张达 郭银博 赵广宇 胥勋伟
摘要:在综合采集系统中,很多外接传感器都是串口通信。为了解决STM32采集系统中串口数量不足的问题,采用WK2168进行串口扩展。WK2168支持UART/SPI/IIC/8位并行总线接口并具有256级FIFO的低功耗 4通道UART扩展芯片。该方案选择一路串口,扩展为4路UART,满足项目整体需求。
关键词:串口扩展芯片;WK2168;气象采集板卡;多串口采集
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)19-0284-03
Abstract: Power standby mode in the integrated acquisition system, many external sensors are serial communication. In order to solve the problem of insufficient serial port in the STM32 acquisition system, WK2168 is used to expand the serial port. WK2168 supports UART/SPI/IIC/8 bit parallel bus interface and has 256 level FIFO low power 4 channel UART expansion chip. This scheme selects one serial port to expand to 4 UART, to meet the overall needs of the project.
Key words: serial port extension chip; WK2168; meteorological collection board; multi serial port acquisition
1 背景
为了更好地利用自然气象资源,减少自然气象对农业生产、交通运输等行业的影响,建立信息化的采集系统和高效的管理系统是很有必要的。设计了一套通用采集板卡,根据所应用的场合变化,分别插接不同的外接传感器。传感器数据和控制器之间大多采用串口进行数据通信,单片机串口数量有限影响着板卡的性能。采集板卡的串口拓展方案的设计与实施是有必要的。
2 系统的构成
该方案采用STM32F103VET7作为处理器,负责气象要素的判断采集、信号处理、定时发送[1 ]。采用12V的太阳能板和电池为系统供电。采用8M byte的M25P64作为系统参数初始化的存储地址。采用AD7993作为片外模拟量的采集。整个系统框图如图1所示:
3 采集板硬件设计
3.1 ARM处理子系统
ARM 公司发布了全新的基于 ARMv7指令集,处理器的内核以Cortex命名并分为A、R和M三个系列[2-3]。意法半导体公司推出了基于Cortex-M内核的系列芯片,项目选型使用的STM32F103VET7就是M3内核的[4]。该系列单片机具有产品细分多样化、不断更新简单易用的集成库、性价比较高等优点深受电子工程师和学生的青睐,使开发者顺应技术发展趋势,让设计的产品更有竞争力。
该主控芯片资源丰富,12位ADC 3个、12位DAC 、USB、CAN、SDIO接口、FSMC接口、64KB SRAM、512KB FLASH、基本定时器2个、通用定时器4个、高级定时器2个、通用IO口、SPI 3个、IIC 2个及串口5个[5]。在该项目中需要使用较多的串口通道,外挂WK2168串口扩展芯片,使可用串口达到8个[6]。
3.2 串口扩展子系统
3.2.1 WK2168基本特性
VK3366在串口扩展领域使用较为广泛,WK2168是成都为开微电子推出的新品用以替代VK3366,较前者WK2168具有技术支持力度更大、性價比更高等优点。该款芯片支持UART、SPI、IIC、8位并行总线四种接口作为主接口,同时可扩展4路增强的UART。
该款芯片主要具有如下功能:是首款具备256级FIFO的低功耗芯片。该芯片可最多扩展4通道UART器件。该芯片支持UART/SPITM/IIC/8位并行总线作为主通道,并可以通过模式配置使得该芯片工作于以上任何一种主接口模式,将选定的主接口扩展为4个增强功能的UART。
选择串口作为主接口:主接口不需要地址信号和控制信号线,只需要标准的三线UART串口(RX,TX,GND),简单的配置寄存器和控制字,可编程的设置子通道的波特率、字长、校验格式等信息。最高速度可以达到2M bit/s。收发独立的超大硬件缓存,支持256级FIFO。
3.2.2 WK2168硬件设计
数据采集板卡的外接端口较多,采用STM32F103VET7的串口5作为主接口来拓展子串口,MD0、MD1两个引脚配合使用配置主接口选择哪种接口,选MD1 MD0=11。选择和CPU相同的供电电压3.3V。MCU和芯片之间MRX、MTX引脚通过交叉线连接。WK2168的IRQ连接到MCU的外部中断输入引脚。这个连接不是必须的,如果没有连接到MCU的外部中断输入引脚,那么就只能采用查询的编程方式实现对子串口的数据收发。WK2168的复位引脚,低电平有效,时间长度为10ms。复位以后,WK2168的所有寄存器恢复到默认值,总线上的命令解析也会同时复位。通常采用无源晶振,其大小可参照手册根据串口波特率选取,这里采用11.059 2 MHz晶振。需要和晶振并联1兆欧的匹配电阻。
在选用串口作为主接口,DAT0-DAT7作为普通GPIO使用,可以通过GPDIR来设置相应引脚的输入输出特性。并且可以通过GPDAT来访问DAT0-DAT7引脚。MP1/MP2/MP3/MP4分别为NC、主串口发送、主串口接收、IR;IR默认为高电平,此时为普通UART通信模式,若IR为零,则配置为红外通信模式。
4 软件设计
4.1 系统整体软件设计
采集板上电后首先对系统时钟、定时器、中断、AD采集等进行初始化;在主函数中分时读取各采集要素传感器的参数,执行相应传感器的处理函数,并通过DTU模块发送分钟数据报文给服务器。其中外部中断用来判断门状态等参数;定时器中断用来计时,在一分钟内的不同时间段采集不同要素的数据。串口中断用来判断传感器是否有数据发出并接收数据;AD用来采集一些非高精度的模拟量电压值。
4.2 串口扩展子系统软件设计
当选择UART作为WK2168的主接口时,与采集板仅连接RX、TX、GND三根线。采用标准的UART协议进行通信[7]。主接口UART可以实现波特率自适应。上电复位后,先向WK2168写入0x55,WK2168可以根据写入的数据自动测得此时MCU的波特率并把主接口UART的波特率锁定,以后就以此波特率进行通信;如果主接口需要再次更换波特率,需要对芯片硬件复位,然后再次进行波特率测试和锁定。
4.2.1 WK2168读写寄存器时序分析
对WK2168进行写操作时,先由单片机向WK2168写入一字节的控制字,随后写入一个字节的数据。在无校验模式下如表1所示:
写寄存器模块函数代码如下所示:
void write_reg(unsigned char port,unsigned char reg,unsigned char dat)
{
uart_sendByte(0x00+((port-1)<<4)+reg);
uart_sendByte(dat);
USART_SendData(USART1, (0x00+((port-1)<<4)+reg));
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}
其中:port指的是子串口号(C0、C1)
reg 指的是寄存器的地址(A3、A2、A1、A0)
dat 指的是要对寄存器写入的数据
若需要对串口1的波特率配置位115200,假设系统时钟为12M;
reg=fs/((baud*16)) (1)
fs为系统时钟,baud 为波特率,reg为我们要写入到寄存器中的控制命令,如公式1所示[8];reg=6.51,结果精确到小数点后两位,把reg的值减去1按顺序赋值给BAUD1和BAUD0,把小数点后第一位赋值给PRES;只需要调用函数:
write_reg(1,BAUD1,0X00);
write_reg(1,BAUD0,0X05);
write_reg(1,PRES,0X05);
对WK2168进行读操作时,先由单片机向WK2168写入一字节的控制字,随后从WK2168的TX读取数据。如写入一个字节的数据。在无校验模式下如表2所示:
读寄存器模块函数代码如下所示:
unsigned char read_reg(unsigned char port,unsigned char reg)
{
unsigned char rec_data;
uart_sendByte(0x40+((port-1)<<4)+reg);
rec_data=uart_recByte();
return rec_data;
}
4.2.2 WK2168读写FIFO时序分析
对的读写操作,类似于对一个特殊的读写操作。操作命令只能作用于FIFO寄存器缓冲区的数据。
写FIFO功能模块函数如表3:
void Wk2168_writeFIFO(unsigned char port,unsigned char *send_da,unsigned char num)
{
unsigned char i;
uart_sendByte(0x80+((port-1)<<4)+(num-1)); //写指令
for(i=0;i { uart_sendByte( *(send_da+i));//写数据 } } 其中参数:port指的是子串口号(C0、C1) *dat是写入的数据指针 num写入的数据个数 读FIFO功能模块函数如下: unsigned char *Wk2114readFIFO(unsigned char port,unsigned char num) { unsigned char n; unsigned char dat[256]; uart_sendByte(0xc0+((port-1)<<4)+(num-1)); for(n=0;n { dat[n]=uart_recByte(); } return dat; } 其中參数:port指的是子串口号(C0、C1) *dat是读取的数据指针 Num读到的数据个数 } 采集板卡实物图如图3所示: 5 结束语 基于STM32采集板卡中串口数量不足的问题,设计了基于WK2168串口扩展方案,并对WK2168芯片进行介绍,设计了基于WK2168串口扩展系统的硬件电路,编写了WK2168芯片的应用程序,该设计方案已经在实际项目中应用。为气象站采集板卡提供了一种新的串口扩展方案。 参考文献: [1] 何慧芸, 马启明, 黄启俊, 等. 智能气象站传感器系统的ZigBee无线网络设计[J]. 电子测量技术, 2012(6): 118-121. [2] 王新勇. 基于ARM的Linux驱动开发研究[D]. 赣州: 江西理工大学, 2011. [3] 张继珂. 嵌入式操作系统uC/OS-ⅡI的移植及文件系统设计[D]. 南京: 南京航空航天大学, 2011. [4] 郝玉胜. uC/OS-Ⅱ嵌入式操作系统内核移植研究及其实现[D]. 兰州: 兰州交通大学, 2014. [5] 张义显. 基于STM32的新型家庭报警器的设计与实现[D]. 秦皇岛: 燕山大学, 2016. [6] 李洪亮. 车辆油耗实时监测与信息管理系统研究[D]. 哈尔滨: 东北林业大学, 2014. [7] 张玉恒, 梁存真. 基于VK3214的DSP串口扩展—2010年河南省单片微机和嵌入式系统学术研讨会[C]. 郑州: 河南省电子学会, 2010. [8] 为开微电子. WK2168数据手册[M]. 成都: 四川为开微电子有限公司, 2017.