MI200e电力线通讯

本文讲述了作者在课设中使用MI200e芯片进行电力线通讯的实践经验,包括选择芯片、修改电路、SPI接口调试、程序开发和硬件制作等过程。通过STM8主控与MI200e交互,实现了双机通讯和传感器信息传输。目前,已成功实现串口透传、按键扫描和OLED显示等功能,但仍有微秒级延时问题待解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近做课设,选了电力线通讯这种途径,经过百度google等一番查询,最终敲定了mi200e这块国产芯片。


 

课设要求就是双机通讯,互传传感器信息以及模拟一个时钟


 

然后淘宝买了拆机的成品,我拿回来把mcu拆了然后飞出通讯端口和stm8交互。现在串口两边可以通讯了,下一步就是重新绘制一块完整的pcb,然后制版,并实现响应功能。

先上ref:

http://search.eefocus.com/s?app_id=90&sub=1&q=mi200e

这是电路城搜索mi200e得出的结果,我主要参考第一篇,他在嘉立创还有发帖,点进去你就找得到了。

他使用stm8主控并绘制整块pcb,我则使用以前的stm8核心小板。由于mi200e常规供电为5v,稍稍更改核心板为5v供电做好。

没有拍当时做的图片,上pcb和实物吧!

将右图放大后,可看到两块绿板,这两块就是成品模块,应用于智能抄表的。可看到左边那块上有一根小跳线,跳线右边哪里原来是块u,我用烙铁把他拆了。

不然stm8没法单独和mi200e通讯。至于为什么要跳那根线,我在网上恰好查到他的原理图,(应该是miartech官方的方案,然后抄的,原件丝印不同),mi200e的供电vdd受一个pmos控制,

所以直接将mos的g级接地。其实我买了两种,一共买了四块,连运费20+rmb。另一种的丝印是和原理图队上的。我后面会附上手头的资料。

两块板子背面其实有排针,原来用于接220v的,我直接把他们并联在一起,然后接了一根电源线。一方面因为我电源线紧张,另一方面固定在一块纸板上方便调试。

 

 这是原理图,通讯接口是SPI,其中cs不能直接接地,因为数据是双向互传,并且不是单次传输。具体参考SPI接口flash的cs为什么不能直接接地吧。

我一开始想省io直接接地,结果调试的时候发现,自检过不了。

至于rst引脚,我把它接到stm8的nrst恰好可以使用,虽然官方应用笔记里面说要低电平1s后拉高。留待后面再测试吧。

这样就是4个io就能交互了。


 

然后我按照嘉立创那篇帖子里的方案做了,然后一直调试,发现他的程序我直接用不了,数据通。

然后我发现省略了crc校验初步数据能够发送,但是有毛病。

 没办法,又看手册,看应用笔记。以及对比另一个c51版本的程序

,这个程序从我给的链接里的第二篇可以下载到。但是这个只是驱动,应该就是这个产品用到的,但是没给全程序。我猜嘉立创那篇帖主

也是参考这个改的,因为驱动大体一致。我同时看笔记,以及两篇驱动,最后经过一番修改,然后下进去竟然就可以工作了。

 

程序限制它64字节,对于一般应用足够了。

说一下这块芯片的发送过程,两个引导字节(一个字),一个固定字节,然后配置字节(速率和字长,字为单位)。到这里都是固定200/240bps速率(会因交流电频率不同而不同),之后的速率可自行配置,

程序里设定的是1600/1920bps。然后是以字为单位的数据(这里就是串口透传,由于是字对齐,所以必须是偶数字节,这里要注意!),最后一个字的CRC校验。

附上一张笔记图,看别人的代码真是不容易啊。这里双向能通讯了,后面再看要不要他程序的框架,如果要,还有更多细节要明白。

和硬件打交道,如果不懂的话,可能就是一个延时你就要消耗大把时间。所以需要日积月累!

  1 #include "stm8s.h"
  2 #include "config.h"
  3 #include "MI200E.h"
  4 #include "PLCProcess.h"
  5 
  6 unsigned char g_cStatusReg;
  7 unsigned char g_cRecModCfgReg;
  8 unsigned short PLC_Word_Rec_Overtime;
  9 unsigned char    g_bRecv_Pkg_Flag;
 10 unsigned char g_CRC_H,g_CRC_L;
 11 unsigned char g_cPkg_Length = 0;
 12 unsigned char g_Pkg_Indication_Byte = 0;
 13 unsigned char g_cTrans_Step;
 14 unsigned char g_cRecv_Step;
 15 unsigned char g_cRecByte_H;
 16 unsigned char g_cRecByte_L;
 17 unsigned char g_cSend_Data_Length;
 18 unsigned char g_cSend_Byte_Cnt;        
 19 unsigned char g_cRecv_Byte_Cnt;
 20 unsigned char g_Send_Buf[64];
 21 unsigned char g_Recv_Buf[64];
 22 
 23 
 24 void PLC_Send_Frame(unsigned char cWRData_H, unsigned char cWRData_L)
 25 {        
 26   PLC_Write_Reg(PLCAddrWRSR,(g_cStatusReg&0x7F)); //Clear TI;Write Status Register:0x02
 27   MI200E_SCK_0;
 28   MI200E_CS_0;
 29   Write_SPI(PLCAddrWRTB0);    //Write Sending Byte Register 0:0x04
 30   Write_SPI(cWRData_H);
 31   Write_SPI(cWRData_L);
 32   MI200E_SCK_0;
 33   MI200E_CS_1;        
 34 }
 35 
 36 void PLC_RD_Recv_Word(void)
 37 {    
 38   MI200E_SCK_0;
 39   MI200E_CS_0;
 40   Write_SPI(PLCAddrRDRB0);    //Read Receiving Byte Register 0:0x84
 41   g_cRecByte_H = Read_SPI();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值