资源描述
基于单片机的多机通信系统(完整资料)
(可以直接使用,可编辑 优秀版资料,欢迎下载)
课程设计报告
课程单片机技术
题目串口通信-多机通信系统
系别
年级07级专业电子科学与技术
班级学号
学生姓名
指导教师职称
设计时间
目录
1 题设要求分析1
2 硬件电路的设计3
2.1 系统的组成3
2。2 系统的工作原理3
2。3 硬件电路原理图设计4
2。4 硬件电路的实现6
3 软件电路的设计8
3.1 通信协议的设计8
3.2 主机程序设计8
3.3 从机程序设计12
4 系统的调试与实现15
4。1 从机模块调试15
4.2 LED显示模块调试15
4.3电平转换模块功能调试15
4。4主机模块功能调试16
4.5整体设计功能调试16
参考文献18
1 题设要求分析
本小组的试验题目如下:
一、任务:
设计实现多台单片机系统之间的串行通信
二、基本要求(难度系数0.8):
(1)设计一个主从式多机通信系统,包含1台主机和3台从机,主机和从机全部为单片机;
(2)选择合适总线接口芯片,正确连接主机和从机;
(3)编程实现分布式数据采集功能,主机可以获取各分机当前AD转换结果,并显示。
三、发挥部分:
(1)完善通信功能。(根据完成情况加分,上限+0。2)
经过本小组成员对本课题认真讨论先做出如下分析:
对课题分析后本小组认为本次实验的目的是就是应用单片的串口通信功能实现一个分布式采集系统.整个系统中包含一片主机和三片从机,主机的任务是实现对三片从机的AD转换结果的采集并在数码管上显示之.这样从硬件的角度上将整个系统分为两个模块——主机模块和从机模块。主机模块中包含单片机模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。就本次试验而言硬件电路的设计难点在于串口电平转换芯片的选择及其连接,而软件的设计难点在于串口通信协议的制定及相关程序的编写。
实现多机通信方案的实现。不同于双机通信多机通信系统中需要识别通信信息发出者或是接受者是谁。经过查阅资料发现在大多数的多机通信系统中都是才采用地址识别的方法实现的.所谓地址识别方法就是在发送或接受信息前先发送和校验地址帧。就本题目而言,先要对通信系统中的每台机器分配一个唯一的地址作为识别信息。具体的识别过程如下:
n 首先,从机处于只接收地址帧的状态;
n 主机发送一帧地址信息;
n 从机接受到地址帧后,将本机地址与地址帧中的地址进行比较,如果地址相同准备接受数据,否则丢弃当前帧,依然处于只接受地址帧的状态;
n 主机发送数据帧,相应的从机接受数据,数据传送完毕后,从机继续回到只接受地址帧的状态,在这个过程中其他从机不受影响;
n 当主机需要与其他从机进行数据传输时,可以再次发送地址帧呼叫从机,重复这一过程[1]。
对于本题而言可通过此过程实现主机对从机的绝对控制。这样在主机中编写一个循环程序就可以实现对三台从机的AD转换结果的不停采集。至于地址帧与数据帧的区别则可通过串口工作方式三下的第九位的置1或置0来实现.在完成通信的基础上,再将采集到的三路结果分别用两个led数码管显示即可试验预期目的。
2 硬件电路的设计
2。1 系统的组成
根据题目分析可知硬件电分为主机模块和从机模块.主机模块中包含单片机子模块、led数码管显示子模块和串口电平转换子模块,从机模块则包括单片机子模块、AD转换子模块和串口电平转换子模块。在主模块中由AT89S51单片机担任主机,六个led数码管担任显示设备和一片MAX485担任串口的电平转换。在整个主机系统中有三个从机模块三个从机模块结构一样,有一片AT89S51单片机担任从机外接一片ADC0809转换芯片和一片MAX485担任串口的电平转换。串口采用单工及异步通信方式。整个硬件结构原如图1所示.
图 Error! Bookmark not defined.系统结构原理图
2。2 系统的工作原理
主机AT89S51编程可实现循环访问个从机,当从机接受主机访问后启动AD转换设备ADC0809对外部模拟信号进行转换。当从机获得转换结果后通过串口将其发送到主机,主机接受到转换结果后再将其发送到相应的led数码管显示.
2。3 硬件电路原理图设计
(1)led数码管显示电路 led数码管显示电路如图2所示显示子模块由六个数码管和相应的启动芯片构成.其中每路通道的采集值用量为数码管显示。为了节约单片机的I/O口本题的数码管采用MAX7219芯片。给芯片的优点在于可完成电路的刷新。MAX7219芯片的SEG A—SEG DP为数码管段码接口,DIG0-DIG7为位码接口,CLK、DIN、LOAD分别与单片机P1。0、P1。1、P1。2连接。单片机通过串行的方式将要显示的数据通过CLK、DIN、LOAD三个接口送入相应的显示寄存器内,MAX7219将自动完成对数码管的刷新工作。具体的电路如图2所示。
图 Error! Bookmark not defined. led显示电路
(2)串口电平转换电路 串口电平转换电路的电路图如图3所示:本实验中采用MAX485的电平转换芯片.MAX485是一种RS-485标准接口的电平转换芯片.RS—485采用差分式半双工通信方式,真正实现多点总线连接,具有传输距离远可靠性高的特点.基于以上原因本小组选择该芯片实现电平转换。MAX485的1号引脚RO为接收端接单片RXD,4号引脚DI为发送端接单片TXD,2、3号引脚分别为发送接收使能端端接单片P1。3引脚。6、7号引脚总线接线口。
图 1 电平转换电路
(3)主机模块电路
根据设计要求绘制主机模块电路图如图4所示。
图 2 主机模块电路图
(4)从机模块电路
根据设计要求绘制从机模块电路图如图5所示。
图 3 从机模块电路图
2.4 硬件电路的实现
首先是主从机电路的实现.主机的电路的搭建采用主CPU板、键盘显示接口板各一块。照实验原理图将主CPU板的P0口接到键盘显示接口板的位码接口,P1口接到键盘显示接口板的段码的接口。从机的电路由CPU板和ADDA转换板构成。
其次是电平转换电路的焊接。电平转换的路的实现是通过自己搭建电路完成。电平转换的电路主要有四块MAX485和两个100Ω电阻构成.四块MAX485采用总线方式连接,每个芯片分别引出三个引脚用于单片的连接.
最后将各个模块的按照原理图连接起来。
图 6 硬件电路的连接
3 软件电路的设计
3.1 通信协议的设计
通信协议的设计的设计是本题的重点难点,本题通信协议主要是区别主机和从机。由于串口的方式2、3发送和接收都是11位其第九为可编程置位可以此作为区分地址帧与数据帧从而实现主机与从机,从机与从机的区别.通信协议同样要规定相同通信速率。参考相关资料后编写如下的通信协议.
n 数据传输的双方均使用9600kb/s的速率传送数据,使用主从式通信,主机发送数据,从机接受数据,双方在发送数据时使用查询方式。
n 双机开始数据传输时,主机发送地址帧呼叫从机。
n 各从机开始都处于只收地址帧状态.接收到地址帧后,将接收到的地址内容和本机地址比较,如果地址相同,则向主机返回本机地址作为确认信息,并开始接收数据;如果不同,则继续等待。
n 主机在发送地址帧后等待,如果接收到的应答信息中的内容和所发地址帧的内容相同,就开始发送数据,如果不一致,主机将继续发送地址帧。如多次应答仍无回应则认为出错则主机跳出本次通信。
n 从机在接收完数据后,将根据最后的校验结果判断数据接收是否正确,若校验真确,则向主机发送2AH信号,同时点亮led灯半秒钟,表示本次通信成功;若校验错误,则发送F0H信号,表示接收数据错误,并请求从发。
n 主机接收到2AH信号,则通信结束,否则主机将重新发送这组数据。
3.2 主机程序设计
依据试验要求及相应的通信协议现绘制如下的主机程序流程图:
图 7 主机程序流程图
主机程序:
#include〈stdio。h>
#include〈reg51。h〉
unsignedchar LED_seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsigned char LED_bit[6]={0x01,0x02,0x04,0x08,0x10,0x20};
unsigned char LED_buf[6]={0x00,0x00,0x00,0x00,0x00,0x00};
void delay(unsigned long n)//延时子程序
{
unsigned int i;
for(i=1;i<n;i++)
{ ; }
}
void convert(unsigned char a ,unsigned char j) //电压转换子程序
{
unsigned char m,n,i;
unsigned char b=0;
for(i=0;i<51;i++)
{
b=i*5;
if(b<a)
{
i++;
}
else
{
break;
}
}
m=i/10;
n=i%10;
j=j*2;
LED_buf[j]=LED_seg[n];
LED_buf[j+1]=LED_seg[m]+0x80;
}
void sbuf_init(void)//串口初始化子程序
{
SCON=0xd0; //工作方式3
PCON=0x00;
TMOD=(TMOD&0xf)|0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void flash_led(void)//led显示子程序
{
unsigned char i;
for(i=0;i<6;i++)
{
P2=LED_buf[i];
P0=LED_bit[i];
delay(200);
}
P0=0x00;
}
void main(void)//主函数
{ unsigned char ADDR=0x00;
unsigned char tmp;
unsigned char a=0;
unsigned char i=0;
unsigned char j=0;
sbuf_init();
while(1)
{
tmp = ADDR+1;
while(tmp!=ADDR)
{
/* 发送从机地址 */
TI = 0;
TB8 = 1; // 发送地址帧
P1 = 0xff; //发送使能
delay(20);
SBUF = ADDR;
while(!TI);
TI = 0;
delay(20);
/* 接收从机应答 */
P1 = 0x00; //接受使能
delay(50);
while(!RI);
tmp = SBUF;
RI = 0;
delay(20);
}
P1 = 0x00; //接受使能
delay(10);
while(!RI);
a = SBUF;
RI = 0;
delay(10);
j=ADDR;
i++;
ADDR++;
if (i〉=3)
{
i=0;
ADDR=0x00;
}
convert(a,j);
flash_led();
}
}
3。3 从机程序设计
从程序流程图如下:
图 8 从机模块流程图
从机程序:
#include<reg51。h〉
#include<absacc。h〉
#include<stdio.h>
#define INO XBYTE[0x0000]
#define ADDR 0x02 //从机地址0x00、ox01、0x02
sbit AD_BUSY=P3^3;
void delay(unsigned long n)//延时子程序
{ unsigned int i;
for(i=1;i<n;i++)
{ ; }
}
void sbuf_init(void)//串口初始换子程序
{ SCON=0xd0; //工作方式3
PCON=0x00;
TMOD=(TMOD&0xf)|0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
}
void main(void) //主程序
{ unsigned char a;
unsigned char tmp=0xff;
sbuf_init();
while(1)
{ SM2=1; // 只接收地址帧
/* 如果接收到的地址帧不是本机地址,则继续等待 */
tmp=ADDR+1;
P1=0x00; //接受使能
while(tmp!=ADDR)
{ while(!RI);
tmp=SBUF;
RI=0;
}
delay(20);
/* 发送本机地址作为应答信号,准备接收数据 */
P1=0xff; //发送使能
delay(40);
TI=0;
TB8=0; // 主机不检测该位
SBUF = ADDR;
delay(10);
while(!TI);
TI = 0;
//SM2 = 0; //允许接收数据
/* 数据发送 */
delay(40);
/*INO=0;
i=i;
i=i;
while(AD_BUSY==0);
a=INO;*/
a=0x88;
SBUF=a;
while(TI==0);
TI=0;
delay(60);
}
}
4 系统的调试与实现
对本课题的设计思路清晰之后,我们接下来所需要做的工作就是依据我们的方案编程实现功能。本过程可以分为五个部分:从机模块调试、 LED显示模块调试、电平转换模块功能调试、主机模块功能调试、整体设计功能调试。
4。1 从机模块调试
从机部分实现的功能是针对主机发送来的地址进行对照,如果是自己的从机地址,就会发送AD转换结果。为了检测此部分的功能是否能够实现,我们借助串口测试软件,发送预设的从机地址看看该从机是否会把AD转换的结果发送来。此从机调试模块分为两个层次:1、用一个简单的程序测试从机硬件部分是否能正常运行;2、在硬件良好的情况下测试编写的从机部分代码能否顺利实现功能。
4。2 LED显示模块调试
该部分相比较而言简单一点,其实也可以归为主机模块调试的一部分.LED功能就是用来显示DA转换的结果。连接好电路之后,用个小程序测试LED显示功能良好的情况下显示从机发送来的数据。此部分在主机模块功能调试具体介绍.
4.3电平转换模块功能调试
此部分硬件电路多为我们自己焊接.包括4片MAX485转换芯片组成的电平转换电路。它们完成将TTL电平转换为RS-485电平的功能。MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,所以只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0.在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。同时将A和B端之间加匹配电阻,一般可选100Ω的电阻。由于经验知识不足,我们匹配电阻选择了一个阻值为10KΩ的电阻,造成芯片烧坏,此处应引起注意。
4。4主机模块功能调试
当主机发送地址帧呼叫从机时从机将接收到的内容与自己的地址比较,如若相同从机会向主机发送主机所需要的数据。而主机接收到正确的数据,便会通过LED数码管显示出来,这样便会实现我们预想的主机模块功能。当然主机部分程序包含上面调试好的LED显示模块程序。此处将从机送来的数值通过调用LED显示模块子程序显示出来。LED显示模块分为三个区域,从机0、从机1、从机2分别占用2个显示管.
4.5整体设计功能调试
各个模块程序功能调试好之后,将他们各就各位.但此时我们又遇到一个难题:从机送给主机的数据在经MAX485传递给主机时读出来的不是理想的结果,后经过示波器查看输出波形,经多次调试,将主机与从机时序调整一致才得以在主机收到从机发送来的数据.5 总结与体会
为期一个礼拜的单片机课程设计就这么快的结束了,在这短暂的一个星期里我们学到了很多很多。我们在课堂上掌握的仅仅是书面的理论知识,如何去锻炼我们的实践能力,如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做此类的课程设计就为我们提供了良好的实践平台。
在做本次课程设计的过程中,我感触最深的当属查阅大量的资料,无论是课本上的还是网上的我们都学习了不少,从中也借鉴了别人的思想,开阔了自己的思路。做单片机课程设计,对设计者对软硬件的理解和掌握的要求比较高.在设计程序之前,设计者必学对所用单片机的内部结构有一个系统的了解,知道该单片机内有哪些资源;要有一个清晰的思路和一个完整的的软件流程图;在设计程序时,不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;要养成注释程序的好习惯,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也为资料的保存和交流提供了方便;在设计课程过程中遇到问题是很正常的,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题。我们在实验中就遇到了一系列问题,比如刚刚开始时硬件电路的连接,针对MAX485芯片匹配电阻的选择,从机与主机握手的过程等等,在大家仔细的思考和老师同学的帮助下顺利解决。
此次课程设计在组长杨小强同学的带领下我们步步为营,大家学会了一个重要的设计技巧,就是一步一个脚印,踏踏实实的编程,每编写好一个模块的程序后应及时检测是否正确。若是“一步登天",一次性将所有程序编写好再进行测试,这样如若出现问题,但无法知道问题出在何处,这样会带来更大的麻烦,修改就无从下手.总而言之,此次的单片机课程设计让我们“吃尽了苦头",花费了不少脑细胞,无论是软件的使用还是对单片机内部资源硬件的了解,我们的认识都大大加深了.
同时感谢李老师及同学们,感谢你们给予我们小组的指导和帮助,谢谢你们!
参考文献
[1] 戴佳,戴卫恒,刘博文 51单片机C语言应用程序设计实例精讲。第二版 电子工业出版社 2008。12
1 引言
虚拟医学仪器充分利用计算机丰富的软硬件资源,仅增设少量专用软、硬件模块,便可实现传统仪器的全部功能及一些传统仪器无法实现的功能,同时缩短了研发周期。本系统由两部分组成:以C8051F320单片机为核心的数据采集装置和以PC机为平台的分析处理系统。设计中充分考虑数据采集装置体积小、功耗低、操作快捷的要求,因此全部采用SMT封装的元器件。PC监护终端通过USB接口接收数据,传输速率高;采用图形编程语言LabVIEW编写显示、存储、分析处理等功能程序。该系统可实时监护并提供心动周期,心率等参数,也可进行数据的存储回放,为心血管疾病的诊断提供依据。系统的软件开发和硬件与上位机软件的集成测试表明,系统运行稳定可靠,取得了预期效果。
2 系统硬件设计
该系统由C8051F320数据采集模块和PC机两部分组成,如图1所示。
数据采集模块主要由心电采集电路和基于C8051F320单片机的DAQ接口卡构成,如图2所示。
该模块通过C8051F320片上A/D转换器采集经预处理的心电信号,再将其由USB总线传输至PC机显示。PC机部分主要是软件设计,包括通过C8051F320单片机片上USB主机API函数和LabVIEW软件编写数据采集图形用户界面;实现接收、显示和处理由数据采集模块通过USB接口发送采集数据的程序.LabVIEW应用程序和C8051F320应用程序均采用SILICon Laboratories公司的USB Xpress开发套件的API和驱动程序实现对底层USB器件的读写操作.
心电信号属于微弱信号,体表心电信号的幅值范围为1~10 mV。在测量心电信号时存在很强的干扰,包括测量电极与人体之间构成的化学半电池所产生的直流极化电压,以共模电压形式存在的50 Hz工频干扰。人体的运动、呼吸引起的基线漂移,肌肉收缩引起的肌电干扰等。采用遥测HOLTER三导联线和一次性心电电极与人体接触,能很好地减小运动和呼吸引起的肌电干扰。前端放大器采用具有极高共模抑制比(CMRR)的仪用AD620放大器,放大倍数约为50倍;并采用0.05~100 Hz的带通滤波器和50 Hz的陷波电路,抑制信号的基线漂移、高频噪声及工频干扰。为了充分利用A/D转换的精度,在转换前先将信号放大到A/D转换电路参考电压的70%左右,考虑到信号中会附加直流成分,需在A/D转换电路前增加电平调节电路。个体心电幅度的差异要求电路中设计程控放大电路,又为了便于心电信号的标定和考虑到实际器件放大倍数与理论值的偏差,在程控放大电路前设置一个手动可调的放大电路(1~10倍)。
综上分析,心电采集与程控放大部分应包括:AD620前端放大、0.05~100 Hz的带通滤波、50 Hz陷波、手动放大、程控放大和电平提升等电路。其中程控放大功能利用CD4051电子开关的数字选通实现,具有1~50倍的调节范围。
为减少系统功耗,应采用低功耗、集成度高的器件。该系统选用C8051F320单片机作为数据采集卡的核心部件。该器件是完全集成的混合信号系统级器件,具有与8051兼容的高速CIP—51内核,与MCS-51指令集完全兼容,片内集成了数据采集和控制系统常用的模拟、数字外设及USB接口等其他功能部件。外部电路简单,易于实现,如图3所示.
心电电极将得到的信号经滤波和可变增益放大器放大后送至C8051F320单片机,单片机将得到的模拟心电信号实时转换为数字信号,采集到的数据通过USB接口传给PC机,进一步分析处理信号数据。
3 系统软件设计
3.1 C8051F320单片机程序设计
C8051F320单片机程序包括:(1)A/D转换程序和程控放大控制程序;(2)基于USB器件的通信程序,接收从USB主机发送的用户指令并将采集的数据发送给USB主机。
3.1.1 A/D转换程序
衡量A/D转换性能主要有两个指标:采样分辨率(A/D转换器位数)和A/D转换速度。设置A/D转换器的采样率为2 000 Hz,并采用定时器TIME2溢出中断触发转换,每次转换结束后1O位结果数据字被锁存到A/D转换器的数据寄存器中,供USB通讯子程序数据调用,图4为A/D转换流程.
A/D转换程序较简单,可通过设置C8051F320片上定时器确定A/D转换器的采样周期,由定时器的溢出周期性启动A/D转换器来采样被测数据。USB设置为块状传输模式与PC机进行数据通信。将每64个数据打成一个数据包.以充分利用硬件资源并提高数据传输效率。
3.1.2 基于USB器件的通信程序
整个程序流程以USB通信为主线,如图5所示.图中所涉及的USB_CLOCk_Start()、USB_Int()等函数均是SILICon Lab公司专为C8051F320单片机USB功能开发的USB端API函数。通过在C8051F320上层应用程序中直接调用这些函数可方便快捷地访问USB底层硬件。
3.2 PC机LabVIEW程序设计
PC机LabVIEW程序设计主要完成用户图形界面和基于USB主机通信程序两大功能,从而实现人机交互,将用户输入的指令和采集模块采集的数据通过USB总线在PC机和C8051F320之间传递。
3。2.1 LabVIEW程序面板设计
开发USB设备驱动程序的工具使用USB Xpress Devel—opment Kit,主要有:SI_Open()函数;SI_Close()函数;SI_Read函数;SI_Write()函数;SI_GetNumDevICes()函数;SI_CheckRX Queue()函数。用户从设备读取数据将调用一个应用程序接口API。SI_GetNumDevices()、SI_GetProductString()等函数均是SILicon Lab公司专为C8051F320单片机USB功能开发的USB主机端API函数。LabVIEW提供调用链接库函数Call Librarv Function,本设计利用Silicon Lab公司的SiUSBXp。dll动态链接库来实现对USB底层硬件的访问。通过调用SLGetNumDevices()甬数完成设备的通信初始化,生成函数返回驱动的设备号;该设备号用来在调用SI GetProductString()函数时生成设备描述字符串。要读取一个设备,首先必须通过调用SI_GetNumDevices()函数生成的索引(设备号)来调用SI_Open()函数。SI_Open()函数将返回设备的句柄,该句柄将在随后的所有进程中被用到.利用 SI_Write()和SI_Read()函数就可实现数据的输入和输出.当完成数据的输入和输出操作后,可通过调用SI_Close()关闭设备。图6为I/O接口驱动程序框图.
3.2。2 LabVIEW程序设计用户图形界面(前面板)设计
动态心电监护系统应用程序部分可实现心电信号的接收、实时显示、存储及回放功能;并可提供心动周期、心率等参数,为心率变异性分析和心血管疾病的诊断提供依据。心电监护系统显示界面如图7所示。
4 结论
该设计不仅可实现传统测量仪器的全部功能,还能将实验数据存盘以进行反复观察分析。基于虚拟仪器的心电监护系统使用灵活方便、测试功能丰富、成本低廉。用户可根据实际需要,通过修改软件改变其功能和升级,实现一机多用。实验结果表明:该系统具有较强的抑制基线漂移能力、低功耗、操作简单。采用USB接口实时传输心电数据,并将心电数据采集模块设计为计算机外设,高速快捷。由于全部采用SMT封装,数据采集模块尺寸仅为60 mmx60 mm,方便实用。因此,该设计是一款实用的、低成本的、动态心电监护系统。
基于CC2541蓝牙模块与单片机的串口通信
摘要
蓝牙技术作为一种无线数据与语音通信的开放性全球规范,可提供低功耗、短距离的无线空中接口,在各种固定与移动设备之间实现无线通信。在移动通信、无线数据采集、无线遥控与遥测、计算机网络及自动控制等多种领域,蓝牙技术都有着广泛的应用.蓝牙协议规范具有多个层次,完整的蓝牙协议栈的开发是一项很复杂的工程,而在大多数嵌入式应用中,只是需要实现基本的无线数据传输功能,并不需要实现全部的蓝牙协议栈。针对此类应用,若是能提供一套实用的蓝牙无线接口、实现一个通用的无线数据传输模块,就可以比较有效地缩短开发周期,降低开发成本。蓝牙通讯最初设计初衷是方便移动电话(手机)与配件之间进行低成本、低功耗无线通信连接,现在已经成为IEEE802.15标准,得到全球上万家厂商支持.
本文通过对美国德州仪器半导体公司(TI)开发的CC2541蓝牙模块与51单片机搭建电路实现无线通信技术。 BLE(Bluetooth Low Energy),蓝牙 4.0 标准里的一个子集,蓝牙 4.0 分为两部分,一个是能够兼容传统蓝牙的高速部分,另外就是这里的 BLE, 的两大显著特点:BLE功耗低,速率低。所以你就别打算用 BLE 来做音频传输或者文件传输了,目前 BLE最大的传输速率只能达到 4~5K 字节/每秒。BLE 协议栈,蓝牙 4。0 里的 BLE,只是一个协议规范,而 BLE 协议栈则是该协议的代码实现.蓝牙组织 SIG,只负责制定协议,而协议如何实现,则需要各个芯片公司完成。可以这样理解,BLE 协议栈是芯片公司预先编好的源码或者库。
关键词:蓝牙 单片机 通信 BLE4。0
一. 绪论
1. 背景介绍
蓝牙技术的最初倡导者是五家世界著名的计算机和通信公司:爱立信Ericsson、国际商用机器IBM、英特尔Intel、诺基亚NoMa和东芝Toshiba。1998年5月,以爱立信为首,此五家IT巨人共同提出了一种近距离无线数字通信的技术标准,目标是实现最高传输速率可达1Mb/s(有效传输速率为720Kb/s),最大传输距离为10m的无线通信技术,即蓝牙技术,并成立了国际化组织蓝牙SIG(SpecialInterest Group),致力于蓝牙规范的制定和蓝牙技术在全球范围内的推广。
蓝牙通信有很多优点,首先是低功耗,以BLE 4。0为例,一节钮扣电池在静态工作状态可以支持一年;其次是低成本,TI公司的CC2540蓝牙SOC方案芯片出售价仅1美元,可以让人们低廉使用蓝牙技术;再次是开放性,2.4GHz的频段全球开放,没有政府监管;最后是适合时代潮流,现在是手机的时代,蓝牙技术本来就为它而生。
蓝牙4.0协议是2010年6月由SIG(Special Interest Group)发布的最新标准,它有2种模式:BLE(Bluetooth low energy)只能与4.0协议设备通信,适应节能且仅收发少量数据的设备(如家用电子);BR/EDR(Basic Rate / Enhanced Data Rate),向下兼容(能与3。0/2。1/2。0通信),适应收发数据较多的设备(如耳机).
目前,苹果公司的iPhone 4S、iPhone 5、miniPad和iPad 3;小米手机2;三星公司的Galaxy SIII和Note II;HTC ONE系列等移动设备都支持蓝牙4.0
CC2540/CC2541,美国德州仪器半导体公司(简称 TI)的 BLE 芯片,TI 实现的 BLE
协议栈同样是 ble 协议的代码实现,这些 BLE 代码正是运行在 CC2540/CC2541 芯片上,简单的说 CC254x 就是一颗带有蓝牙功能的 51 单片机,其他单片机有的资源,例如定时器,UART,SPI,ADC,GPIO,USB(CC2540 专有),I2C(CC2541 专有)等等,CC254x 也都有,而 BLE 协议栈也就是一些复杂一点的 C 语言源码
2. 硬件设备
CC254x 的应用非常广,三种金典应用:1 串口透传,2 穿戴式设备,3PC上的 BLE 适配器,这样就对应了三种设备,带有带串口的 SmartRF 开发板(用来开发大部分的应用),带有三轴加速度计的 Keyfob 防丢器开发板(用来开发穿戴式设备),最后是CC2540USBdongle,可以直接插在 USB 口上(开发 BLE 适配器或者虚拟串口等应用)。而且TI 的 BLE 协议栈例程,也是建立在这三种设备上。
2.1 SmartRF 开发板
SmartRF 开发板兼容 TI 官方的 SmartRF05EB 开发板,TI 的 BLE 协议栈里提供的大部分例程,均基于该开发板创建,我们除了升级了 LCD 为 12864 外,其余完全兼容,TI 协议栈例程可以直接在我们的 SmartRF 上运行,这一点非常重要,因为 TI 经常有版本更新或者新的例程出来。
2.2 Keyfob 开发板
Keyfob 开发板带有一个三轴加速度计和一个蜂鸣器,除了可以开发防丢器外,还有更多的想象空间:计步器、运动检测等等.和 SmartRF 开发板一样,采用的也是底板分离的设计,核心板和 SmartRF 相同(Keyfob默认发 CC2541 核心板,CC2541 版本的 keyfob 资源更多).Keyfob 的反面有一个型号为 CR2032 的纽扣电池座。我们采用的电池座和 TI 的 Sensortag开发板的质量一样,厚实、耐用。
2.3 CC—Debugger 仿真器
CC254x 不支持串口下载,所以只能通过 CC-Debugger 烧写,除了烧写功能,也可以在 IAR 开发软件里,通过CC-Debugger 连接芯片在线调试你开发的程序,单步运行、打断点等,所以又叫仿真器。TI 官方开发板配套使用的全部是 CC-Debugger 仿真器
3. 软件环境
IAR for 8051 开发环境,Flash Programmer 固件烧写软件
二. CC2541芯片的特性参数
CC2541 是一款针对蓝牙低能耗以及私有2.4GHz 应用的功率优化的真正片载系统(SoC) 解决方案。它使得使用低总体物料清单成本建立强健网络节点成为可能。CC2541 将领先RF 收发器的出色性能和一个业界标准的增强型8051 MCU、系统内可编程闪存存储器、8kBRAM 和很多其它功能强大的特性和外设组合在一起。CC2541 上CC2541 非常适合应用于需要超低能耗的系统。这由多种不同的运行模式指定。运行模式间较短的转换时间进一步使低能耗变为可能.
如果 CC2540 上的 USB 未启用并且 CC2541 上的I2C/ 额外I/O 未启用,那么CC2541 与CC2540 在6mm x 6mm 方形扁平无引脚(QFN) 40 封装内引脚兼容。与CC2540 相比,CC2541 提供更低RF 流耗。CC2541 没有CC2540 所具有的USB 接口,并在TX模式中提供较低的最大输出功率CC2541 还增加了1 个HW I2C 接口。
CC2541 与CC2533 优化RF4CE IEEE 802.15.4 SoC引脚兼容。CC2541 有2 个不同的版本:分别具有128kB 和256kB 闪存的的CC2541F128/F256.
1特性
(1)射频
– 2.4GHz蓝牙符合低能耗规范和私有的RF 片载系统
– 支持250kbps,500kbps,1Mbps,2Mbps 的制器内核数据速率
– 出色的链路预算,不使用外部前段而支持长距离应用
– 高达0dBm 的可编程输出功率
– 出色的接收器灵敏度(1Mbps 时为- 94dBm),可选择性,和阻挡性能
– 适合于针对符合世界范围内的无线电频率调节系统:ETSI EN 300 328 和 EN 300 440 2 类
(欧洲),FCC CFR47 15 部分(美国),和ARIB STD-T66(日本)
(2)布局
– 极少的外部组件
– 提供参考设计 支持
– 6mm × 6mm 方形扁平无引脚 (QFN)-40 封装
– 与 CC2540 引脚兼容 (当不使用 USB 或者 I2C 时) (ADC)
(3)低功率
– 工作模式 RX 低至:17。
展开阅读全文