×

基于Nordic nRF52832的徽章构建

消耗积分:2 | 格式:zip | 大小:0.16 MB | 2023-07-11

20762

分享资料个

描述

介绍

在这个项目中,我将展示Scan Me! 的构建!徽章,低功耗有线/非接触式徽章,具有蓝牙低功耗 5.0NFC功能。

该徽章基于Nordic nRF52832 ,这是一款低功耗射频 SoC ,具有BLE 5.0连接、NFC标签仿真和强大的Arm Cortex-M4处理器。

 
poYBAGOuNc6AJz3jAAkihDDqjkw145.png
 

徽章的主要特点是:

  • BLE连接
  • NFC 标签模拟
  • ARM Cortex-M4 @ 64Mhz
  • OLED屏幕
  • 3 x RGB LED-s
  • 2 个用户按钮
  • 低功耗 - 使用 CR2032 电池可使用 2 年以上
  • 通过 BLE 进行 OTA 更新

该项目还用于教育目的。制作这样的徽章,我认为这是了解更多有关 BLE、NFC 或低功耗设计等知识的好方法。

电气设计

为了进行电气PCB 设计,我使用了KiCad EDA开源电子设计自动化套件。

(对不起 Eagle 团队,KiCad 更适合业余爱好和开源项目:D)

基本原理图基于53.3 原理图 QFAA QFN48,带有来自Nordic nRF52832 数据表的 DC/DC 稳压器和 NFC 设置参考

组件

  • Nordic nRF52832 SoC (U1)——主SoC,徽章的“大脑”
  • 32 MHz 晶体振荡器(Y1) - 用于生成主 64 MHz 系统时钟
  • 32.768 kHz 晶体振荡器(Y2) - 用于计时(delay()功能等)
  • DC/DC 转换器外部组件 - 2 个电感器(L2、L3)+ 一个电容器(C7)- 这些是必需的,因为为了降低功耗,我们将使用内置的 DC/DC 转换器(而不是 LDO 稳压器)
  • BLE 2.4Ghz 无线电 - 2.4 GHz 天线(Antenna2) + 几个用于阻抗匹配和校准的组件(L1、C3、R1、C15)
  • NFC天线(Antenna1)+天线调谐电容(C9、C10、C16、C17)
  • 电源-CR2032电池、电容(C4 C5、C6、C7、C8、C13、C14)
 
pYYBAGOuNdGAQl1dAAE8oLratqk846.png
主要成分
 

除了主要组件,我还添加了一些外围设备

  • 1 x OLED 屏幕 - 4 针连接器(J2):GND、VCC、SCL、SDA - 我们将使用这样的 I2C OLED 模块
 
pYYBAGOuNdOAf_paAAAoCNikRdM647.png
 
  • 3 x RGB LED (D1、D2、D3)- 4 针,共阳极配置
  • 2 x Push Button (SW1, SW2) - 低电平有效 - 必须激活相应 GPIO 引脚的上拉
 
pYYBAGOuNdWALsITAADg9dmeF9g043.png
外设
 

还添加了一些连接器

 
pYYBAGOuNdeABmsmAAA0jSw5qDQ650.png
连接器
 

确切的组件封装在“即时”的基础上选择的:

  • 对于 2.4GHz 天线,我最终使用了Texas Instruments SWRA117D PCB 天线(我选择它主要是因为它体积小,而且它已经存在于 KiCad 的内置库中)
  • NFC天线只是手绘的PCB走线
  • 对于电阻器、电容器和电感器,我刚刚分配了 SMD 0805,然后查找了组件
  • 我首先从 LCSC 目录中选择 RGB LED、开关、晶体,然后分配适当的封装
  • 我已经拥有的 OLED 屏幕
 
pYYBAGOuNdqADpKOAAEjrLJqLFE480.png
 

有关组件的完整列表,请参阅附件中的 BOM 文件。

“艺术品”

我在笔记本上画的徽章的第一张草图。之后,我用 Inkscape 做了一些绘图:

 
pYYBAGOuNd2AD_9wAAEKaCfjY0Y468.png
 

最后是这样的:

 
poYBAGOuNd-APS8mAAC1touNvZw767.png
 

为了能够在 KiCad 中使用这些绘图,我使用mtl中的svg2mod脚本将 SVG 文件导出到 KiCad PCB 足迹模块文件(.mod)。

要获得可用的结果,首先必须将对象和笔划转换为路径。此外,绘图必须由与 KiCad PCB 层关联的层构成:Cu、SilkS 等(有关更多信息,请参见 svg2mod 的自述文件)

威廉希尔官方网站 板设计

PBC 设计是在KiCad Pcbnew中完成

 
pYYBAGOuNeKAXYjEAAKyf00GVQI047.png
 

第一步是导入作为 KiCad 模块导出的 Inkscape 绘图。

在此之后,我只是放置了组件,从最大的组件(电池座、SoC)开始,然后是靠近需要连接的引脚的最小组件。

最终布局如下所示:

 
poYBAGOuNeWAECKcAAFq0eA9EZQ064.png
轮廓+铜层:顶部(蓝色),底部(紫色)
 

NFC 天线只是用长手绘 PCB 构建的“线圈”

 
pYYBAGOuNeeAS3MFAAB673owtow614.png
 

2.4 GHz 天线(BLE) 部分使用Texas Instruments SWRA117D PCB 天线。布局,我认为,它可以做得更好(并没有真正遵循数据表的参考设计),但它有效(信号强度可能更好)

 
poYBAGOuNemAe1hcAABcGxBnH0Q467.png
 

以下是 KiCad 的 3D 查看器的一些渲染图:

 
poYBAGOuNeyADuzjAAEUhEJv48w017.png
KiCAD 渲染 - 正面/顶部
 

 

 
poYBAGOuNe6AJAHMAAFC8ZpepVY567.png
KiCAD 渲染 - 背面/底部
 

PCB 制造、组件和组装

我考虑了多种选择OSH ParkJLCPCBPCBWay来制造 PCB。最后,我选择了 JLCPCB,因为它还以优惠的价格提供组件 (LCSC) 和快速运输 (DHL)。

获得 PCB 和组件大约需要 10 天(3 天制造 + 7 天运输) 。

我订购了 2 种颜色的 PCB-s:蓝色和绿色他们结果很好,我认为:

 
poYBAGOuNfaACOB5ABJRHxVxKEs355.png
 

 

 
pYYBAGOuNfyAHEBjAAnm3oDkiy0658.png
JLCPCB 蓝色PCB版
 

 

 
poYBAGOuNgGAKcGrAA1H6hOdac0288.jpg
JLCPCB绿色PCB版
 

我还从LCSC订购了大部分组件(OLED 屏幕和一些 SMD 电阻器和电容器除外)PCB (15 美元)和组件(15.84美元)的总成本为30.84 美元,包括 DHL 运费。

 
poYBAGOuNgaAOiS6AAkPyb9T0Y8049.png
来自 LCSC 的组件
 

组件的焊接不是很容易,但我认为这是可行的。它是用标准焊料和热风枪完成的。焊接后,我用显微镜(一个便宜的 USB 显微镜)检查了接头

其余部分(主要是 0805 SMD)很容易焊接。

OLED屏幕也是SMD焊接的。首先,我从模块中移除了排针。然后,我用焊料填充孔并使用烙铁将模块焊接到徽章的焊盘上。

这是组装的徽章的样子:

 
pYYBAGOuNguAFfihAAjQ5cJlr9c308.png
正面
 

 

 
poYBAGOuNhCASOuZAAjHqCoRZD0455.png
背部
 

 

BLE 和 NFC 天线调谐

(又名“我不知道我在做什么!”部分)

根据 nRF52832 的数据表,NFC 和 BLE 天线需要调谐。

NFC 天线需要调谐到 13.56 MHz 为此使用了几个电容器(在我的设计中为 C9、C10、C16、C17) 。

 
poYBAGOuNhKAdOyWAAAu-5fR_nk664.png
 

有两种方法可以确定调谐电容(Ctune)的值:

  • 测量(或估计)天线电感并使用数据表中的公式计算电容器值
  • 尝试不同的电容值,使用网络分析仪测量系统的谐振频率

由于没有网络分析仪,我很难测量天线的电感。在尝试使用基于 Arduino 的电感表测量电感后(大多数万用表无法测量电感),我放弃了这个想法。天线的电感预计会非常小(在 1-3uH 范围内),测量起来并不容易。

因此,最终使用一些在线工具根据几个参数(高度、宽度、圈数、轨道宽度、间距)来估算 PCB 天线的电感我也尝试了两个,它们给出了以下值:

将这两个值应用于数据表公式后,我得出 133pF (2.0uH) -> 141pF (1.9uH)电容范围应该用于将天线调谐到 13.56 MHz。AI 有 2 个电容器垫(每个引脚),我最终使用了 100pF + 33pF 电容。

BLE 2.4GHz 天线的阻抗应匹配到 50 欧姆。基本设计中的 L1 和 C3 应该这样做,但我认为,我犯了一个错误,没有遵循数据表中的 PCB 布局建议:

 
pYYBAGOuNhSAUJqoAACm_zHfFbc980.png
几乎忽略了这一点:/
 

在原理图中,我还添加了一个电容器(C15)用于微调,但最终没有填充。

天线可以用,但我认为信号强度可能会更好。

似乎确实需要真正的矢量网络分析仪才能正确执行此操作。(这个话题听起来很有趣,所以我最终可能会得到一个:))

软件

安装一些板包和库后,可以在Arduino IDE中对该板进行编程。

要添加对 nRF5x 板的支持,我们可以在Boards Manager中安装来自sandeepmistryarduino-nRF5然后我们可以使用通用 nRF52板对徽章进行编程:

 
pYYBAGOuNheAAydSAACKS_gX-qo211.png
 

arduino-nRF5 包不支持NFC功能。幸运的是,arduino-org的arduino-core-nrf52有它,所以我将它移植到我的 arduino-nRF5 分支中。代码上传到bluetiger9/arduino-nRF5,分支NFC。(更改有点混乱 :D,所以我还没有提交拉取请求)

NFC 库提供了以下方法:

  • 设置要发布的文本
  • 设置要发布的 URL
  • 设置要启动的Android APP

BLE功能由arduino -BLEPeripheral库提供,也来自sandeepmistry 该库添加了对实现不同类型 BLE 服务/设备的支持。我们将主要使用“串行”示例中的BLESerial服务。

为了探索 nRF52832 的节能特性,我使用了。来自mristau的Arduino_nRF5x_lowPower该库可用于:

  • 从 LDO 稳压器切换到 DC / DC 转换器(需要外部组件)- 这减少了大约 40-50% 的功耗
  • mode 低功耗模式和关机模式 - 这将功耗降低到大约几微安 - SoC 可以配置为在不同事件上唤醒:GPIO、NFC 字段(仅实现 GPIO)

威廉希尔官方网站 板的实测电流消耗如下:(+200mAhCR2032 电池的理论运行时间)

  • LDO 稳压器 - 5.35 毫安(1.5 天)
  • DC/DC 转换器 - 2.82 mA (3 天)
  • 关机模式 + 在 GPIO 上唤醒 - 9.7 uA (2 年以上)

我还构建了一个简单的演示应用程序来演示徽章的功能。该应用程序具有以下功能:

  • 具有自定义测试、URL 的 NFC 标签仿真
  • OLED屏幕演示
  • 简单的 BLE 接口来设置 NFC 标签发布的文本或 URL
  • 闲置 10 秒后,徽章进入省电模式

 

我使用 Android 手机(NFC 工具应用程序)和 Arduino RFID 阅读器测试了 NFC 功能。

 
pYYBAGOuNhmAa5EMAAC7cB99cgc304.png
徽章读取为 NFC 标签 - NFC Tools Android 应用程序
 

对于 BLE 功能,我使用了Nordic 的nRF UART应用程序:

 
poYBAGOuNhuATNNaAADPisN2_bw327.png
BLE 命令接口 - nRF UART Android 应用程序
 

这个应用程序可以很容易地扩展附加功能。

源代码可以在附加的存储库中找到。

对威廉希尔官方网站 板进行编程

可以使用串行线调试 (SWD)协议对 nRF52832 SoC 进行编程。需要 SWD 程序员,例如全球速卖通的 3 美元 ST-Link V2 克隆,才能执行此操作。

该板具有 nRF52832 的 SWDIO、SWDCLK、SWO、RST、VCC 和 GND 引脚,路由到徽章一侧的 6 个焊盘:

 
poYBAGOuNiCAUJLUAAYGZjborRM624.png
编程焊盘 - GND、SWO、SWDCLK、SWDIO、RST、VCC
 

要对威廉希尔官方网站 板进行编程,我们需要将 GND、SWDCLK、SWDIO 和 VCC 连接到 SWD 编程器的相应引脚。

 
poYBAGOuNiKALZ0cAACl9NYAscE274.png
编程引脚 - 只有在取出电池时才需要连接 3.3V
 

有两种方法可以做到这一点:

  • 直接在焊盘上焊接一些电线——我在第一次测试时这样做了
  • 破解一个编程适配器——我使用了一块备用徽章 PCB、一些弹簧式接触针、M3 螺丝和一些热胶:
 
poYBAGOuNieAaLnfAAp52tPKE9c514.jpg
编程设置
 

 

 
poYBAGOuNiuAZo_GAAsyclqOhrY346.jpg
弹簧式接触针
 

更进一步,更好的版本也可以从这种风格的程序员构建。

OTA更新

能够对徽章进行无线编程将很有用。

经过一些研究,我发现了两种可能的方式来实现 OTA 更新:

我认为,第一个变体应该是要走的路。它使用 Arduino IDE 的某种标准 OTA 功能,并且通过 BLE 实现 IPv6 也可用于其他项目。

玩得开心!

注意:我有几个未使用的徽章PCB 如果你想要一个给我留言。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'基于Nordic nRF52832的徽章构建',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);