315无线模块+单片机的无线系统

默认分类   2007-06-08 19:01   阅读1541   评论9  
字号:    

 

见上图。因为要对舰上16枚火箭进行遥控点火,所以DIY了这个电路。但事实上只要加上合适的外围芯片,要实现对该模型的整体控制也是完全可以的(速度和舵角的控制)。这篇文章只描述最基本的芯片通信调试过程。有关的具体控制暂不公布,如果你对这个遥控设计感兴趣或有商业需求,请留言。

这个设计的成本可以说是极低的:20块一对无线模块(一个信号发射模块,一个接受模块,淘宝上买的),加上6块钱一个51的单片机,还有一些零碎器件,总体不会超过35元。用在海陆模型上完全可以,但飞行器就难了,首先体积重量都不合格,其次我对这种315芯片的抗干扰性保持怀疑。

另外值得一提的是基于这个电路拓展的遥控电路功能强大,实现十来个通道的比例控制完全是可以的。或可以传递来自传感器的信息(比如舵轮仪、温湿度传感器、抄表、无线安防控制等)

 

我所使用的315芯片的资料:

http://www.ayxsj.com/f05p.htm

http://www.ayxsj.com/j04v.htm

 遥控端信号发射部分的电路(测试用)

 

 

1原理

  第一块单片机p1.0口输出脉冲方波提供给无线发射模块,无线发射模块将信号以电磁波的形式传到无线接收模块。无线接收模块会根据这个电磁波还原出脉冲方波提供给第二块单片机,第二块单片机进行进一步的解算处理。

 

2通信协议

  根据这个原理和315模块的特性。我决定以900us高电平和2000us底电平表示1;450us高电平和 2000us低电平表示0。而8个1或0组成一个字节。为了防止误码,所以在每个字节的前面加一个2ms高电平和2ms低电平的起始码。

3单片机相关知识

 ⑴用定时器产生制定脉宽的脉冲

     

 ⑵用计数器计算接收到脉冲的宽度

GATE=1时(门控方式),  启动计数器的条件 TR=1且INT0=1。所以利用这点,可以测量外部脉冲的高电平宽度

4单片机调试程序

第一步的调试不停发送1( 一个位) ,观察接收到的信号是否正常。有示波器的话非常方便直观,如果没有示波器,那么可以在单片机上接16个LED灯,将TH0显示在P2口的8个灯,TL0显示在P0的8个灯。比如收到脉宽900us的信号,那么TL0=11000010B  TH0=1B ,下排P2口左边第二个和右边最后两个灯亮,上排P0口左边第一个亮。然而实验中发现实际接收到的脉宽比预计的平均少20us,但是这丝毫不会影响接收数据的正确性,因为在这个协议中只要判断TH0和TL0的高4位就足以识别是1或0了发送程序关键部分如下。 

 略

 

第二步的调试发送一字节数据( 8个位) ,并显示在P2口上ORG 0000H

AJMP MAIN

ORG 0010H

MAIN:

          MOV TMOD,#01H

          CLR C

          MOV R5,#08H

 

 aa:      MOV A,#10101010B

          acall  send

          mov a,#01010101b

          acall send

          mov a,#11110000b

          acall send

          mov a,#1111b

          acall send

          ajmp aa

 

send:         MOV TH0,#00fcH

              MOV TL0,#0018H

           SETB P1.0

              SETB TR0

              JNB TF0,$

           CLR P1.0

              CLR TF0

              MOV TH0,#00FCH

              MOV TL0,#0025H

 

              SETB TR0

              JNB TF0,$

              CLR TF0

 

   SS:        RLC A

              JC S1

              AJMP S0

 

   S1:        MOV TH0,#00feH

              MOV TL0,#003fH

           SETB P1.0

              SETB TR0

              JNB TF0,$

           CLR P1.0

              CLR TF0

              MOV TH0,#00FCH

              MOV TL0,#0025H

              SETB TR0

              JNB TF0,$

              CLR TF0

              AJMP OUT

 

   s0:        MOV TH0,#00ffH

              MOV TL0,#001fH

           SETB P1.0

              SETB TR0

              JNB TF0,$

           CLR P1.0

              CLR TF0

              MOV TH0,#00FCH

              MOV TL0,#0025H

              SETB TR0

              JNB TF0,$

              CLR TF0

              ajmp out

 

   OUT:       DJNZ R5,SS

              clr c

              mov a,#10101010b

              mov r5,#08h

              ret

 

DELAY:        mov R0,#05Fh

         w_1:  mov R1,#0fFh

         w_2:  djnz R1,w_2

               djnz R0,w_1               RET 

 

接收端的电路(测试)

如果顺利,那么在接收芯片的数据输出端也会产生900us脉宽的脉冲波。如果没有示波器,那么怎么知道接受到信号的脉宽呢?我在P2口接了8个LED。读取TH0 TL0 里的数值,取反,然后依次在P2上显示。比如900us脉宽对应TH0=11B TL0=10000100B,对应位为1折亮,所以当显示TH0的时候最左边的两个LED会被点亮,而显示TL0的时候从左往右:第三个和最后一个亮。但事实上脉冲信号存在20us的误差。然而这丝毫不影响遥控的准确性,因为我是取900us表示1,450us表示0,然后根据8个1或0组成一个字节的控制码。具体的通信协议就不在这啰嗦了

 

 

接收部分测试用的代码

 

ORG 0000H

AJMP MAIN

org 0003h

ajmp TF

ORG 0050H

MAIN:   

         SETB IT0        

         CLR IE0

 

         MOV TMOD,#00001001B

         MOV TH0,#00H

         MOV TL0,#00H

         MOV IE,#10000001B

         ajmp $

 

TF:      acall det         

         MOV A,TH0

         CJNE A,#07H,diuqi

         AJMP DETECT

 

detect:  acall det

         MOV A,TH0

         CJNE A,#03H,S_C

         AJMP SETB1

     S_C:MOV A,TH0

         CJNE A,#01h,ERROR

         AJMP SETB0

 

    SETB1:

          MOV A,R7

          SETB C

          RLC A

          MOV R7,A

          DJNZ R3,DETECT

          AJMP OUT

    SETB0:

          MOV A,R7

          CLR C

          RLC A

          MOV R7,A

          DJNZ R3,DETECT

          AJMP OUT

 

  det:   mov th0,#00h

         mov tl0,#00h

         JB P3.2,detect

         SETB TR0

    S_2: JNB P3.2,S_2

    s_3: JB P3.2,s_3

         clr tr0

         ret

 

 diuqi:    acall fuwei

           reti

 

 ERROR:

           clr p0.7

           acall delay

           setb p0.7

           acall delay

           acall fuwei

           RETI

 

 OUT:      clr p0.6

           CPL A

           mov p2,A

           mov r4,#20h

       del:acall delay

           djnz r4,del

           setb p0.6

           mov p2,#0ffh

           acall delay

           acall fuwei

           reti

 

fuwei:     mov TH0,#00h

           mov TL0,#00h

           MOV R3,#08H

           MOV R6,#02H

           clr ie0

           ret

 

DELAY:         mov R0,#061h              

         w_1:  mov R1,#0ffh

         w_2:  djnz R1,w_2

               djnz R0,w_1

               RET

评论(?)
阅读(?)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
网易公司版权所有 ©1997-2009