前言:想要写出一篇令人眼前一亮的文章吗?我们特意为您整理了5篇pic单片机范文,相信会为您的写作带来帮助,发现更多的写作思路和灵感。
引言
目前,在市场上应用最广泛的应该属于8位单片机,Microchip Technoloogy公司推出的8位pic系列单片机,目前在国内市场上深受用户欢迎,已经逐渐成为单片机应用的新潮流;但遗憾的是,目前国内介绍它的C语言开发工具的书籍和文章却比较少,而且用的人也不多,广大的程序员在用其开发的过程中都在慢慢摸索,可能会走一些弯路。笔者最近在用PIC的C语言时就遇到了好些问题,在这里想和最近一段时间用PIC的C语言的一些经验和广大的底层软件程序员做一下交流和介绍希望本文对用PICC开发PIC系列单片机的人有所帮助。
目前,在国内用得比较多的是Hi-Tech的Hi-Tech PICC编译器,而且目前市场上一些国内的PIC单片机仿真器也开始支持Hi-Tech PICC编译格式;因此,本文主要以Hi-Tech的PICC为基础,介绍一下PIC的C语言的基本特点。
1 Hi-Tech PICC的C语言开发工具的语言特点
PICC的C语言按ANSI C来定义,并进行了C语言的扩展。PICC和ANSI C有一个根本的区别就是,PICC不支持函数的递归调用。这是因为PIC单片机的堆栈大小是由硬件决定的,资源有限,所以不支持递归调用。它的数据也遵从标准C的数据结构,PICC的数据结构是以数据类型的形式出现的。PICC编译器支持的数据类型有位类型(bit)、无符号字符(unsigned char)、有符号字符(signed char)、无符号整型(unsigned int)、有符号整形(signed int)、无符号长整型(unsigned long)、有符号长整型(signed long)、浮点(float)和指针类型等。需要注意的是,PICC支持的多字节数据都采用低字节在前,高字节在后的原则。即一个多字节数,比如int型,在内存单元中存储顺序为低位字节存储在地址低的存储单元。高位字节存储在地址高的存储单元中,程序员在用union定义变量时一定要注意这一特点。
PIC的C语言变量分为局部变量和全局变量,所有变量在使用前必须先定义后使用。全局变量是在任何函数之外说明的、可被任意模块使用的、在整个程序执行期间都保持有效的变量。局部变量在函数内部说明。局部变量有两种:自动变量和静态变量。缺省类型为自动变量,除非明确将其声明为静态变量。而且,所有的自动变量都被分配在寄存器页0,所以bank限定词不能用于自动变量,便可以用于静态的局部变量。当程序退出时,自动变量占用的空间释放,自动变量也就失去意义。静态变量是一种局部变量,只在声明它的函数内部有效;但它占用固定的存储单元,而这个存储单元不会被别的函数使用,因此其它函数可以通过指针访问或修改静态变量的值。静态变量在程序开始只初始化一次,因此若只在某函数内部使用一变量,而又希望其值在2次函数调用期间保持不变,为实现程序模块化,则可将其声明为静态变量。例如以下声明中,有些为合法,有些为非法:
void max(void)
unsigned char var1; //合法声明
unsigned char bank1 var2; //非法声明
static unsigned char bank1 ver3; //合法声明
unsigned char var4=0x02; //合法声明,每次调用都初始化
static unsigned char bank1 var5=0x02; //合法声明,但只初始化一次
…………
}
PICC编译器对局部变量及传递参数使用RAM覆盖技术。编译时,连接器会自动把一些不可能被同时调用的函数的自动变量区重叠在一起,以达到内存的高效利用,因此其内部RAM的利用效率非常高。
2 函数调用时参数的传递
PICC函数参数的传递是根据被传参数的长度,用W、被调函数的自动变量区域或被调函数的参数区域传递,传递代码比较高效。传递给函数的参数可以通过一个由问号“?”、下划线“_”及函数名加一个偏移量构成的标号获取。下面为一调用求和子程序的源泉代码:
Unsigned char add_function(unsigned char augend,unsigned char addend);
Void main(void)
{
unsigned char temp1,temp2,temp3;
tem3=add_function(temp1,temp2);
}
unsigned char add_function(unsigned char augend,unsigned char addend)
{
return(augend + addend);
}
编译后生成的汇编程序为:
_main
; _temp2 assigned to?a_main+0
;_temp3 assigned to ?a_main+1
; _temp1 assigned to ?a_main+2
bcf status,5
bcf status,6
movf (((?a_main+0))),w
movwf(((?_add_function)))
movf (((?a_main+2))),w
fcall (_add_function)
movwf(((?a_main+1)))
_add_function
; _augend assigned to ?a_add_function+0
; _augend stored from w
bcf status,5
bcf status,6
movwf(((?a_add_function+0)))
movf (((?a_add_function+0))),w
addwf (((?_add_function+0))),w
return
3 PICC语言和汇编语言的混合编程
一般情况下,主程序都是用C语言编写的。C语言与汇编语言最大的区别在于,汇编程序执行效率较高,因为,C语言首先要用C编译器生成汇编代码,在不少情况下,C编译器生成的汇编代码不如用手工生成的汇编代码效率高。在PICC中,可以用两种方法在C程序中调用汇编程序。一种方法是使用#asm,#endasm及asm()在C语言中直接嵌入汇编代码,#asm和#endasm指令分别用于标示嵌入汇编程序块的开头和结属;asm()用于将单条汇编指令嵌入到编译器生成的代码中,如下所示:
void func1(void){
asm("NOP");
#asm
nop
rlf_var,f
#endasm
asm("rlf_var,f");
}
需要注意的是,嵌入汇编不是完整意义上的汇编,是一种伪汇编指令,使用时必须注意它们与编译器生成代码之间的互相影响。
另一种方法是将汇编作为一个独立的模块,用汇编编译器(ASPIC)生成目标文件,然后用链接器和C语言生成的其它模块的目标文件链接在一起。如果变量要公用时,则在另一个模块中说明为外部类型,并允许使用形式参数和返回值。
例如,如果在C模块中使用汇编模块中的函数,那么在C中可知下声明:
extern char rotate_left(char);
本声明说明了要调用的这个外部函数有一个char型形式参数,并返回一个char型的值。而rotate_left()函数的真正函数体在外部可以被ASPIC编译的汇编模块(文件名后缀.as)中,具体代码可以如下编写:
processor16C84
PSECT text0,class=CODE,local,delta=2
GLOBAL _rotate_left
SIGNAT _rotate_4201
_rotate_left
movwf?a_rotate_left
rlf?a_rotate_left,w
return
FNSIZE _rotate_left,1,0
GLOBAL?a_rotate_left
END
需要注意的是,以C模块中声明的函数名称,在汇编模块中是以下划线开头的。GLOBAL定义了一个全局变量,也等同于C模块中的extern,SIGNAL强制链接器在链接各个目标文件模块时进行类型匹配检查,FNSIZE定义局部变量和形式参数的内存分配。
这种方法比较麻烦,如果对某一模块的执行效率要求较高时,可以采取这种办法;但是,为了保证汇编程序能正常运行,必须严格遵守函数参数传递和返回规则。当然,为避免这些规则带来的麻烦,一般情况下,可以先用C语言大致编写一个类似功能的函数,预先定义好各种变量,采用PICC-S选项对程序进行编译,然后手工优化编译器产生的汇编代码后将其作为独立的模块就可以了。
4 注意事项
使用PICC时,为了更有效地利用资源,应注意以下几点:
①尽量使用无符号数和字节变量。
②在寄存器资源允许的情况下,对某些执行效率要求较高的平级元相互调用函数中用到的内部变量,可将其定义为全局临时变量,编程时覆盖使用,这样可减少很多编译代码。而对于中断函数内部用到的变量,可用全局变量。
③对于有一定汇编经验的人在开始使用PICC时,应多注意观看编译后产生的汇编源代码,并经常观看经正确编译链接后产生的映像文件(.MAP文件)。在该文件中,详细列出了分配给变量和代码的地址和生成代码的大小等信息。使用者可了解代码是否优化,变量分配是否合理,堆栈是否溢出等,从而写出高效简洁的C源代码。
④在很多情况下,PICC不支持类型强制转换。即在类型不匹配时须查验编译后的汇编代码,看是否正确,尤其是对指针操作的时候一定要注意。
⑤对某位变量自操作时,比如求反,不可以直接简写,例如:!flag;编译后不能正确产生代码,而须写成:“flag=!flag;”
⑥尽量选择全局优化编译选项。为保证寄存器页(包括程序存储期页面和RAM寄存器页)的正确转换,PICC的编译代码中有大量的变换寄存器页的代码,选择全局优化PICC会优化去大量有关RP0、RP1、PCLAPH所增加的变换代码,从而加快程序执行速度,并节省大量的程序空间。
⑦若有某一代码很短的函数被多个函数经常调用,最好将其定义为宏。因为若函数代码很短时,由于被调函数和调用函数不在同一代码页所产生的附加代码可能都会超过函数代码本身的长度。
关键词Microchip单片机功耗编程
由美国Microchip公司生产的PIC系列单片机,由于其超小型、低功耗、低成本、多品种等特点,已广泛应用于工业控制、仪器、仪表、通信、家电、玩具等领域,本文总结了作者在PIC单片机开发过程中的一些经验、技巧,供同行参考。
1怎样进一步降低功耗
功耗,在电池供电的仪器仪表中是一个重要的考虑因素。PIC16C××系列单片机本身的功耗较低(在5V,4MHz振荡频率时工作电流小于2mA)。为进一步降低功耗,在保证满足工作要求的前提下,可采用降低工作频率的方法,工作频率的下降可大大降低功耗(如PIC16C××在3V,32kHz下工作,其电流可减小到15μA),但较低的工作频率可能导致部分子程序(如数学计算)需占用较多的时间。在这种情况下,当单片机的振荡方式采用RC电路形式时,可以采用中途提高工作频率的办法来解决。
具体做法是在闲置的一个I/O脚(如RB1)和OSC1管脚之间跨接一电阻(R1),如图1所示。低速状态置RB1=0。需进行快速运算时先置RB1=1,由于充电时,电容电压上升得快,工作频率增高,运算时间减少,运算结束又置RB1=0,进入低速、低功耗状态。工作频率的变化量依R1的阻值而定(注意R1不能选得太小,以防振荡电路不起振,一般选取大于5kΩ)。
另外,进一步降低功耗可充分利用“sleep”指令。执行“sleep”指令,机器处于睡眠状态,功耗为几个微安。程序不仅可在待命状态使用“sleep”指令来等待事件,也可在延时程序里使用(见例1、例2)。在延时程序中使用“sleep”指令降低功耗是一个方面,同时,即使是关中断状态,PortB端口电平的变化可唤醒“sleep”,提前结束延时程序。这一点在一些应用场合特别有用。同时注意在使用“sleep”时要处理好与WDT、中断的关系。
图1提高工作频率的方法
例1(用Mplab-C编写)例2(用Masm编写)
Delay()Delay
{;此行可加开关中断指令
/*此行可加开关中断指令*/movlw.10
for(i=0;i<=10;i++)movwfCounter
SLEEP();Loop1
}Sleep
decfszCounter
gotoLoop1
return
2注意INTCON中的RBIF位
INTCON中的各中断允许位对中断状态位并无影响。当PORTB配置成输入方式时,RB<7:4>引脚输入在每个读操作周期被抽样并与旧的锁存值比较,一旦不同就产生一个高电平,置RBIF=1。在开RB中断前,也许RBIF已置“1”,所以在开RB中断时应先清RBIF位,以免受RBIF原值的影响,同时在中断处理完成后最好是清RBIF位。
3用Mplab-C高级语言写PIC单片机程序时要注意的问题
3.1程序中嵌入汇编指令时注意书写格式见例3。
例3
…………
while(1){#asmwhile(1){
……#asm/*应另起一行*/
#endasm……
}/*不能正确编译*/#endasm
……}/*编译通过*/
……
当内嵌汇编指令时,从“#asm”到“endasm”每条指令都必须各占一行,否则编译时会出错。
3.2加法、乘法的最安全的表示方法见例4。
例4
#include<16c71.h>
#include
unsignedinta,b;
unsignedlongc;
voidmain()
{a=200;
b=2;
c=a*b;
}/*得不到正确的结果c=400*/
原因是Mplab-C以8×8乘法方式来编译c=a*b,返回单字节结果给c,结果的溢出被忽略。改上例中的“c=a*b;”表达式为“c=a;c=c*b;”,最为安全(对加法的处理同上)。
3.3了解乘除法函数对寄存器的占用
由于PIC片内RAM仅几十个字节,空间特别宝贵,而Mplab-C编译器对RAM地址具有不释放性,即一个变量使用的地址不能再分配给其它变量。如RAM空间不能满足太多变量的要求,一些变量只能由用户强制分配相同的RAM空间交替使用。而Mplab-C中的乘除法函数需借用RAM空间来存放中间结果,所以如果乘除法函数占用的RAM与用户变量的地址重叠时,就会导致出现不可预测的结果。如果C程序中用到乘除法运算,最好先通过程序机器码的反汇编代码(包含在生成的LST文件中)查看乘除法占用地址是否与其它变量地址有冲突,以免程序跑飞。Mplab-C手册并没有给出其乘除法函数对具体RAM地址的占用情况。例5是乘法函数对0×13、0×14、0×19、0×1A地址占用情况。
例5
部分反汇编代码
#include01A7081FMOVF1F,W
#include01A80093MOVWF13
;借用
unsignedlongValue@0x101A90820MOVF20,W
charXm@0x2d;01AA0094MOVWF14
;借用
voidmain()01AB082DMOVF2D,W
{Value=20;01AC0099MOVWF19
;借用
Xm=40;01AD019ACLRF1A
;借用
Value=Value*Xm01AE235FCALL035Fh
;调用乘法函数
……01AF1283BCF03,5
}01B0009FMOVWF1F
;返回结果低字节
01B10804MOVF04,W
01B200A0MOVWF20
;返回结果高字节
4对芯片重复编程
对无硬件仿真器的用户,总是选用带EPROM的芯片来调试程序。每更改一次程序,都是将原来的内容先擦除,再编程,其过程浪费了相当多的时间,又缩短了芯片的使用寿命。如果后一次编程的结果较前一次,仅是对应的机器码字节的相同位由“1”变成“0”,就可在前一次编程芯片上再次写入数据,而不必擦除原片内容。
在程序的调试过程中,经常遇到常数的调整,如常数的改变能保证对应位由“1”变“0”,都可在原片内容的基础继续编程。另外,由于指令“NOP”对应的机器码为“00”,调试过程中指令的删除,先用“NOP”指令替代,编译后也可在原片内容上继续编程。
另外,在对带EPROM的芯片编程时,特别注意程序保密状态位。厂家对新一代带EPROM芯片的保密状态位已由原来的EPROM可擦型改为了熔丝型,一旦程序代码保密熔丝编程为“0”,可重复编程的EPROM芯片就无法再次编程了。使用时应注意这点,以免造成不必要的浪费(Microchip资料并未对此做出说明)。
参考文献
【关键词】PIC单片机 警示装置 太阳能 全方位
1 引言
电力输配电导线(含电缆)、杆塔及户外变压装置由于其分布范围广、环境复杂,特别是架空线、塔杆、变压装置等在人员密集区或城乡结合部极易造成人员、施工机械或超高车辆的刮蹭和触电。
目前,电力塔杆、变压装置等电力系统均安装了警示标志,并且已取得了比较好的效果。但是,电力架空线路过路部分并没有任何的警示标志,基于此我们研制了电力线路架空线过路警示装置。
2 系统组成和工作原理
2.1系统安装结构
整体系统共有三组传感器检测电路组成,利用传感器的角度范围和安装工艺,避免死区的出现,达到全方位覆盖检测的效果,系统传感器安装图如图1所示。
2.2 电路系统结构
线路警示装置电路系统由太阳能及锂电池蓄电部分、光敏电阻模块,红外传感器模块、超声波传感器模块、微控制器、LED警示部分、声音报警部分、蜂鸣器报警部分和单片机控制器构成,系统结构如图2所示。
系统选用系列传感器传感器采集现场数据,微控制器PIC单片机对传感器采集过来的数据进行分析和处理,当环境中的不同变量到达或超过预警值时,微控制器智能响应不同的警示电路以提醒人或者物体远离线路。当传感器数据回复正常时,关闭报警器。达到保护线路免遭破坏和人民的生命财产安全不受到伤害。
3 系统硬件设计
系统硬件设计包括太阳能电源模块设计,超声波传感器模块设计,红外传感器模块设计等几个部分。
3.1 主控模块芯片选择
系统微控制器选用美国Microchip(微星)公司的PICl6F1503单片机。PIC单片机是一种用来开发的去控制设备的可编程集成电路,它是采用了精简指令集(RISC)结构和Harvard双总线结构的嵌入式微控制器,其高速度、低电压、低功耗、大电流LCD驱动能力和低价位OTP技术等都体现出单片机新的技术趋势。PICl6F1503单片机内置看门狗(Watchdog)定时器,提高了程序运行的可靠性。
3.2 太阳能电源模块设计
基于太阳能供电,环保节能。选择无记忆性的锂电池作为蓄电池,实现太阳能有效利用,保护环境,节约能源。 为高压,为特定环境应用报警装置不易更换电源提供了良好的解决方案。通过智能电源管理芯片,对锂电池电池短路、过充、欠充有较好的保护作用。延长了蓄电池的使用寿命,并充分保证系统稳定工作。太阳能电源模块电路图如图3所示。
3.3超声波传感器模块设计
超声波传感器:超声波传感器是利用超声波的特性研制而成的传感器。超声波是指频率高于20kHz的机械波,由换能晶片在电压的激励下发生振动产生的,它具有频率高、波长短、绕射现象小,特别是方向性好、能够成为射线而定向传播等特点。声波探头主要由压电晶片组成,既可以发射超声波,也可以接收超声波。小功率超声探头多作探测作用。超声波传感器模块设计电路图如图4所示。
3.4 红外传感器模块设计
热释电红外传感器主要是由一种高热电系数制成的探测元件,在每个探测器内装入一个或两个探测元件,并将两个探测元件以反极性串联,以抑制由于自身温度升高而产生的干扰。有探测元件将探测并接受到的红外辐射转变成为微弱的电压信号,经装在探头内的场效应管放大后向外输出,人体辐射的红外线中心波长为9-10um,而探测元件的波长灵敏度灵敏度在0.2-20um范围内几乎稳定不变。在传感器顶端装上滤光镜,这个滤光片可通过光的波长范围是7-10um,正好适合于人体红外辐射的探测,而对其他的波长红外线由滤光片予以吸收,从而实现对人的检测作用。红外传感器模块电路如图5所示。
5 结束语
本系统把可持续利用能源太阳能以及传感器检测与报警跟工程应用良好的结合起来,为架空线路的防护提供了更好的保障,通过传感器对信号的采集,实时的对线路环境进行检测,并通过单片机软硬件的结合处理,使得系统的信号干扰更小,实验测试证明,本设计安全可靠、保护环境,节约能源,具有一定的推广价值。
参考文献
[1]新编电子电路大全[M].北京:中国计量出版社,2011.
[2]何立民.单片机高级教程应用与设计[M].北京:北京航空航天大学出版社,2005.
[3]李广弟,朱月秀,王秀山. 单片机基础[M].北京:北京航空航天大学出版社,2011.
[4]孙肖子.实用电子电路手册[M].北京:高等教育出版社,2009.
[5]沈辉,曾祖勤.太阳能光伏发电技术[M].背景:化学工业出版社,2005.
[4]高压线路标准规范[M].北京:北京电力出版社,2008.
作者单位
关键词:无线通信; PIC单片机; LabVIEW; 控制界面
中图分类号:TN9234文献标识码:A文章编号:1004373X(2011)23020103
Design of Temperature and Humidity Monitoring System Based on PIC SCM
WANG Haifeng
(Guangdong Institute of Technology, Zhuhai 519090, China)
Abstract: The application of short range wireless communication technique in industrial data control is studied. The system architecture, the hardware and the software of the system are introduced. Adopting PIC SCM as control kernel, controlling micropower RF chip(nRF24E1) to achieve wireless data transmission, controlling ICL7135 chip to achieve A/D conversion of the data from sensor, adopting the LabVIEW to compile the software. Adopting this system, the accurate monitoring of temperature and humidity in complicate circumstance can be obtained, the monitoring curve and data storage can be displayed realtimely.
Keywords: wireless communication; PIC SCM; LabVIEW; control interface
收稿日期:201107210引言
随着科学技术的发展,许多新兴产业对环境提出了更高的要求:制造大规模集成电路需要极高的空气洁净度,生物化学制药需要精确的温湿度控制。因此,对温、湿度和一些基本数据的监测和控制已成为生产过程中非常重要的技术要求。
PIC单片机(Peripheral Interface Controller)是由美国Microchip公司推出的,由于它的硬件系统设计便捷、指令系统设计精炼、采用精简指令集和哈佛总线结构,拥有速度高、功率低、驱动电流大及控制能力强等优点,能满足用户的各种需要,因此得到广泛的应用[1]。
本文提出一种采用PIC单片来设计实现的测量和控制系统。首先进行实例内容描述。
1系统组成
该系统设计内容分成两大部分:温湿度的测量和控制。
1.1温湿度测量部分
温湿度测量部分如图1所示,由传感器、信号调理前端、A/D模数转换部分和无线收发模块组成。
图1温度测量部分模块1.2温湿度控制回馈部分
控制回馈,就是控制核心MCU根据采集的数据,通过特定的算法判断当前的状态,并输出相应的指令来控制特定的模块以控制温湿度。系统结构框图如图2所示。
图2系统结构框图2系统硬件设计
2.1温湿度传感器的选择
温湿度传感器大致可以分为模拟温湿度传感器和数字温湿度传感器两类。
模拟温湿度传感器输出的是信号通常是电流、电压等线性信号,要通过信号前端调理电路和A/D转换电路来实现数字化,才能输入PIC控制核心来运算。这类常用的型号如:热敏电阻、热电偶、ADI公司出品的AD590、美信公司出品的MAX6613等。
数字化的温湿度传感器在内部集成了传感器、调理电路和A/D转换等电路,可以直接输出数字信号,也可以直接与PIC单片机相连。常用的数字温湿度传感器有达拉斯公司出品的DS18B20,ADI公司出品的ADT75等。
该系统选用ADI公司出品的AD590,其主要特点如下:
(1) 线性化的电流输出:1 μA对应1 K(K为绝对温湿度单位)。
(2) 宽温湿度测量范围:-55~+150 ℃。
(3) 优异的线性:全温湿度范围内达到±0.3 ℃。
(4) 宽泛的供电范围:4~30 V。
(5) 低廉的价格。
2.2PIC单片机硬件
PIC单片机作为控制核心,其最小系统原理如图3所示。图3中PIC16F877接上供电电压(+5 V和GND),复位电路及晶振电路,即可正常工作,显得简洁易用[1]。
图3PIC单片机最小系统原理2.3A/D转换芯片
ICL7135是一种四位半的双积分A/D转换器,具有精度高(精度相当于14位二进制数)、价格低廉、抗干扰能力强等优点。该系统利用ICL7135进行串行数据采集。该方式结构简单、编程简洁、占用单片机资源少。通过单片机PIC16F877的定时器T0来计脉冲个数,定时器T0所用的频率为系统晶振频率的1/12。为了使定时器T0的计数脉冲与ICL7135工作所需的脉冲同步,可以将ICL7135的BUSY信号接至PIC16F877的PSP5引脚,此时定时器T0是否工作将受BUSY信号控制。当ICL7135开始工作时,即ICL7135的BUSY信号跳高时,定时器T0才开始工作。
ICL7135与单片机的接口电路如图4所示。将单片机的ALE端的信号经过D触发器4分频后连接到ICL7135的CLK端。这样,定时器T0所记录的脉冲数是ICL7135测量得到的脉冲数的2倍。将定时器记录的脉冲个数除以2得到测量脉冲个数。再将测量脉冲个数减去10001就得到了A/D转换的结果,这样就得到了被测的模拟量,这些转换的实现全部在软件中完成,因此非常简单。
图4ICL7135与单片机接口电路图2.4无线收发芯片nRF24E1
nRF24E1是挪威Nordic公司2003年开发的一种嵌入了高性能单片机内核的高速单片无线收发模块。采用QFN封装,将射频发射、接收、GMSK调制、解调、增强型8051内核、9输入12位ADC、125频道、UART、SPI、PWM、RTC、WDT全部集成到单芯片中[23]。芯片的内部结构如图5所示。
主要组成模块有:
(1) 微处理器:增强型8051内核。
(2) 可编程控制的PWM输出。
(3) SPI接口:nRF24E1的SPI总线中含3条串口线(SDI,SCK和SDO)。
(4) RTC唤醒定时器、WTD和RC振荡器。
(5) A/D转换器:nRF24E1 A/D转换器有10位的动态范围。
(6) 无线收发器:nRF2401工作于全球开放的2.4~2.5 GHz频段。收发器由1个完整的频率合成器、1个功率放大器、1个调节器和2个接收器组成。
(7) 电源管理:在程序的控制下,nRF24E1可进入POWER DOWN省电模式,此时电流消耗仅为2 μA,外部中断和看门狗复位能使系统退出省电模式。
(8) 抗干扰能力:采用nRF24E1芯片很容易引入跳频机制,采用频点躲避方式降低同频干扰的影响。
图5nRF24E1的硬件模块3系统软件设计
软件部分包括初始化、A/D数据采集、阈值判断以及控制输入/输出等几个模块,总体构成如图6所示。
图6软件系统组成3.1软件系统
该系统的PC机端的软件采用美国NI公司的图形化编程语言LabVIEW平台,该平台是测控领域优秀软件,被誉为工程师的语言,可以加快产品开发速度。LabVIEW是实验室虚拟仪器集成环境的简称,是目前应用最广、发展最快、功能最强的图形化软件开发集成环境,摒弃了传统开发工具的复杂性。LabVIEW将广泛的数据采集、分析与显示功能集中在同一个环境,且功能强大[46]。
由LabVIEW编写的控制界面及框图程序如图7,图8所示。
图7监控系统界面图8监控系统框图程序4结语
本文介绍了一个完整的温湿度测量、控制系统的设计方案,包括器件的选择、硬件的设计、软件的设计,以及代码注释。采用了PIC单片机上自带的ADC模块,用户在自行设计时,可以考虑将其换成外部的高精度或高速的ADC器件,从而将精度、速度提高;也可以采用更新、更好的传感器,从而简化后级电路设计,也可以达到提高性能的目的。
参考文献
关键词 PIC单片机;电力线载波;PLC;OOK
中图分类号:TN409 文献标识码:B
文章编号:1671-489X(2013)36-0138-03
1 引言
电力线载波(Power-line Communication,PLC)是一种充分利用电力线分布式系统的技术。该技术可以为用户提供一系列的服务,如互联网络、家庭娱乐、家庭自动化等。同时,PLC技术也帮助电力供应者在管理电网的过程中有更多的竞争优势。因为电力供应商能够通过电网将所有的用户连接起来,所以它在电表通信系统中得到广泛的应用。在远程抄表系统中,大功率的信号通过电网传输给了用户,然后再接受到所有用户的反馈信息。该系统已经广泛在欧洲得到实施,在亚洲国家也有一些试点。
PLC系统也可以用在建筑物中的数据通信,如基于PLC的门禁系统、基于PLC的路由器。这一技术的应用使得铺设线路方面的开支大大节省。同时,电力供应商通过捆绑销售宽带业务,从而获得高额的利润。
PLC技术能够经济、有效地应用在一些特定的领域,主要是该技术具有许多其他有线和无线传输技术所不具有的优势:PLC利用现有的电力线网络,节约了铺设线路的成本;PLC传输比无线传输、电话线传输更安全,传输的数据不容易受到攻击;PLC传输使得电网用户始终在线,而且不需要过多考虑传输设备的电源问题。
同样,也存在一些不利的因素制约了PLC传输技术的发展:电力线辐射所造成的干扰;电网中的负载和用电设备使得信道中的噪声很大;电网中存在一定的安全隐患,使得PLC在维修的时候需要一定的专业防护。
为了实现简单化,本系统使用OOK技术(on-off-keying,二进制启闭监控技术)。同时,本系统中由接口电路来实现PIC单片机和电网之间的电气隔离和阻抗适配。这就意味着该系统将使用大量的现成组件,从而节约了设计成本。通过分析和实验,证实了本系统可以实现有效的信号传输。
2 PLC系统
众所周知,电力线并不是数字信号良好的传输媒介,这是因为传输信道中的杂散信号会作为噪声脉冲传输给接收端。所以,必须通过加强传输信号来克服传输通道中的干扰。这就使得基波传输变得不可行,而数字调制技术则可以实现信号的安全传输。
如图1所示,基本的PLC发射端、接收端电路各分为5部分。在发射端的结构框图中,有数据采集端、串/并行转换器、载波频率振动器、数字调制模块和接口电路。发射端的作用是将采集到的信号经过调制电路调制后,传送到电力线的网络上。OOK模块是一种简易的调制模块,它采用的是ASK技术(Amplitude-shift modulation,称作幅移键控技术,它是通过改变载波信号幅值的大小来表示数字信号的技术)。接口电路用于隔离220 V的日常照明用电和低压用电设备。同样,PLC的接收端通过接口电路将其与电网连接起来。前级放大电路能够实现信号在电力线中传输的损失补偿。放大后的信号经过解调模块恢复为原始数据传输给接收端。
3 基于PIC的电力线载波系统
该电力线载波系统将通过PIC单片机实现数据的生成和同步。输入PLC发射端的数据是由PC产生的并行数据。PIC单片机能够读取并行数据,并将其转换成串行数据。这样就保证了PIC单片机能够通过延迟消除数据传输过程中开关电路所造的尖峰噪声。
PLC的发射端 如图2所示,PLC的发射端由以下几部分组成:PIC单片机,实现传输数据的同步,并作为数据源;OOK调制模块,将传输信号转换成随幅值变化的电信号;电平转换器,主要作用是实现PIC单片机与OOK调制模块间的电平转换;功率放大电路,减少信号在传输过程中的损失;接口电路,隔离电压为220 V,频率为50 Hz的高电压和低电压。
接口电路由LC谐波电路组成,可用于发射端和接收端,如图3所示。接口电路的Tx端口连接到发射端,Rx端口连接到接收端。调制信号经过接口电路传输到电网。根据工作经验选择相应的参数来减少信道中的干扰,从而获得最佳的输出效果。因为所选择的载波频率必须是持续的、稳定的,而且载波频率应该比信号的传输频率高,所以选用LM566组成的电压控制振荡器来生成频率为140 KHz的矩形波。该频率远大于传输数据的频率,之所以选择矩形波,是因为它具有更强的抗干扰能力。
调制信号经过功率放大电路,提高所需的电流电平来驱动接口电路。这里,功率放大电路由功率C3039晶体管组成。正是由于该晶体管能适应高电压、高频率的工作环境,所以广泛应用于感应电路。PLC的集成电路将工频电路和低压电路分离开来,同时接口电路也可以用来抑制开关所产生的高电压尖峰。
PLC的接收端 在PLC的接收端接收到的信号被前级的放大电路放大。这个放大信号经过OOK解调模块还原出原始的数据,接收端被还原的数据传递到微控制器中,然后将串行数据转换成并行数据。这个接收端接口电路与发射端的接口电路具有同样的功能,隔离工频高压电。如图4所示,OOK调制解调模块电路的设计采用基本的逻辑门电路进行电平转换,该电路可以连接TTL和CMOS。由集成运放组成的比较器可以实现电平转换。该电平转换电路可以将电压的幅值增加到8 V,而低电压的幅值小于2 V。OOK中的载波信号来自于LM566组成的电压控制电路。
4 流程图
PIC单片机通过编程将端口中输入的并行数据转换成串行数据。PIC经过RS232传输引脚将串行数据输出。PIC的流程图如图5所示,可以看出,微控制器通过延迟来控制信号,从而减少信道中由于开关所产生的尖峰脉冲。
通过对接口电路漏电工频的测量来实现对其的检测。实验结果表明,最大的漏电信号幅值为36 mV,这并不会给发射端和接收端信号传输造成太大的影响。通过3种不同类型的信号(正弦波、三角波、矩形波)来检测接口电路,用得到的数据评估电路的衰减性能、失真和噪声。在3个点(发射端、电力线、接收端)对发出信号的传输过程进行检测,结果发现,正弦信号有很强的衰减,所以矩形波被用作载波信号。
5 结束语
本文试图设计一个简单、可靠的PLC系统,这个系统可以达到稳定、可靠和精确的要求。通过不断地分析和总结可以看出,这个基于PIC单片机的电力线载波系统具有较小的噪声和失真。同时,该系统由现成的组件组成,减少了设计成本,有利于其实现规模化生产。另外,它可以应用在低速率的数据传输上,比如远程抄表系统和自动控制系统。
参考文献
[1]俞品.电力线通信技术的发展与应用[J].电信科学,
2002,9(1):35-30.
[2]戚银城,尚秋峰,等.电力线载波技术的现状及发展[J].华北电力大学学报,2001(1):15-16.
[3]潘莹玉.电力线载波通信的现状分析[J].电网技术,
1998(2):33-40.
[4]尹晓华.智能用电小区的宽带无线综合业务系统研究[J].中国电力教育,2010(S2):3-5.
[5]赖征田.电力线载波信道特性研究及仿真[J].电力系统通信,2010(10):6-8.
[6]陈兰英,孔媛媛.电力线载波通信技术的发展与应用前景[J].江苏电机工程,2007(6).
[7]何健,杜海霞.新时代的电力线通信技术[J].东北电力学院学报,2005(2):13-15.
[8]田秀华.低压电力线扩频载波远程抄表系统的研究[J].信息技术,2003(6):23-24.