无线充电原理与QI协议详解[通俗易懂]

一、无线充电基本原理无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振状态,接收端线圈也是如此下图就是实际电路应用无线充电工作基本原理图发射板主要有控制ic,驱动ic,发射线圈,谐振电容组成这个是接收线圈,扎数比发射线圈多所以谐振电容可以小一些,方便安装…

大家好,又见面了,我是你们的朋友全栈君。

一 、无线充电基本原理
无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振状态,接收端线圈也是如此

111.JPG

下图就是实际电路应用

34234234.JPG

无线充电工作基本原理图

23456.JPG

发射板主要有控制ic,驱动ic,发射线圈,谐振电容组成

234234234.JPG

这个是接收线圈,扎数比发射线圈多所以谐振电容可以小一些,方便安装在手机后盖

一 、无线充电通讯协议
上面说了原理,但是为什么无线充电还需要协议呢,原因如下

1、发射板需要确认接收线圈是不是已经放置在发射线圈上方,如果没有接收线圈,发射端不工作降低功耗

2、如果在线圈上放了金属制品会产生涡流导致金属品发热,比如在发射板上放了钥匙那么钥匙就会发热,需要避免这种情况
3、手机充电时电流不同,比如正常充电时1A,充满电的时候电流会降到几十MA,那么发射板功率如果一直恒定不变,当手机充满电时发射线圈接收端的电压会很高,这是负载变小电压升高的原因,所以需要当负载变化时发射线圈功率也需要跟着调节,就像开关电源一样需要电压反馈控制

解决方法:

1通过无线通讯机制来判断是不是金属制品或者没有放置接收线圈,比如接收端线圈必须间隙发送确认信号

2通过无线通讯机制来调节发射端功率

具体方法其实类似RFID,区别在于无线充电是单向通讯,接收端发送信号,发射端接收信号

主要通讯流程如下

1,上电后发射端线圈发射脉冲信号,然后接收端线圈收到信号后返回一个身份识别包信号,然后在发送配置包,比如功率设置

2,当时发射线圈接收到接收线圈发来的信号就可以正常工作了,这个时候接收线圈必须在规定时间内发送信号强度包来调整功率,如果在规定时间内发射线圈没有收到信号就认为接收线圈已经不在发射板上方,导致重新建立握手

各种通讯包格式

76_956751_6fb5e1fcf982c62.jpg

包格式如下

76_956751_2b7fcf82e10fc90.jpg

这是数据的编码格式,频率为2KHz

76_956751_c3cbaf02c9670af.jpg

2233.jpg

调制方式有两种,下图是电容调制和电阻调制,电容调制是接收板常用电路

在这里插入图片描述76_956751_83a50e1edcdf1b1.jpg76_956751_942fb7c137ddecb.jpg

三、实验验证
用单片机模拟接收线圈控制IC,通过观察发射板的供电情况,我用的是电阻调制,因为比较简单,主要是看下能不能通讯,下面是自己写的代码

这个包格式
前导:11个-25个1
包头:
常用的就是0X01,0X51,0X71,0X03,0X04,
发包顺序是0X01,0X71,0X51,包中间间隔小于21ms
然后0X03和0X04包在充电中发出,间隔小于1.5S和23S
信息:这个就看我发的链接发内容比较多
校验:把包头和包信息异或检验
下面是用NV32开发板的程序,LED3就是调制波形, LED3_On();调制MOS管栅极为高电平

void Header (void)//前导11到25个1,这里用18个1
{

uint8 i;
for(i=0;i<18;i++)
{

LED3_On();
delay_us(250);
LED3_Off();
delay_us(250);
}
}
void Code (uint8 aa)//字节编码
{

uint8 i,j=0;
LED3_Toggle();//起始位
delay_us(500);
for(i=0;i<8;i++)//数据位
{

if(aa&0x01)
{

j+=1;
LED3_Toggle();
delay_us(250);
LED3_Toggle();
delay_us(250);
}
else
{

LED3_Toggle();
delay_us(500);
}
aa>>=1;
}

if(j%2)//检验位
{
      LED3_Toggle();
        delay_us(500);

}
else
{
        LED3_Toggle();
        delay_us(250);
        LED3_Toggle();
        delay_us(250);
}

 LED3_Toggle();//停止位
 delay_us(250);
 LED3_Toggle();
 delay_us(250);

}
void ping (void)//PING包
{

Header();
Code(0x01);
Code(0x80);
Code(0x01^0x80);
LED3_Off();
}
void id (void)//id包
{

Header();
Code(0x71);
Code(0x10);
Code(0x00);
Code(0x01);
Code(0x00);
Code(0x01);
Code(0x00);
Code(0x00);
Code(0x710x100x000x010x000x010x00^0x00);
LED3_Off();
}
void config (void)//配置包
{

Header();
Code(0x51);
Code(0x0a);
Code(0x00);
Code(0x00);
Code(0x00);
Code(0x00);
Code(0x510x0a0x000x000x00^0x00);
LED3_Off();
}
void ConErr (void)//误差控制包
{

Header();
Code(0x03);
Code(0x02);
Code(0x03^0x02);
LED3_Off();
}
void RecPWR (void)//接收功率包
{

Header();
Code(0x04);
Code(0xff);
Code(0x04^0xff);
LED3_Off();
}
int main (void)
{

sysinit();
SysTick_SetCallBack(SysTick_CallBack);
delay_us(500);
LED3_Init();
ping();delay_ms(10);
id();delay_ms(10);
config();delay_ms(50);
while(1)
{

ConErr();//修改包数据可以改变功率
delay_ms(500);
}
}

把IO接到调制MOS管上,发射板就能持续供电了,说明通讯协议是对的,大家可以用其他开发板试一下,就能自己设计无线充电接收线圈了,

下次再用单片机设计一个无线充电发射板控制IC,难点主要是接收信号的处理和解码

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/124863.html原文链接:https://javaforall.net

(7)
上一篇 2022年4月4日 下午3:00
下一篇 2022年4月4日 下午3:35


相关推荐

  • Android实战开发-Kotlin教程(语法篇 1.1)

    Android实战开发-Kotlin教程(语法篇 1.1)上一篇我们介绍了 Kotlin 项目的配置搭建以及 HelloWorld 项目的编译 本章我们来认识一下 Kotlin 的基础语法快速认识 Kotlin 语言常用的基础语法 1 首先我们在 AndroidStudi 中创建一个 Test kt 并定义入库函数便于我们学习以及编译调试新建入库函数 左边入库函数可快捷编译调试

    2026年3月17日
    1
  • 怎么把python中的列表转化为字符串(python成长记录)

    怎么把python中的列表转化为字符串(python成长记录)怎么把python中的列表转化为字符串(python成长记录)1,列表中非字符串的元素的转换方法一:使用列表推导式转换list1=[‘happy’,1,6,’sad’]list1=[str(i)foriinlist1]print(list1)结果为[‘happy’,’1′,’6′,’sad’]方法二:使用map高级函数转换list1=[‘happy’,1,6,…

    2022年5月30日
    40
  • linux fdisk 分区、格式化、挂载!

    linux fdisk 分区、格式化、挂载!文件系统的一个使用流程 存储介质选择 硬盘分区操作 创建分区来容纳文件系统 创建分区 这个分区可以是整个硬盘也可以是部分硬盘 创建文件系统 我们在存储数据之前 你必须使用文件系统对其分区进行格式化 把它挂载到虚拟目录 写入配置文件 etc fstab 硬盘分区的划分标准 硬盘分区由主分区 扩展分区和逻辑分区组成在一块硬盘上 如果是 MBR 分区方式 那么它

    2026年3月26日
    3
  • JavaScript中location.hash详解「建议收藏」

    JavaScript中location.hash详解「建议收藏」原文地址:https://www.cnblogs.com/yeer/archive/2013/01/21/2869827.html去年9月,twitter改版。一个显著变化,就是URL加入了”#!”符号。比如,改版前的用户主页网址为  http://twitter.com/username改版后,就变成了  http://twitter.com/#!

    2022年7月13日
    18
  • html中背景图片等比例缩放,CSS实现响应式全屏背景图+用CSS3实现全屏按比例缩放背景图片…

    html中背景图片等比例缩放,CSS实现响应式全屏背景图+用CSS3实现全屏按比例缩放背景图片…该楼层疑似违规已被系统折叠隐藏此楼查看此楼随着逐浪 CMS 新版的一些效果逐渐放出 有不少的朋友想全屏的背景图片如何设计 在不同的时代有不同的流行网站显示形式 当前很流行的一种网页形式就是满屏大图 本文将用最简单的方式实现该效果 用到了 CSS 属性 background size 无需 javascript 先看 demo 打开后 调整浏览器窗口大小 观察背景图的变化 如果在你的项目中也需要这样的效果

    2026年3月18日
    2
  • hashmap为什么线程不安全面试_hashtable是线程安全的吗

    hashmap为什么线程不安全面试_hashtable是线程安全的吗HashMap为什么线程不安全?文章目录HashMap为什么线程不安全?前言项目环境1.put方法中的++modCount问题2.扩容期间取值不准确3.同时put碰撞导致数据丢失4.可见性问题5.扩容头插法可能导致的循环链表问题6.总结7.参考前言本文从以下几个方面来讨论HashMap为什么是线程不安全的put方法中的modCount++问题扩容期间取值不准确同时put碰撞导致数据丢失可见性问题扩容头插法可能导致的循环链表问题(jdk1.8以前版本)jd

    2022年10月11日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号