×

用于TI RSLK MAX机器人平台的IR RX/TX BoosterPack

消耗积分:0 | 格式:zip | 大小:0.01 MB | 2022-12-13

张勇

分享资料个

描述

介绍

该项目作为德州仪器 2020 年夏季项目的一部分完成该项目基于TI-RSLK MAX机器人平台,其中包括作为 MCU 的MSP432P401R MCU LaunchPad™ 开发套件,并与BoosterPack生态系统兼容。BoosterPack 是扩展板,可连接到 LaunchPad 顶部的两个 20 针接头,为 MCU 提供传感、通信和其他附加功能。该项目的目标是为 TI-RSLK MAX 设计一个 BoosterPack 模块并对其进行原型设计,以获得威廉希尔官方网站 设计、PCB 设计和嵌入式固件开发方面的经验,并创建一个 BoosterPack 模块,可用于教授初级工程专业学生的关键知识概念。

创意和设计目标

我的想法是创建一个 BoosterPack,允许多个机器人或 MCU 之间进行 IR 通信。BoosterPack 将包含 4 个红外接收器和 4 个红外发射器,以允许在各个方向发送和接收信号。

我选择设计一个 IR 发射器和接收器模块,因为我觉得 IR 通信可以用来教授工程学生多个重要概念,包括 PWM、信号调制和实时系统编程。此外,我认为用于机器人之间 IR 通信的 BoosterPack 将是对现有 BoosterPack 选择的独特补充。

什么是红外通信?

IR 代表“红外”,表示使用红外光脉冲来实现设备之间在短视距内的数字通信。本项目使用的 TSAL6200 发射器发出的红外光波长为 940nm,因此人眼不可见。人类经常使用光来相互通信(如汽车上的转向灯)或与机器(如交通信号灯)进行通信,人们可以设想一种通信方案,其中红外光用于向 TI-RSLK MAX 发送消息。

由于我们正在处理脉冲,因此人们可能会想到另一种自 1800 年代以来一直存在的数字通信方法,即摩尔斯电码摩尔斯电码用不同长度的声音或光来表示不同的字母,称为“点”和“破折号”。但是,在我们的系统中,我们只需要发送两个字符:1 或 0。使用这两个字符和计算的二进制语言,理论上可以发送任何消息。对于我们的通信方案,我们将 0 称为“点”或短脉冲,将 1 称为“破折号”或长脉冲。

与摩尔斯电码不同,我们的信息不需要由人类解码,因此红外光对人眼不可见这一事实不是问题。这也意味着我们可以比发送摩尔斯电码消息更快地发送消息,因为 TI-RSLK MAX(TI 的 MSP432)上的微处理器可以以 48MHz 运行,使其处理信息的速度比人类快得多. 我们将以微秒为单位工作,长脉冲为 2000 微秒长,短脉冲为 500 微秒长。

然而,我们设想的通信方案存在一个问题,即超过 50%到达地球表面的阳光是红外光!就好像我们试图在摇滚音乐会的前排进行对话,或者更具体地说,就好像我们试图在光天化日之下使用手电筒发送摩尔斯电码。就像由于明亮的阳光,其他人几乎无法区分手电筒何时打开或关闭一样,TI-RSLK MAX 也几乎不可能解码通过 IR 光发送的信息。环境中有这么多额外的红外光。

为了解决这个问题,我们需要在我们的系统中再添加一个复杂功能。我们将利用调制将我们的信号与环境中存在的红外光的背景噪声区分开来。这意味着,我们不会在我们想要传输某些东西的时候打开我们的 IR 发射器,而是会以 38kHz 的频率非常快速地打开和关闭它。该频率称为“载波频率”,我们的 IR 接收器只会检测此频率的信号,只要接收到此频率的信号,就会将其输出引脚拉低。

 

正在接收红外信号(来源:sbprojects.net/knowledge/ir/)
 

 

解决了最后一个问题后,我们开发了简单的 IR 通信方案。当我们想要发送 1 时,我们将以 38kHz 的频率使 IR 发射器脉冲 2000 微秒,而当我们想要发送 0 时,我们将以 38kHz 的频率使 IR 发射器脉冲 500 微秒。在接收端,1 看起来像接收器输出引脚上的 2000 微秒长的低脉冲,0 看起来像 500 微秒长的低脉冲。我们刚刚描述了一组设备之间通信的规则,也称为协议

值得注意的是,有许多设备使用 IR 进行通信,包括大多数电视和其他带有遥控器的设备。虽然这些设备通常使用更复杂的协议(本网站详细描述了一些常见协议),但了解上述简单协议为人们提供了一个框架,以便在需要时了解更多关于其他协议的信息。有了这些知识,这个项目可以扩展到发送必要的 IR 代码来控制电视或其他设备。

威廉希尔官方网站 设计

威廉希尔官方网站 设计的目标是创建一个低成本、易于组装且功能强大的威廉希尔官方网站 来发送和接收 IR 信号。选择组件时考虑了这些目标,主要是为了使用完全通孔的组件,使威廉希尔官方网站 无需专门工具即可轻松组装。

该威廉希尔官方网站 由 Launchpad 的 3.3 V 电源供电,并包括一个用于每个 IR 发射器的限流电阻器。IR 发射器通过逻辑电平 MOSFET 驱动,因为每个发射器可以拉出高达 100 mA 的电流,这将超过 Launchpad 上 GPIO 引脚的 20 mA 限制。MOSFET的栅极上有一个限流电阻,还有一个电阻保证MOSFET在关断状态时栅极电容放电。IR 接收器直接连接到 Launchpad 上的模拟引脚。

PCB设计

PCB 的设计考虑了三个主要目标:IR 信号的无阻碍传输和接收、易于组装以及遵守 BoosterPack 格式。为了让信号的传输和接收畅通无阻,接收器模块被放置在发射器后面的威廉希尔官方网站 板中间。这最大限度地减少了威廉希尔官方网站 板接收自身发射的信号的程度,并允许发射器畅通无阻地传输信号。注意提供足够的间隙以便于焊接,并使用PCB 模板来确保正确的尺寸以满足 BoosterPack 标准。

pYYBAGOX09GANzrtAAILk730fGk493.png
PCB设计(上)
 
pYYBAGOX0_mALOoUAAdIhqa89Gc809.jpg
组装威廉希尔官方网站 板
 

固件

该固件被设计为设备的概念验证,由于这是我第一次使用 MSP432 编程,因此可以通过更多时间进行改进。但是,固件提供了硬件演示,并为利用 IR-RX/TX BoosterPack 开发更复杂的程序奠定了基础。提供的两个程序演示了两个 MSP432 之间的简单通信协议,实现了上一节中描述的协议。一个程序发送所需的 IR 代码,而另一个程序接收并解码它。这些程序可以很容易地组合成一个可以双向通信的系统。接收代码利用中断,允许 MSP432 在没有接收到 IR 代码时运行其他任务。

结论

通过这个项目,我学到了很多关于工程设计过程的知识,如果我再次做这个项目,我会应用这些知识并对我设计和执行项目的方式进行一些改变。最重要的是,在决定引脚分配之前,我会确保充分阅读并理解所涉及组件的所有数据表。在威廉希尔官方网站 设计阶段,我决定将 IR 接收器的输出引脚分配给 MSP432 上的模拟引脚。然而,在更好地了解 IR 接收器的数据表后,我发现这是不必要的,因为它们输出的是数字脉冲,而不是模拟信号。在固件开发阶段,我了解到测量这种脉冲持续时间的理想方法是使用微控制器上 TimerA 外设的捕获功能。如果我在威廉希尔官方网站 设计阶段更熟悉 MSP432,我会决定将 IR 接收器的输出连接到能够利用 TimerA 外设的捕获功能的引脚。这将大大简化编程。

除了那些设计更改之外,如果有更多的时间,我会对该项目进行更多改进。首先,我会进行定量测试以确定硬件是否按预期运行。我会测量有效的传输和接收距离,并确定设备的功耗。其次,我会花更多时间为项目构建更强大的固件基础,可能会开发一个库以便于编程。最后,我将探索该项目的其他可能性,包括使用硬件与电视等消费设备进行通信。

总之,这是一个成功的项目,我从中学到了很多。

我要特别感谢德州仪器在整个项目中提供的资源和支持。

请务必查看TI-RSLK MAX

pYYBAGOX1CiAWYYSAAn4krpyq_k317.jpg
已连接 IR-RX/TX BoosterPack 的 TI-RSLK MAX
 

 


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

评论(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:'用于TI RSLK MAX机器人平台的IR RX/TX BoosterPack',//标题 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);