智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4931|回复: 5
打印 上一主题 下一主题

KQ-130F电力载波数据收发模块

[复制链接]

4

主题

40

帖子

0

精华

高级会员

Rank: 4

积分
823
威望
402
贡献
269
兑换币
175
注册时间
2012-10-24
在线时间
76 小时
毕业学校
南京理工大学泰州科技学院
跳转到指定楼层
1#
发表于 2012-11-7 23:35:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
KQ-130F电力载波数据收发模块
?KQ-130F是单列9针小体积高性能过零载波数据收发模块。是专门为在220V交流上,强干扰,强衰减,远距离要求的环境下,可靠的传送数据而特别设计和开发的性价比很高的载波模块。适用于抄表,路灯,智能家居,消防,楼宇控制以及需要电力线传送数据的其它应用领域。
一、KQ-130F系列性能?
1.集成了KQ-330F模块及外围电路的载波板,毋需其他的耦合元件,直接连接220V的交流电使用。外型尺寸为53×38×17毫米(L×D×H),单列排针引出(见下图)1、2脚接220V交流电源无方向(1脚,2脚间距2X0.1英寸),2脚,3脚间距1.1英寸,其余各脚之间间距0.1英寸。
2.工作频率120~135KHZ,接口波特率9600bps。实际波特率100bps,250个字节缓存器。
3.温度范围:-25℃~+70℃ 湿度≤90%
4.供电电源:DC +5V  接收时:≤11mA  发送时:≤300mA
二、规格及型号:?
KQ-130F:?
130后第一个字母定义为:?
F:过零传送型?
三、KQ-330引脚说明?:    正面从左至右为1~9脚:
  
1PAC220V交流电压的火线(或零线)
2PAC220V交流电压的零线(或火线)
3P+5V+5V发送电源(260mA),如果单收数据可以悬空降低功耗
4PGND:数字电路地线
5P+5V+5V工作电源11mA
6PRXTTL电平,载波数据入,接单片机的TXD高阻输入不能悬空
7PTXTTL电平,载波数据出,接单片机的RXD
8PMODE:模式选择,悬空或接5V为高电平,接地为低电平
9PNC/RST :复位脚(低电平有效)只有在工作时频繁切换模式时使用。毋需此功能,引脚应悬空
四、KQ130F系列模块编程注意事项?
本模块接口波特率9600bps,用户与模块通讯请采用9600BPS异步方式,格式为1个起始位,8个数据位1个停止位格式。
本模块通过MODE脚控制模块使用透明工作方式(高电平),还是自定义工作模式(低电平)。MODE高电平(悬空)时为透明工作模式,低电平(接地)时为自定义工作模式。
在透明工作模式时:(MODE=1即MODE悬空或接5V。建议悬空)在编程时毋需对模块初始化,通讯时和普通RS-485方式类同。但是,由于电力线上负载比较多,电器所产生的谐波也就无法避免地耦合到电力线上,本模块是高灵敏度的载波模块,在所有载波模块都处于接收状态时,电力线上就会全部被电器所产生的谐波所覆盖,这时,模块将解调出噪声数据从TX端输出。所以发送和接收数据应该引入同步码以区分真正的传送数据。
注意:在模块发送缓存器(253字节)满后不再接收新的数据。也就是一帧发送字节小于253个字节。用户的一帧数据请连续不间断的发送到模块,如果停顿时间超过模块已发送完所有的数据时间(缓存器空,最后一个字节已完全发送),接收方的模块可能会插入噪声数据。
如向RX端连续发送: 5A 5A 5A 34 56 78 12 45 67  在其他接收模块就可能输出
FE FD EF 5A 5A 5A 34 56 78 12 45 67 85 DE EF.加黑的字节是在所有模块都没发送数据时,接收模块接收到的噪波数据。
接收数据还是采用9600BPS异步方式,格式为1个起始位,8个数据位1个停止位格式,从TX送出,但是大约要每0.09秒左右发送一次。在自定义工作模式时也等同。
在自定义工作模式时MODE=0即MODE接地)用户按照我公司的定义传送数据,一帧传送数据定义如下:
第一个字节:要传送一帧的字节数0-250(不含第一个字节)
第二个字节到第n+1个字节:用户需传送的字节数据
注意:在模块还没发送完一帧数据时,不会接收下一帧数据。
接收数据和发送数据等同。
如向RX端发送: 02 AE 87 在其他模块TX就输出02 AE 87
    02是字节长度,这表示后面有2个字节的数据。
如向RX端发送: 09 01 02 03 04 05 06 07 08 09
在其他模块TX就输出09 01 02 03 04 05 06 07 08 09
    09是字节长度,这表示后面有9个字节的数据。
最大的字节长度可到253.
如向RX端发送: FD 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E...FD
在其他模块TX就输出FD 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E...FD
有效的数据可以到253个。
KQ-130系列模块的区别:
  KQ-130F是专门针对交流220V/110V ,50HZ/60HZ强干扰设计的基于交流零点传送方案的载波模块,在市电上面具有传送效果好,距离远等特点。必须在有交流电源的情况下才能传送数据,载波速率是50HZ/100BPS,60HZ/120BPS我们通过软件优化9个BIT可以传送1个字节。KQ-130E是完全的载波模块,传送数据与零点无关。在载波解调后做了数字滤波,提高其载波数据的抗干扰能力,速率越低效果越好。KQ-130E可以在0V-220V交直流电压下进行载波通讯,如:220V,110V,80V,48V,36V,24V,12V等交直流电压以及停电情况下的载波通讯。KQ-130E最高速率是400BPS。可以选择100BPS通讯提高抗干扰能力,但是同样是100BPS的KQ-100E在交流电源上的通讯效果比KQ-130F差不少。KQ-130K的通讯方式和KQ-130E相同,唯一的区别就是实际的载波速率最高可以做到1200BPS。尾缀带+号的,KQ-130F+,KQ-130E+,KQ-130K+,可以支持发送功率电压在12V的情况下连续的长时间发送数据。
KQ-130系列模块的共同点:
所有KQ-130系列模块与单片机/微机的接口都是一样的,通讯方式也相同。与单片机/微机的串行接口速率都是9600BPS,一个起始位,八个数据位和一个停止位。相同的透明工作模式或自定义工作模式。
KQ-130F电力载波数据收发模块图片:

4

主题

40

帖子

0

精华

高级会员

Rank: 4

积分
823
威望
402
贡献
269
兑换币
175
注册时间
2012-10-24
在线时间
76 小时
毕业学校
南京理工大学泰州科技学院
2#
 楼主| 发表于 2012-11-7 23:36:45 | 只看该作者
KQ-130F电力载波数据收发模块与单片机连接图:






KQ-130F电力载波数据收发模块与微机9针RS232口连接图:

DB9的2脚接微机的RXD,3脚接微机的TXD




KQ-130F电力载波数据收发模块经上图与微机9针RS232连接后用串口调试助手测试图:

MODE=1 高电平时:

发送01 02 03 04 05 06 78 89数据,最多可连续发送255个字节。如果发送一帧超过255字节的数据,请发送250个字节后延迟20秒,再发送后面的数据。


另一台电脑接收到的:


01 02 03 04 05 06 78 89在很多噪波之后。但是是完全透明的传送,没有增加任何数据。

MODE=0 低电平时:

发送 08 01 02 03 04 05 06 78 89

第一个字节是格式要求:要发送的字节数,这里有8个,最多可达250个(0xf0)


另一台电脑接收到的:


没有噪波,但是必须按我们的格式通讯,并且会增加一些前导码。

附2:

KQ-130模块作为从设备,MODE接地。返回微机通过串口调试助手发送数据的89C2051单片机C语言程序:(中断接收发送方式)

HEX文件下载地址(下载后把尾缀.h修改成.hex)

www.kq100.com/kq_test.h

C语言源文件下载地址:

www.kq100.com/kq_test.c



/*

MODE=0时 上位机发送04 12 34 56 78

89C2051 收到上位机后返回同样的数据。

使用11.0592M 的晶振

我们已经测试通过。

*/

#include <reg51.h>

#include <string.h>

#include <absacc.h>

#include <math.h>

bit PTT;

unsigned char  trbuf[64];

main()

{

register unsigned int Dcn;



PCON=0X80;

   TMOD=0X21;

   TR0=1;

   IP=0X10;

   SCON=0X70;

   TH1=0XFA;

   TR1=1;

     IE=0X90;

     TR1=1;

     PTT=1;

SCON=0x70;

PCON=0x80;

P1=0X0FF;

P3=0X0FF;

while(1)

{

}

}

void estr0() interrupt 4 using 2{

static unsigned char len=0,max=0,i;

  unsigned char j,k;

    if (RI)

    {

    RI=0;

    if (PTT)

    {

    k=SBUF;

    trbuf[max]=k;

    if (len==0)

    {

      max=0;

      trbuf[0]=k;

      len=k;

      max++;}

    else if (max==len)

    { SBUF=trbuf[0];

      TI=0;

       PTT=0;

       max=1;

    }

    else

    {max++;

    }

     }

}

   if(TI)

     { TI=0;

          if(!PTT)

          {

          SBUF=trbuf[max];

          if (max==len)

          {

           PTT=1;

           max=0;

           len=0;

          }

          else

          {

          max++;

          }

          }

     }



}

AT89C51 C语言连续发送程序参考:



//AT89C51系列发送示范程序,11.0592M的晶振,MODE脚接地 char b[]={0x03,0x12,0x34,0x56}; //03代表要发送数据的长度void delay_ms(int t);                        void main(){             int max;   PCON=0X80;      //第1步,初始化串口,10位方式,一个停止位   SCON=0X70;   TMOD=0x20;      // 第2步,定时器1工作方式2   TH1=0XFA;       // 第3步,赋定时器1的初值,设置成9600BPS   TL1=0XFA;    TR1=1;          // 第4步,开定时器1     while(1)   {                          for(max=0;max<4;max++){         SBUF=b[max];//0x03,0x12,0x34,0x56 //独立接收发送缓冲器                          while(TI==0);//发送中断标志         TI=0;}   delay_ms(800);//延迟800mS 加4个前导码,共8字节,要800mS    }}void delay_ms(int t){   int a;   while(t--)   {   for(a=300;a>0;a--);   }} //AT89C51系列接收示范程序,11.0592M的晶振,MODE脚接地 char b[20]; //在这假如接收3个有效字节,就是上面的发送的数据void main(){             int max;   PCON=0X80;      //第1步,初始化串口,10位方式,一个停止位   SCON=0X70;   TMOD=0x20;      // 第2步,定时器1工作方式2   TH1=0XFA;       // 第3步,赋定时器1的初值,设置成9600BPS   TL1=0XFA;    TR1=1;          // 第4步,开定时器1     while(1)   {                RI=0;          for(max=0;max<4;max++){         while(RI==0);//发送中断标志         RI=0;         b[max]=SBUF;//0x03,0x12,0x34,0x56 //独立接收缓冲器                         } //接收不需要延迟   }}  









/*

*STM32源程序要感谢 ibeerbear 无私的奉献

* 说明:利用 STM32 的 USART1 与 KQ-130F 通信,已调试通过

* 线接法:STM32/PA9/TX -> KQ130F/RX,STM32/PA10/RX -> KQ130F/TX,KQ130F/MODE接地,KQ130F/NC悬空,KQ130F双 +5V 供电,AC 脚接家用插座

* 另外:1,KQ130F工作电压可以调整为 3.3v;2,发送帧之间一定要有时间间隔

*/



   // 先配置 STM32 RCC、GPIO 等



   // 再配置 USART1

   void USART1_Config(void) {

     // 别忘记配置 USART1 的 RCC

     

     GPIO_InitTypeDef GPIO_InitStructure;

     USART_InitTypeDef USART_InitStructure;



     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

     GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;

     GPIO_Init(GPIOA, &GPIO_InitStructure);



     GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;

     GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;

     GPIO_Init(GPIOA, &GPIO_InitStructure);



     USART_InitStructure.USART_BaudRate = 9600;

     USART_InitStructure.USART_WordLength = USART_WordLength_9b;

     USART_InitStructure.USART_StopBits = USART_StopBits_1;

     USART_InitStructure.USART_Parity = USART_Parity_No ;

     USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;

     USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;

     

     USART_Cmd(USART1, DISABLE);

     USART_Init(USART1, &USART_InitStructure);

     USART_Cmd(USART1, ENABLE);

   }







#ifdef _SERVER_

   unsigned char  data;

#elif defined _CLIENT_

   unsigned char Buffer[] = { 7,0,1,2,3,4,5,6 };

   unsigned int Index = 0;

#endif



   while (1) {

#ifdef  _SERVER_

     if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET) {

        data = USART_ReceiveData(USART1);

        if(data <= 7) {

          // 在这里添加处理数据的代码

          LED_Toggle(GPIO_LED_PORT, GPIO_LED_PIN);

        } else {

          // 在这里添加错误数据处理代码

        }

     }

#elif defined _CLIENT_

     Index = Index % 8;     

     if (Index == 0) {

        // Delay 函数利用 systick 精确延迟 2 秒

        Delay(2 * 1000 * 1000);

     }   

     USART_SendData(USART1, Buffer[Index++]);

     while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

#endif

   }
回复 支持 反对

使用道具 举报

203

主题

1964

帖子

2

精华

超级版主

平凡的小人物

Rank: 10Rank: 10Rank: 10

积分
219488

特殊贡献奖章论坛骨干奖章推广达人奖章热心会员奖章优秀版主奖章论坛元老奖章优秀会员奖章资源大师奖章活跃会员奖章在线王奖章

QQ
威望
121797
贡献
91365
兑换币
4298
注册时间
2010-9-29
在线时间
3163 小时
3#
发表于 2012-11-8 02:15:00 | 只看该作者
谢谢楼主的分享!
回复 支持 反对

使用道具 举报

4

主题

40

帖子

0

精华

高级会员

Rank: 4

积分
823
威望
402
贡献
269
兑换币
175
注册时间
2012-10-24
在线时间
76 小时
毕业学校
南京理工大学泰州科技学院
4#
 楼主| 发表于 2012-11-8 11:44:13 | 只看该作者
翔宇 发表于 2012-11-8 02:15
谢谢楼主的分享!

那个引脚MODE=0MODE接地,怎么实现 还有两个+5V的电源怎么搞
回复 支持 反对

使用道具 举报

203

主题

1964

帖子

2

精华

超级版主

平凡的小人物

Rank: 10Rank: 10Rank: 10

积分
219488

特殊贡献奖章论坛骨干奖章推广达人奖章热心会员奖章优秀版主奖章论坛元老奖章优秀会员奖章资源大师奖章活跃会员奖章在线王奖章

QQ
威望
121797
贡献
91365
兑换币
4298
注册时间
2010-9-29
在线时间
3163 小时
5#
发表于 2012-11-8 15:30:16 | 只看该作者
Tiger_M 发表于 2012-11-8 11:44
那个引脚MODE=0即MODE接地,怎么实现 还有两个+5V的电源怎么搞

直接接5V电源的+5V和地不行吗?
回复 支持 反对

使用道具 举报

4

主题

40

帖子

0

精华

高级会员

Rank: 4

积分
823
威望
402
贡献
269
兑换币
175
注册时间
2012-10-24
在线时间
76 小时
毕业学校
南京理工大学泰州科技学院
6#
 楼主| 发表于 2012-11-8 20:28:07 | 只看该作者
翔宇 发表于 2012-11-8 15:30
直接接5V电源的+5V和地不行吗?

哦!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-9-28 21:03 , Processed in 0.230154 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表