刘正翔
(福州职业技术学院,福建 福州 350108)
随着社会科技的发展,信息化生活对上网的需求越来越高,无线接入的用户数量也急剧增加,无线通信的频谱资源越来越拥挤。可见光通信技术解决了诸如此类问题。早在2000年,日本已提出可见光通信技术,并仿真了其可行性。2009年,日本科学家在中川实验室提出了一种可见光通信系统,它基于CSMA/CD的全双工多址接入的,可实现100 Mbps的传输速率[1]。之后欧美国家在政府的支持下,也在可见光通信领域取得很多科研成果。国内的复旦大学、北京邮电大学、解放军信息工程大学等高校科研机构也对可见光通信系统进行了深入研究,复旦大学在实验室使用1 W的LED灯泡,实现了4台电脑同时高速上网[2]。
除了传输速度快,可见光通信技术的安全性、绿色健康,以及在隧道、高速公路、交通阻塞方面的应用也引起了人们的兴趣。
STM32系列CPU是ST公司生产的基于ARM Cortex?-M3内核的高性能、低成本、低功耗的CPU,2.0~3.6 V的电源供电。由于其主频可达到72 MHz,片上集成32-512 KB的Flash,及6-64 KB的SRAM存储器。片内硬件资源丰富,最多可达112个GPIO口,11个定时器,13个通信接口,包含IIC、USART、SPI、IIS、CAN、USB、SDIO等接口,而价格却与普通单片机差不多,因此得到广泛的应用。
选择合适的无线通信系统调制技术,对提高系统传输速率有重要意义。可见光通信系统的调制技术一般有开关键控OOK,脉冲位置调制PPM,正交频分复用调制OFDM,单载波频域均衡SC-FDE,无载波幅度相位调制CAP等。其较为简单高效的调制技术是脉冲位置调制PPM方式。它是将脉冲的相对位置来传输信息的调制方式。OFDM调制方式是把信道划分成很多相互正交的子信道,将原本高速传输的信息流,转变成相对低速的多个并行的子数据流,并分别将其调制到各个相互正交的子信道中传输,接收端再用相关技术区分开来,其很大的优势是可减少相互串扰。而OOK调制技术则广泛地与NRZ不归零编码结合来调制,是一种极为有效的调制方式。下面重点介绍OOK调制技术原理[4]。设二进制振幅键控2ASK信号表达式为:
e2ASK(t)=s(t)cos(ωct+θ)
eOOK(t)=Acos(ωct+θ)
OOK信号的产生有两种方法,分别是模拟调制法和键控法,如图1所示。
图1 2ASK/OOK信号调制器原理图
本文采用OOK的数字键控法,即使用开关电路通断来控制LED发光强度变化,它将可见光信号转成固定频率的载波(正弦波形),可以很好地克服发射端信号失真的问题,接收端通过相干解调与非相干解调,经带通滤波器、低通滤波器、抽样判决等过程来还原信号[6]。
根据OOK调制技术工作原理得知,OOK调制技术的实现,不管是模拟相乘法还是数字键控法,其本质都是载波与输入信源相乘(模拟开关也可认为是用“0”和“1”相乘的一种方式)。因此,要调制OOK信号就需要先得到两个输入信号,分别是s(t)和cosωct,即信号源与载波的产生。然后可通过模拟CD4066芯片,输出为调制后的OOK信号[5]。值得关注的是,输出的OOK调制信号并不能直接用于驱动白光LED来控制产生光强度信号,还需考虑满足LED调制特性。
为了产生能随时更改的信源信号,本系统使用计算机串口调试软件发出要传输的数据(信源),通过串口发送到STM32系列CPU,再编程将二进制信号通过STM32引脚输出到模拟开关CD4066,输出的信号经LED驱动电路放大后驱动LED发送光信号,从而实现信号调制过程。信号源产生的过程如图2所示。
图2 使用STM32编程信号源进行调制
本系统采用的STM32系列CPU为STM32F103C8T6。计算机通过串口通信发送信源数据到该CPU,即在计算机上安装串口调试软件,设置波特率9 600,每次传送8bit数据,1个停止位,没有校验位。输入要发送的数据“VLCLiFi”7个字母,点击“发送”,即可被STM32的串口接收到,如图3所示。
图3 串口调试软件发送6个字符界面
STM32串口USART编程接收数据前,定义一个32字节的C语言数组RX_BUF[32]用来保存接收到的数据。程序运行时,打开USART串口中断等待接收数据。当接收到“VLCLiFi”字符串后,将它保存在数组unsigned char RX_BUF[32]中。由于一个字符刚好占1个字节,因此可通过以下程序段,按字节将字符转成二进制bit信号,从STM32引脚串行发送出去[3]。
for(i=0;i<8;i++)
{
flag=temp&0x80;
if(flag) LED=1;
else LED=0;
Delay_us(10); //码元持续时间
temp=temp<<1;
}
由于STM32在主频72 MHz时执行一个指令的时间约为70 ns。理论上,该段程序输出的方波频率可达1 MHz以上,这意味着码元的持续时间可达到1 μs,而后续3.2节产生的载波频率500 kHz,即周期2 μs。因此要调整STM32的IO引脚上输出方波的频率要小于500 kHz(码元持续时间大于2 μs),这样经过模拟开关后,码元为“1”时,才可能得到一个完整的正弦波。此处选择10 μs的码元持续时间。其中temp是数组RX_BUF[32]的一个字节元素。单个字节8位循环顺序发送完毕,接着发送下一个字节元素,直到6个字符都发送完为止。
本系统需要一个正弦波作为载波,产生500 kHz的正弦波(即周期为2 μs)。采用LC正弦振荡器方式,LC振荡器的作用是产生频率为500 kHz、输出幅度大于1 V的载波。电路图4所示,L2、C2、C3、C4构成并联谐振回路,图中的4个电阻是稳定三极管静态工作点;其中,R1、R2也是分压式偏置电阻;C1为基极耦合电容,三极管发射极通过它交流接地。
图4 OOK调制模块电路图
值得注意的是,电路中的三极管Q1选用了高频三极管 2SC1815,使载波的峰值足够大。调制信号从STM32的PA2引脚输出后,输入开关模拟4066芯片,进而输出OOK信号,如图5所示。
仿真实验表明,STM32的GPIO引脚发出的方波正常,即“VLCLiFi”的二进制信号波形。OOK信号也能在方波为“1”时是正弦波形,方波为低电平“0”时值为0,但略有波纹。而4066芯片虽能正确实现模拟开关功能,但对载波幅度有一定影响。
图5 OOK调制后的仿真波形图
由于STM32的电流较小,LED白光的强度变化并不能明显表现出来,无法达到LED调试要求。为了准确地把OOK调制出来的电信号高低电平有效转化成白光LED的强度大小,必须满足LED调制特性。LED调制能力用光功率-电流曲线来表示,该曲线呈线性,且直流偏置线应尽量位于线性部分的中心处时,可以使光调制度变大[3]。此外,也要考虑LED的响应时间,即为LED灯亮、灭的延迟时间,从该特性可得到LED跟随外部控制信号变化的快慢程度。为了驱动LED灯,对应的驱动电路可采用运算放大器THS3001电路[3],有明显放大效果。而驱动电路若采用三极管共集电极放大电路[6],既可把OOK信号的电流量放大,又能给LED一个直流偏置(LED芯片的偏置电流一般100 mA以上),使之工作在线性状态,参考电路[6]如图6所示。
图6 驱动LED灯电路图
本文详细分析了室内可见光通信系统中的OOK(2ASK)调制技术,并通过计算机串口调试软件发送即将传输的数据到STM32开发板,经过程序处理,将要发送的信息转成二进制代码,从GPIO引脚串行发送出去。为了使用模拟开关进行调制,设计对应振荡电路,产生500 kHz的正弦波作为载波,与STM32产生的方波共同送入4066芯片进行模拟开关运算,输出OOK调制信号。考虑到LED的调制特性,需要专门电路驱动LED,满足光功率-电流曲线近似线性时,才能获取更好的电信号控制LED光强度,有效发送信息至接收端。