嵌入式软件和硬件在互相扯皮,项目进行不下去了!
最近遇到了一件糟心的事情,交付给客户现场运行了不到一个月的硬件定制产品,开始出现无规律的停机现象,已经影响到客户的生产线运作,客户已经开始炸毛了。在跟客户进行了一通“友好”的电话沟通之后,我和嵌入式软件工程师李工,马上订机票飞往客户现场,一方面是为了安抚好客户情绪(现场挨批),另一方面是为了了解现场机器的运行情况。根据停机现象,我们怀疑是设备在运行一段时间后,程序出现了偶发性卡死,然后外部看门狗会对机器进行强制复位,复位后的设备虽然能重启进入界面,但机械结构会从运行态切换为停止态。(有些工业设备不允许上电就直接运行,需要重新人工开机)为了找出程序跑飞时的栈调用情况,李工启用了 cm_backtrace 组件,然后结合 addr2line 对程序跑飞时的栈调用情况进行了分析。因为停机无规律出现(后来发现,电机启动一瞬间出现的概率高一点),很不容易地抓取到两三次停机之后,我们发现程序有时候出现 HardFault,有时候出现 BusFault,并且跑飞的位置不固定。根据李工的经验,他怀疑是硬件设计的问题,于是打电话给第三方的硬件工程师陈工。。。我:“李工,你跟陈工描述一下调试情况。”软件李工:“ 陈工,我们现场排查了,程序跑飞的位置不固定,这种情况可能是某个硬件的可靠性或者是信号干扰影响导致的~”。硬件陈工反驳道:“这完全不可能,硬件出厂时都是经过测试的,测试时都没出过岔子,是不是你软件内存溢出或者逻辑处理得不好?”软件李工开始不耐烦:“我已经把内存可能溢出的地方处理了,不是软件的原因啊,~”硬件陈工急了:“这个硬件原理,我们以前也用过啊,也没出现过这种情况,你再找找软件原因。”。。。。。。(两人你一言我一语地争论起来,互不相让,反正都不承认各自的原因。)我:“这样,吵下去也无济于事,我先安抚好客户,回公司后我们马上复刻现场进行重新测试验证!”(从客户现场回到公司后。。。)现场出现问题的是一款工业三相电机控制器设备,采用 AC-220V 供电,里面有 AC 转 DC 电源模块,带有显示屏和联网功能,支持继电器输出和隔离光耦输入,支持 RS485 和 CAN 通信功能,设计框图如下。由于考虑到工业信号的实时性和多任务并发处理,李工设计嵌入式软件时,采用了 FreeRTOS 操作系统进行任务调度,而且还在外部SDRAM开启 Framebuffer 缓冲区,用来给GUI进行刷屏。为了减少内存溢出的风险,李工对各个数据缓冲区数组进行了优化,采用静态方式进行管理,并且每次写缓冲区时都进行数组范围判断,防止内存申请失败或者写缓冲区时出现数组越界操作。我们从仓库里面领取了新的硬件设备做测试,一开始怎么也没办法复现出现场的停机现象,验证过程一度陷入了停滞。。。但是,在设备连续不断电运行了差不多240个小时之后,事情似乎出现了转机,设备开始出现偶尔的看门狗复位重启,并且随着设备运行时间越长,出现得越来越频繁。(电机启动或者电磁阀吸合瞬间,特别容易出现)查找方向开始转到硬件设计上。。。这款产品为了方便取电,陈工在硬件内部集成了开关电源,用隔离变压器和整流桥进行 AC 转 DC 处理,PCB 整体布局和布线,据说已经充分考虑 EMC 和 EMI 。我们重新检测这台运行了“很久”的设备的各个电源回路,发现当设备运行了一段时间之后,3.3V 的电源回路上就会出现一些噪声,纹波忽高忽低,特别是在电机启动或者电磁阀吸合瞬间,电源噪声可能达到 2~3V 以上。(不是每次噪声都会导致MCU复位,说明这款MCU还是挺“扛噪”的。)这对于 3.3V 供电的芯片来说可能是致命的,电源噪声很容易造成MCU和内存芯片的数据错乱,造成程序莫名其妙地跑飞~有见及此,陈工马上开始对硬件进行整改,优化硬件的各路电源环路设计,将输入回路、辅助绕组回路和输出回路的环路面积做到最小,以增强抗干扰能力和减少对外的干扰。为了更好的信号完整性和降低电磁干扰(EMI)和减少层间耦合噪声,陈工决定改用 6 层板对 PCB 进行重新 Layout,我们在嘉立创领取了打样券,现在样品也能用沉金工艺了,而且免费增加至2u"厚度,盘中孔工艺也可以免费使用,并且不限制BGA封装。以前打个 6 层板的样品,打样费也是一笔不小的研发成本开销,现在嘉立创对于 6 层以上 PCB 的打样政策,工程费可以大降50%,对不少中小企业是非常大的利好。在关键的电源和存储器芯片上面,也替换为进口方案(贵就贵点,但胜在够稳),这几天布线完之后,应该会发出去打样,等样品回来之后我们再仔细进行验证。(事情虽然还没有结束,但总算看到了一点希望~)在开发过程中,客户一直抠成本,产品做出来之后,客户又急着在生产线上面使用,只是经过了基本的功能逻辑测试就交付了(没经过疲劳和可靠性测试),没想到,最后在客户现场还是出现了问题~整个过程,有几点是需要值得我去反思的:1、产品在客户现场出现了问题,电话和信息无法解决的时候,该到现场(挨批)还是要到,一方面为了降低客户损失,另一方面也为了安抚和挽留客户。2、处理好成员冲突,尽可能地不要让团队成员在客户现场发生矛盾,以解决问题为主要目的,团队成员才是解决现场问题的关键要素。3、不能为了降低成本而忽略了产品的稳定性,哪怕客户一直要求降低成本,也要管理好客户的预期,明确告知客户降本的风险。4、做硬件产品研发还是得坚守原则,该遵循的流程还是要遵循,该做的测试还是要做(哪怕后补,也要有测试数据),EMC和EMI,可靠性测试,疲劳测试,耐久度测试,等等。5、事情的进展,有时候看上去似乎停滞不前,但也不要马上停下来,(就好比,让设备空转运行也得让它转),没准过一段时间就会迎来转机~最后,希望这次改版能行,生活又给我上了一课!~
工程师进阶笔记
3 8 嘉立创PCB
搞硬件的,都跟谁有仇?~
总体 vs. 硬件PCB:“尼玛,你又要改方案?兄弟我才把器件布局好。”总体:“原来的方案真的要变,考虑到散热,需要改封装。你现在的布局需要修改啊!”PCB:“这板子根本布局放不下去!”总体:“我自己放过了,可以的。”PCB:“你考虑过走线吗?这么布线需要多层板,要埋盲孔。”总体:“不能使用多层板,要考虑到成本。现在做板子的钱还不能够报销。”PCB:“You Can You Up, No Can No BB.”总体:“你不服,咋地?”机械结构 vs. 硬件结构:"如果车模上的结构可以随意变大,我难道不会给你搞个足够大的吗?"PCB:"如果电路元器件都像搭积木一样随便积极,我不会给你搞个足够小的吗?"结构:"听说你们PCB设计,跟那乳沟一样,挤挤就有了。你克服一下。"PCB:“你.....我.......”软件 vs. 硬件软件:“你这电路板有问题,调不通!”硬件:“毛?你最好重查你的代码,绝逼有错!”软件:“屁!就那么点代码还能出错?”硬件:“扯!这条线路总共就几条线,我都查过了好几遍,有错我能不知道?”软件:“别和老子扯犊子。就是你电路有问题。”硬件内心:“滚!我送你离开,千里之外。”总体 vs. 硬件总体:“你选的这个电源方案怎么样?”硬件:“性能没问题,面包板上测试过了。”总体:“好!把它布局在30×15mm的电路板内!”硬件:“布不下,需要考虑到器件散热和干扰问题。”总体:“别瞎BB。如果布不下,就把你布进去!快点。”硬件:“It is up to you!” 热设计 vs. 硬件硬件:“我们刚刚出了一个新方案,你帮助再热仿真一下吧。”热设计:“过不了!”硬件:“你仿过了吗?”热设计:“我用脑袋仿过了。你过不了,需要降规格!”硬件:“你是不是非要哥哥我用热风枪给你脑袋加热你才能仿那?”热设计:“你这个散热过不了。”硬件:“你就加一个散热器呀。”热设计:“你这个尺寸,散热器标准库中没有合适的呀。”硬件:“加个铜皮不就可以吗?”热设计:“铜皮?库里面更没有了,我怎仿那?”采购 vs. 硬件PCB:“终于盼到器件买回来了。我把器件的封装建好,刚刚布完了线。”采购:“商家说原来封装的器件没了,我就买回来另一个封装同型号的。”PCB:“大哥,换封装,你就不能早告诉我一声?”... vs. X vs. Y vs. Z vs. ...领队:“你这个EMC措施太复杂!这么多防护和步骤,现场比赛很容易出问题。”EMC:“没办法。不搞这么多,干扰无法解决。这主要是PCB结构设计有问题,器件拥挤,方位错乱。”PCB:“如果我能够有足够空间布板的话,我才不会费劲将这些器件拥挤在一起呢。这主要是机械结构给我留的空间太小了!”结构:“车模就那么大,还需要放那么多的传感器。哪有空间留给你布电路板那?这主要是设计传感器的问题,非要安装这么多传感器及其支架,少一点不行吗?”传感器:“就这些传感器,搞控制算法的还嫌不够呢!本来还可以通过选择小的传感器减低体积,但搞算法的嫌弃小的传感器精度不够啊!”算法:“没有这么多高精度传感器,车模就是瞎子。我们编算法的再灵巧,也难为无米之炊呀。这主要是队长要求车模要跑得快。如果车模慢慢的跑,只要几个低精度的传感器也就可以了。”领队:“说来说去,最终是埋怨要求车模跑得快。我跟你们有仇啊?如果车模跑得慢,我可没脸去参加比赛。”#嘉立创PCB##PCB有什么好玩的#
工程师进阶笔记
3 6 嘉立创PCB
树莓派第二代微控制器 RP2350,终于拿到手了!~
最近,我收到了由小熊派寄送过来的一块国内非常罕有的核心板,基于树莓派第二代微控制器芯片而研发的 BearPi-Pico RP2350 。树莓派早在2021年的时候就发布了它的第一代微控制器 RP2040,基于这款微控制器而研发的 Raspberry Pi Pico 核心板,凭借着超低的成本和极高的可玩性,在三年多的时间里,卖出了几百万片。就在今年的 8 月初,树莓派继续发布了它的第二代微控制器芯片 RP2350,并同步发布了基于 RP2350 芯片的核心板,Raspberry Pi Pico 2。相比起第一代的 RP2040 微控制器芯片,RP2350 进行了大量的升级,CPU 内核支持双核 ARM Cortex-M33 和 RISC-V 架构,片上SRAM翻倍,Pico 2 提供板载 QSPI-FLASH,如下图所示。关于树莓派 RP2350 这款芯片的详细性能介绍,可以在公众号搜索相关文章,在这里不再重复论述。根据傻孩子大佬(公众号:裸机思维)的测试,RISC-V核心 Harzard3 在较大代码尺寸的情况下跑出了 Coremark 3.9 的成绩,而 Cortex-M33 跑出同样成绩的代码尺寸更小。(估计是 RISC-V 核心 Harzard3 刚出生不久的原因?)与树莓派官方的 Raspberry Pi Pico 2 不同的是,小熊派的 BearPi-Pico RP2350 使用的是 Type-C 接口,有国内不少工程师吐槽,为啥 RP2350 芯片只支持 USB1.1 协议!~最近有点忙,我还没来得及在小熊派的 BearPi-Pico RP2350 上面点灯和做一些扩展板模块(直接在某宝买 Pico 的扩展模块也行),先来欣赏一下国外DIY爱好者做的 RP2350 板子吧。目前在国内比较难买到 RP2350 的芯片,在立创开源硬件平台,已经有大佬做了一块 RP2350 的核心板,(从其他开发板拆出来的RP2350),链接如下:https://oshwhub.com/hlcm/raspberry-pico-2感兴趣的工程师朋友,可以去进行复刻打样~以上部分图片素材来源:网络,侵删。#嘉立创PCB##PCB有什么好玩的##DIY设计#
工程师进阶笔记
3 10 嘉立创PCB
试了一下 GPT-4o,让它帮我分析电路原理图。
Sora才问世半年不到,在北京时间5月14日凌晨,OpenAI又发布了重量级王炸,GPT-4o。GPT-4o是个女娃,一问世就能理解人类情感,会察言观色,知道你的情绪,会讲故事。GPT-4o这种情感进化能力,瞬间就让国内的 AI 自媒体集体高潮。关于GPT-4o的进化细节,公众号和网络上已经不少文章,这里就不再重复描述。这就意味着,在不久的将来,AI 机器人也能为人类提供重要的情绪价值,。。。emm,无限遐想。OpenaAI也为免费的 GPT 用户提供了 GPT-4o的试用资格,打开ChatGPT官网就可以获得。可以在 ChatGPT 的聊天对话窗口切换模型,也可以直接询问 ChatGPT 当前使用的模型是什么,初步体验了一下,答案的生成速度以及内容质量,都比 GPT3.5 有不少的提升。我上传了一张国产开发板图片给 GPT-4o,它马上就可以把开发板的基本信息分析出来,还可以针对该板子的分析信息继续提问。然后,我又扔给它一张原理图,基本的信息它也可以帮我分析出来。不过可惜的是,目前 GPT-4o 对于免费用户来说,只是试用阶段,每天只能试用体验一小会,但隔天会重置,也就是等第二天又能重新试用。在国内做得不错的生成式大模型,目前就要数是月之暗面的 Kimi.ai 了,对于 GPT-4o 的全民免费,你期待吗?#嘉立创PCB##PCB有什么好玩的##DIY设计#
工程师进阶笔记
5 10 嘉立创PCB
硬件都做出来了,客户说想改一下,结果,全部推倒重做!
事情是这样的,我们团队在三个月之前接到了一项硬件产品定制任务,客户想我们帮他定制一款工业网关,简单地罗列一下,产品大概有以下这些功能:客户提出的都是常规工业网关所具备的基本功能,这对于专业做工业网关产品的团队来说难度中等,并且以上软硬件功能都已经过客户确认,开发起来问题应该不大。因为项目时间紧迫,为了降低设计上的风险,我们硬件上是采用了【核心板+底板】的方式进行设计的,类似于下图的设计方式,(涉及保密,我们的产品不方便上图)图源:立创开源硬件平台这种设计方式的好处是,团队不用花时间在CPU核心板的设计上,只需要在底板上集成客户需要的硬件接口。经过一个多月的加班加点,团队终于赶在国庆假期前,把首版原型样机的PCBA给到了客户,如无意外(一般都会出现些意外),客户假期后就可以开展模具设计工作了。假期回来后的第一天,老板就召集项目团队开会,说客户拿到产品的PCBA样品后,有些新的想法想跟项目团队一起探讨一下。(我当时就预感到,肯定不是什么好的想老板说,客户觉得我们设计的电路板有点大,想把电路板进一步缩小,面积大概是现在的一半,原因是他国庆假期看见友商有一些更小的网关。这样不仅可以省下电路板和模具的成本,而且做出来的产品也可以方便地内置在第三方工业设备里面,小巧不占地儿。。。。。。。(空气突然安静)会议室里面没有一个人首先吱声,气氛安静得有点尴尬,(估计大家都已经开始在心里对客户各种问候),老板看见大家都这么安静,刚想趁热打铁开口叫我们散会回去开干。作为 PM 的我,此刻马上抢先说了一句:“杨总,我们团队先评估一下这次改动,今天下班前给您具体评估结果。”我们目前的硬件设计,在成本允许的前提下已经把PCBA的面积做得足够紧凑了,如果要再进一步缩小面积,就需要把CPU内存和其他芯片接口直接布局在同一块电路板上面了。(老板和客户估计并不知道这次改动的研发成本有多高)我在网上一股劲地搜索了一轮,终于找到了一款比较紧凑的板卡设计方案,它直接把CPU内存还有硬盘,以及某些功能接口都布局在一块电路板上面,并且还能做到45mm * 70mm 的板子面积。(还有一点就是,它开源)图源:立创开源硬件平台它还很巧妙地引出了经典 40Pin 排针和高速 39Pin 接口,这种“三明治”式的板卡设计,能有效地利用外壳的纵向空间,从而不影响原来水平空间上的接口功能。打开这款板子的原理图和PCB一看,原来它采用的是8层PCB设计,并且还使用了盘中孔工艺,即焊盘中打孔(难怪可以做得这么小巧紧凑)。我们都知道,随着PCB板厂制作水平的不断提升,盘中孔变得越来越常见和实用,但与此同时,因为盘中孔对工艺有较高要求,某些厂家的盘中孔制作成本也一直居高不下。我知道嘉立创之前一直有在推广盘中孔这种工艺,所以就去他们的官网找了一下信息,好家伙,对于6层以上的高密度PCB,现在嘉立创可以免费使用盘中孔,并且还可以免费加厚至2u''沉金。给客户定制的工业网关产品,客户要求做到紧凑小巧,那我们完全可以参考上面的CPU一体化+层叠接口扩展的设计方式。(有救了,心头大石终于落地)。按照我们原来的芯片选型,这款工业网关产品应该6~8层板就可以Hold得住,具体还要看硬件工程师评估,如果是6层板的话,还可以免费在嘉立创进行打样。最后,团队花了大概半天的时间,把原来的【核心板+底板】设计方案,整理成了CPU内存硬盘一体化设计,某些功能接口通过层叠的方式进行扩展,并且把改造方案所增加的成本也一并发给了老板,让他去跟客户进行沟通和决策。像这种出了PCBA原型样品再去做硬件方案大改的情况,项目研发成本的增加是在所难免的,但作为项目执行团队,一方面不能当场否定老板和客户的想法,另一方面要尽自己所能,在短时间内给出成本最优的解决方案。hai,不说了,今天又是心累的一天,明天还要去“安抚”硬件工程师,推进他们去做改版方案后的电路原理图和PCB设计~。祝我好运,客户下次就别这样改了~#嘉立创PCB##PCB有什么好玩的#
工程师进阶笔记
2 19 嘉立创PCB
不想让嵌入式核心板吃灰,于是,我准备对它下手了!
作为一名业余的嵌入式工程师,平时上班主要的工作是用单片机去检测不同的按键动作,以及实现不同的流水灯效果(高级点灯),偶尔也会去画一些电路板,验证一些想法或者技术方案。以前做过的小模块在摸鱼的时候,我还喜欢捣鼓一些嵌入式Linux开发板,毕竟技术能力不能一直停留在按键和点灯,高低也得整一下高端的技术,之前测评玩过不少Linux开发板,在搭建开发环境方面也颇有一番心得。高端的技术往往需要高端的硬件才能完美支持,细心地观察一下,我发现测评的那些开发板都是通过【核心板+底板】的方式进行设计的,我其实有点好奇,为啥要做这种分离式设计,而不是直接把CPU贴在电路板上面?比如,像这款飞凌嵌入式 FET3588-C 核心板,单独把【CPU、内存、eMMC】做成核心板,采用10 层沉金工艺,尺寸68mm*50mm,厚度1.6mm。要在如此小面积的电路板的正面和背面都贴满芯片和阻容等元器件,把CPU大部分的引脚都引出来给工程师们使用,还能做到这么薄,他们究竟是如何做到的?(这款核心板的性能十分炸裂,8核Cortex-A架构,配备 6TOPS NPU,非常适合用在一些嵌入式 AI 应用,特别是机器视觉,AI多媒体处理等产品领域)我还顺便在网上搜索了一下,拆开很多类似的桌面小电脑,可以看到它们一般是把CPU直接布局在电路板上面,整个板子至少用了8层以上的PCB,然后配上一个工业CNC外壳,颜值真的很高。把这块飞凌核心板放在一边吃灰,确实有点浪费,于是,在突如其来的冲动之下,我有点不自量力地想给它配一个底板(半成品,还没拉线)。。。这款底板主要是提供核心板的电源供电电路,调试串口,USB接口,SD卡接口,RTC时钟电路,以及配备几个用户按键和散热风扇接口。因为后期要兼顾一定的美观效果,会配套一个较小体积的外壳,所以底板的面积尺寸要控制在 10cm * 10cm以下,并且不能做太厚。(还有一个原因,就是超过 10cm * 10cm 面积的打样就不免费了,要好几百块钱,不过好像嘉立创现在第二次打样费用直接砍半,穷,花不起这打样费~)底板布局好之后,我发现设计得不太完美,底板左边的空位应该还可以放下网络和HDMI接口,还可以增加一个蓝牙模块(接键盘鼠标),有了网络和HDMI,就变成一台小型桌面电脑了~突然间多了HDMI和有线网络接口,元器件也增加了不少,我觉得 4 层板已经不够布线了,需要升级到 6 层板,然后还可以尝试进一步缩小底板的面积,讲真,正方形的外观设计实在有点丑~升级到6层板之后,为了更好的解决小空间布线难的问题,使用了盘中孔工艺,即过孔打在焊盘上,以减少走线。不用担心焊接时漏锡的问题,盘中孔采用树脂塞孔+电镀盖帽方式,成品PCB的焊盘表面平整,不会看到过孔空洞,目前嘉立创的6层板使用此工艺免费,打样依旧免费。盘中孔工艺展示,来源:嘉立创这台桌面小电脑性能强大,可以运行Linux操作系统做边缘服务器,也可以运行Android系统安装丰富的多媒体应用,内置的NPU还能进行离线的AI模型运算,可玩性极高!来到这里,我似乎懂了,单独把核心板分离出来,原来是开发板厂家基于实际应用的考虑,从成本、易用性、稳定性之间取一个平衡点。把CPU、内存、eMMC这些元器件都贴片在底板上,如果后期要进行底板硬件扩展的话,成本将会非常高,相当于要把整块PCB重新设计,而如果采用【核心板+底板】的形式进行设计的话,只需要重新设计底板,并且电路板层数也不用那么多~不说了,先拉线去,没准还要找嘉立创来协助 PCB-Layout,6层板对我来说确实有点难度~真 . 高多层 PCB#嘉立创PCB##PCB有什么好玩的##DIY设计#
工程师进阶笔记
5 16 嘉立创PCB
#嘉立创PCB# 人生,就好像 PCB 走线布局一样~。。。 1、要先布局,后走线;走线再细致,布局失败,也是白搭;(人生也是一样,要有理想和长远的规划。) 2、如果只图早期的走得舒服,后面绕来绕去都是死路。(人生也是一样:能吃苦吃苦半辈子,怕吃苦,吃苦一辈子。) 3、建立一定的规则,避免情况复杂之后,全无章法的乱绕线。(人生也是一样:自由和约束是相辅相成的。) 4、优质的走线区域留给重要的信号和期间。(人生也是一样:重要的时间留给重要的事情,你的精力分配决定你的层次。) 5、敏感信号,原理强干扰源。(人生也是一样:近朱者赤近墨者黑。)
工程师进阶笔记
4 23 嘉立创PCB
#嘉立创PCB# 上个世纪的电台收发器,原理图和PCB鉴赏~
工程师进阶笔记
3 7 嘉立创PCB
#嘉立创PCB# 高低得请教一下各位大佬,PCB在什么情况下需要铺铜,什么情况下不需要铺铜呢?(现在都是简单粗暴二层板一律直接铺铜~[我想静静])
工程师进阶笔记
1 7 嘉立创PCB
【在嘉立创做智能硬件】高多层 PCB 工艺科普
一、什么是高多层 PCB简单通俗来说,就是在每一块电路板上都设计电路,然后通过绝缘材料和特殊工艺把多块电路板堆叠粘合在一起,需要连通的电气网络就用孔洞进行层间连接,就像下图那样,真 . 高多层 PCB~(开玩笑)面积不够,空间来凑,PCB 的层数越多,拉线工(PCB Layout 工程师)自由发挥的空间也就越大,从而实现更高的电路密度以及更复杂的电路设计。高多层 PCB 可以让硬件产品具备更好的电磁兼容性和信号完整性,当然也会让PCB的设计和制造变得更加复杂和昂贵。二、高多层 PCB 的制作流程这么多的电路层,要把它们压合得这么薄(1.6毫米),并且还要保证它们层与层之间互相绝缘不短路,高多层 PCB 的制作流程到底是怎样的呢?如上图所示,高多层 PCB 比单双面 PCB 多了一个内层工序流程(蓝色部分),其中比较关键的步骤是内层之间的压合工艺管控,这个步骤对于受控阻抗传输线的电气性能至关重要。板厂在开始制造 PCB 之前,拉线工通常需要做一些前置工作,这些工作包括:提交和审核制造信息(Gerber文件、钻孔文件、网表数据),以及电路板材料选择。前置工作完成之后,就来到了高多层板的生产工艺流程,也就是上图的粉红色部分,如果要把整个工艺流程都细化展开,通常会涉及到200多个不同的加工步骤。比如,把不同规格的半固化片和覆铜层压板互相组合,就可以实现各种厚度的电路板,一款硬质6层PCB的制造方法以及各个叠层之间的元素,如下图所示。仔细观察图中的各层,可以发现它们都是互相对称并且具有相同厚度的,比如:A1和A2和A3、B1和B2、L2-L3 和 L4-L5。内层的铜箔也是均匀分布,这样是为了避免热应力不均匀所造成电路板扭曲。能否把这么多个叠层精确地压合在一起,这对高多层电路板的质量来说至关重要!如果某些叠层之间出现微小的错位,就可能会导致电路出现开路或者短路的问题。因此,在进行叠层压合之前,通常会使用AOI(自动光学检查)对实际的铜箔电路和设计文件进行视觉比对,这时如果发现缺陷,仍然可以进行修复。(压合之后无法修复了,或者修复的成本很高)检查无误之后就可以进行各个叠层的压合了,上图的A1A2A3是用来绝缘的,这些绝缘材料(环氧树脂)在加热之后就会融化,并把各个覆铜的层压板进行粘结,类似于胶水的作用,各个叠层是通过金属化的孔洞进行电气连接的。这个压合过程的精确度为啥那么重要?这是因为,绝缘材料融化之后会在每个板层之间流动,厚一点或者薄一点都会影响各个层之间的距离,这对受控阻抗传输线路的特性阻抗有着最大的影响。拼接生产的电路板高多层PCB的最终生产设计稿,是将多块小面积的板子拼接到一块大面积的板材上面进行生产的(俗称:拼板),这么大面积的板材在压合的时候,绝缘材料的流动均匀性更是不容忽视,压合设备有着举足轻重的地位。嘉立创工厂,台湾活全(Vigor)全自动压合机三、沉金、盘中孔、正片工艺在高多层 PCB 的各个生产环节里面,选用某些生产工艺可以直接拉升高多层 PCB 的品质,比如,对于6~32层电路板,嘉立创全部免费升级至 2u'' 沉金厚度,并且统一默认采用盘中孔和正片工艺。沉金工艺就是在电路板表面沉积一层镍磷合金层,然后再沉积一层金,这种工艺可以提高电路板的耐腐蚀性、导电性和可焊性,电路板看起来也非常美观。(相对来说,沉金越厚,价格越贵!)金灿灿的焊盘做硬件开发的工程师都知道,过孔在电路板中扮演着非常重要的角色,特别是在高多层PCB中,合理使用过孔,可以支持更复杂的电路实现,设计出更加稳定可靠的电路板。由于各种环境因素,过孔在电路板的使用过程中会被慢慢腐蚀,从而导致电路连接失效、信号衰减、开路或短路等一系列影响产品可靠性的问题。为了解决以上种种过孔问题,PCB板厂通常会使用盘中孔工艺,这种工艺通常用在高端电子产品上面,且价格比较昂贵。盘中孔,也就是在焊盘中打孔,在孔内塞上树脂后再烤干磨平,再在表面进行镀铜,这种工艺的好处是可以允许工程师在焊盘上面打过孔,大大提高了设计效率,提升了PCB的生产良率以及高速电路板的性能。除了沉金和盘中孔,提升电路板的品质还可以使用正片工艺,而不采用负片工艺,关于正片和负片这两种工艺方式,可以网上进行了解。两者对比下来,正片工艺的成本高,流程长,但可以实现更高的图案精度和线路精细度,并且正片工艺的光刻过程更容易控制,无分散性的坏孔隐患,只是由于正片工艺采用了锡金属,因此其综合成本也比负片工艺更高。
工程师进阶笔记
0 10 嘉立创PCB
#嘉立创PCB# 听说这种工艺很贵,这么小一块板子,打样就要一千多~[看][看]
工程师进阶笔记
5 10 嘉立创PCB
【物联网智能硬件】在开发板上设计并运行MQTT客户端
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,该传输协议具有轻量、简单、开放和易于实现的特点,可以用极少的代码和有限的带宽,为远程连接的设备提供实时可靠的消息服务。作为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有着十分广泛的应用。主流的MQTT协议,其底层是基于TCP/IP连接,通过客户端和服务器的方式,来进行数据传输的。在MQTT协议里面,主要涉及三种角色:消息发布者(Publish),消息订阅者(Subscribe),消息代理服务器(Broker)。消息发布者和消息订阅者都是客户端角色,而消息代理是服务器角色,对于一台通过MQTT协议接入消息代理服务器的设备,它可以同时作为消息的发布者和消息的订阅者。MQTT在传输消息的时候,一个消息通常包含主题(Topic)和负载(Payload),有点类似key-value的关系,主题Topic可以理解为消息的类型,当订阅者订阅了该主题后,一旦有发布者发布该主题的消息,订阅者就会收到该消息的负载内容(Payload)。关于MQTT具体的实现原理和协议详解,此处不作分析,感兴趣的读者可以在网上搜索各种分析资料。本篇文章旨在imx6ull开发板上,实现一个MQTT客户端,让各种开发板实现互联互通。基于Qt5实现的MQTT协议,除了使用Qt官方提供的MQTT封装以外,也可以使用第三方公司提供的针对MQTT的封装接口,可以通过以下链接下载第三方MQTT客户端的Qt源码。https://github.com/emqx/qmqtt下载好源码后,把源码上传到ubuntu中并解压,解压后的源码,如下图所示。本次实验使用的是imx6ull开发板,其他开发板也可作为参考,在开始之前,需要先根据开发板的使用手册,搭建好Qt的开发环境,安装好对应的编译器,并且编译出来的Qt5应用程序可以在开发板正常运行。1.在解压出来的文件中,使用Qt-Creator打开qmqtt.pro文件,打开后的工程可以使用imx6ull的交叉编译器进行编译,对于examples和tests文件夹,我们暂时不需要用到,我们只需要用到src文件夹里面的代码。对src文件夹执行qmake和编译操作,如下图所示。2.编译完成后,在构建目录里面可以生成include文件夹和lib文件夹,这两个文件夹主要是供我们自己编写MQTT客户端源码时使用的,include目录主要是头文件,lib文件夹是动态库,程序编译时需要用到,如下图所示。3.为了项目管理方便,我们把include和lib目录单独提取出来,保存到lib_qmqtt文件夹里面,并把lib目录里面的动态库文件libQt5Qmqtt相关文件,复制到开发板的/usr/lib目录下,因为客户端程序在开发板运行时,需要这些动态库进行支持,如下图所示。4.使用Qt-Designer软件,设计好MQTT的客户端应用程序界面,包括MQTT代理服务器的IP地址和端口,该客户端程序发布的主题和订阅的主题,消息内容的显示窗口,等等,如下图所示5.把lib_qmqtt文件夹复制到100ask_imx6ull_app工程目录下,我们在page3_widget.cpp和page3_widget.h文件里面编写MQTT客户端代码,在Page3_Widget的构造函数里面,先连接各种按钮的信号槽,然后实例化一个mqtt客户端对象,实例化成功后,连接mqtt的信号槽函数,源码实现如下图所示。6.当按下【连接MQTT服务器】按钮,程序会根据当前的连接状态进行判断,是否应该进行连接或断链操作,按钮的槽函数实现如下图所示。7.当客户端程序跟MQTT代理服务器连接成功或连接断开后,底层会发出事件信号,相应的槽函数会被调用,具体的实现代码,如下图所示。8.在订阅主题的输入框内,填写需要订阅的主题,然后点击【开始订阅】按钮,客户端应该程序就可以成功订阅该主题,主题订阅的实现代码,如下图所示。9.当一个主题被客户端订阅成功后,就可以进行主题消息的接收。一旦代理服务器收到其他客户端关于该主题的发布消息,MQTT的消息接收函数就会被调用,客户端会在界面上打印出接收到的主题和消息,如下图所示。10.当客户端需要发布主题和消息的时候,可以在界面输入要发布的主题和消息,然后点击【发布】按钮,就可以把该主题和消息内容发布到代理服务器,主题发布的实现,如下图所示。11.为了测试MQTT客户端的运行情况,我们需要在ubuntu下安装mosquitto这个MQTT代理服务器,安装比较简单,可以在网上查找该代理服务器的安装方法。与此同时,我们在windows下使用MQTT.fx作为另一个MQTT客户端,与开发板的客户端进行通信,MQTT.fx的界面,如下图所示。12.使用MQTT.fx和我们自己编写的应用程序作为客户端,mosquitto作为代理服务器,就可以让开发板跟windows上的MQTT.fx进行消息通信了。项目的开源地址:https://github.com/embediot/Embedded-IoT-Projecthttps://gitee.com/embediot/Embedded-IoT-Project#嘉立创PCB##PCB有什么好玩的##嘉立创##DIY设计#
工程师进阶笔记
0 9 嘉立创PCB
#嘉立创PCB# 有没有大佬能科普一下,在PCB制作时,为啥“钻个孔”都那么费事那么讲究?~[呲牙]
工程师进阶笔记
6 3 嘉立创PCB
#嘉立创PCB# 十年前刚电子入行时,用洞洞板搭建的“智障”小车,简易万年历时钟电路,用来练习画PCB的最小系统板~
工程师进阶笔记
5 5 嘉立创PCB
关于 PCB 那些鲜为人知的发展历史
印刷电路板(Printed Circuit Board,简称 PCB)一、PCB 出现之前在PCB出现之前,电子元器件是通过导线直连的方式,直接焊接在一个绝缘底座上面的,这种方式虽然也可以让电子元器件工作,但整个体积比较庞大,也很脆弱笨重。史前时代的电路设计二、第一块 PCB 的诞生1936年,奥地利工程师 Paul Eisler 受到了印刷技术的启发,首先提出“印刷电路”的概念,并且在一台收音机里面设计出世界上第一块PCB电路,解决了手工焊接电路容易出错且难以规模化的问题。历史上第一块 PCB 电路后来, Paul Eisler 还参考照相印刷工艺,用化学药水来溶解未被掩蔽的金属铜箔,即腐箔技术,奠定了以后光刻工艺的技术基础。三、高多层 PCB 的问世二十世纪五六十年代,集成电路 IC 的快速发展,PCB开始迈进了多层板时代,1960年,Litton Systems公司首先在一台小型计算机上面应用 6 层印制电路板。我国的第一块 6 层电路板是在1964年实验室条件下研制成功的,并在1967年把 6 ~ 8层板应用于大型计算机工业化生产。20世纪60年代的多层 PCB四、高多层PCB的发展二十世纪九十年代,轻量小型化的笔记本电脑、移动电话、摄像机等数码电子产品陆续问世,推动了高密度互连多层板技术(HDI PCB)的发展,后来也衍生发明出BGA(球栅阵列)封装技术。二十一世纪初,第二代 HDI 技术可以让 PCB 的最终线距达到了 40 μm,2017年后,HDI 和 微孔技术在提升元器件密度方面,提供了显著的帮助。时至今日,我们的生活已经离不开高密度多层PCB,因为我们的生活已经离不开手机的参与,手机各种主板PCB就是基于高密度多层PCB技术来制造的。iPhone15 主板射频板部分十几年前,用洞洞板搭建的“智能”小车#嘉立创PCB##PCB有什么好玩的##用一张图证明你是电子工程师#
工程师进阶笔记
1 6 嘉立创PCB
#嘉立创PCB# 高低也得虚心请教一下各位大佬,这种丝滑布线是怎样做出来的?有什么作用?
工程师进阶笔记
4 12 嘉立创PCB
#嘉立创PCB# 多层PCB的内部过孔,原来长这样~
工程师进阶笔记
2 11 嘉立创PCB
#嘉立创PCB# 周五,天气好心情好,来劲了,搭个电路验证一下方案~[呲牙]
工程师进阶笔记
5 9 嘉立创PCB
【嵌入式物联网智能硬件】无线收发模块
为了提高硬件模块的可重用性,对于终端设备模块的硬件,采用了无线收发模块+传感执行模块的方式进行设计。即一个无线收发模块可以跟不同的传感器模块或执行器模块配合使用,只需要烧录不同的设备端固件即可。无线收发模块如下图所示。无线收发模块具有以下功能:1、使用外部DC-5V电源供电。2、具有2.4GHz和433MHz无线收发功能。3、板载LED指示灯和物理按键,用来指示网络状态和重置模块。4、网络管理功能:加入网络,退出网络,心态包维持,等等。5、对外引出MCU的串口1和串口2,方便外接其他串口模块。6、对外引出MCU的PWM,IIC,GPIO,外部中断接口,方便用户扩展。7、模块尺寸:51mm * 42.5mm硬件设计篇无线收发模块使用DC-5V进行供电,模块自带LDO稳压芯片,DC-5V电源通过LDO稳压电路,为单片机及其他模块提供3.3V电源,LDO稳压电路如下图所示。无线收发模块采用STM32F030C8T6作为主控芯片,这款芯片是Cortex-M0内核,主频48MHz,芯片自带64KB可编程Flash和8KB RAM,外设资源丰富,MCU控制电路如下图所示。无线收发模块使用排母端子的方式对外引出MCU3路PWM引脚,一组IIC引脚,多组外部中断引脚和通用GPIO引脚。其中一边的排母端子作为固定模块使用,并没有芯片引脚连接,对外扩展引脚原理图如下图所示。无线收发模块带有一个蓝色LED指示灯和物理按键,蓝牙LED指示灯用来指示网络状态,如入网状态,掉线状态,连接状态,等等。物理按键用来重置模块的出厂配置信息,并使模块重新回到配网状态,电路原理图如下图所示。无线收发模块使用了MCU的SPI1和SPI2接口跟两款无线芯片进行通信,其中,SPI1接口连接SI4432这款433MHz无线模块,SPI2接口连接nRF24L01这款2.4GHz无线模块,SI4432模块和nRF24L01均使用焊接方式固定在无线收发模块上面,接口原理图如下所示。以上就是ARM中控扩展模块的原理图描述,各个模块的原理比较简单,具体原理图和PCB的硬件工程可以到GitHub或Gitee上下载。软件设计篇为了让无线收发模块有更好的扩展性,模块并没有添加其他关于传感器和执行器的功能,只保留了最基本的无线收发功能和网络管理功能,例如恢复出厂设置,加入网络,退出网络,心跳包维持,等等。无线收发模块可以通过板载物理按键重置自身的网络信息,用户连续按下板子上的物理按键5次,无线收发模块会把当前的网络配置信息恢复为出厂设置。物理按键的操作函数在key_task.c文件中实现,如下图所示。为了更好地辨别出无线收发模块当前的网络状态(如配对状态,连接状态,断连状态),模块通过板子上的一颗蓝色LED进行显示,当网络状态发生改变时,LED的闪烁状态也会发生改变,在led_task.c文件中实现LED状态显示,如下图所示。无线收发模块的网络管理功能,在net_task.c文件中实现,如入网操作,退出网络,心跳包维持,等等。无线收发模块通过入网操作,向主机请求网络ID和设备ID,当入网成功后,主机会通过心跳包的方式维持整个网络,如下图所示。无线收发模块在入网的时候,需要向主机(即ARM中控扩展模块)请求网络信息,而主机的网络信息需要在ARM中控上对其预先进行配置,因此在ARM中控上设计了一个主机参数配置界面,用于对主机参数进行配置,如下图所示。如图所示,点击【设置主机】按钮,弹出设置主机参数界面,可以使用该界面进行参数获取和参数设置,设置完成后,点击OK退出界面。【主机扫描】按钮是在从机入网时使用的,点击该按钮,主机会启动扫描,进入待入网状态,等待接收从机的入网请求。系统软件之间的通信协议和AT指令集,请参考如下两篇文档:《0-ARM中控扩展模块AT指令集.docx》《1-嵌入式物联网系统通信协议.docx》项目的开源地址:https://github.com/embediot/Embedded-IoT-Projecthttps://gitee.com/embediot/Embedded-IoT-Project#嘉立创PCB##PCB有什么好玩的##PCB有什么好玩的#
工程师进阶笔记
4 15 嘉立创PCB
#嘉立创PCB# 天气不好,没心情画PCB了,电路就这样凑合着用吧~
工程师进阶笔记
7 4 嘉立创PCB
#嘉立创PCB# 实验室学妹制作的电子鞭炮,接反就炸,炸完纸皮满天飞,空气中弥漫着蛋糕店的味道~[哭笑][哭笑][哭笑](PS:电解电容注意正负极,千万不能接反!!!)
工程师进阶笔记
3 8 嘉立创PCB
#嘉立创PCB# 据说,这是F-4飞机里面的三轴姿态仪,那PCB布线真的挺丝滑的~
工程师进阶笔记
2 10 嘉立创PCB
【嵌入式物联网智能硬件】非常好用的ARM-Linux扩展模块!
为了让ARM-Linux开发板具有2.4GHz和433MHz无线通信功能,微联智控工作室设计了一款通用的ARM中控扩展模块,该模块的实物图片,如下图所示。这款ARM中控扩展模块,主要使用了USB-TTL芯片和STM32单片机进行通信,再通过SPI接口外接si4432模块和nRF24L01+PA+LAN模块。使用这种方式,就可以避免移植si4432和nRF24L01的驱动到ARM-Linux开发板,大大降低了开发工作量和开发难度。在ARM-Linux开发板或者在PC电脑上使用这款模块,只需要简单地在开发板移植或在PC机上安装CH340G的芯片驱动,就可以把这款模块当做串口使用。ARM-Linux中控扩展模块具有以下功能:1、USB转串口功能,使用CH340G芯片,可以方便对接电脑和嵌入式Linux开发板。2、引出CH340G的TTL接口,可以用作一个普通的USB转串口模块(去掉R2和R4电阻)。3、引出单片机的UART2串口,TTL电平,方便用户扩展(提供源码)。4、板载433MHz无线通信模块,与单片机通过SPI接口进行通信,用户可编程。5、引出SPI接口,对接市面上大部分SPI接口的2.4GHz通信模块,用户可编程。6、模块尺寸(不含USB接口):70mm * 25mm硬件设计篇ARM中控扩展模块使用USB接口进行5V供电,模块自带稳压芯片,5V电源通过LDO稳压电路,为单片机及其他模块提供3.3V电源,模块还自带有红色的电源指示灯用来表示模块的通电情况,如下图所示。USB转串口电路使用沁恒科技的CH340G作为转换芯片,该芯片可以通过3.3V或5V电源供电,对外引出芯片的TTL接口(使用时需要去掉R2和R4电阻),方便开发者扩展,USB转串口电路如下图所示。ARM中控扩展模块采用STM32F030C8T6作为主控芯片,这款MCU芯片是Cortex-M0内核,主频48MHz,芯片自带64KB可编程Flash和8KB RAM,很适合物联网终端设备的控制器开发。模块的MCU控制电路如下图所示。ARM中控扩展模块使用SPI1和SPI2接口跟无线模块进行通信,其中,SPI1接口连接SI4432这款433MHz无线模块,SI4432模块使用焊接方式固定在中控扩展模块上。SPI2接口通过提供接口的方式外引出来,可以用来对接nRF24L01这款2.4GHz无线模块,如下图所示。以上就是ARM中控扩展模块的原理图描述,各个模块的原理比较简单,具体原理图和PCB的硬件工程可以到GitHub或Gitee上下载。软件设计篇ARM中控扩展模块的软件框架,是基于任务和事件的OSAL调度器来进行开发,ARM中控扩展模块,具有串口通信功能,2.4G和433无线通信功能,看门狗系统监测功能,LED指示灯功能。因此,在软件设计上,把这些功能划分为6个任务,在osal.h中定义好各个任务的ID,并创建各个任务的源代码文件,如下图所示。在main.c主函数里面,进行OSAL调度器和各个任务事件的初始化,由于有些设备不一定用到所有串口,因此,通过USART1_ON和USART2_ON这两个宏定义作为串口模块的开关,主函数的内容如下图所示。先来看看串口任务处理,ARM中控扩展模块主要用到了串口1以及DMA通信。所以,需要在工程的宏定义那里定义USART1_ON宏和USART_DMA宏,以使能串口1的DMA通信方式。在源文件usart1_task.c中,对串口任务进行了注册和串口外设初始化,并且同时初始化了两个队列数组,用来缓冲串口的发送数据和接收数据,如下图所示。在头文件usart1_task.h中,定义串口1任务相关的事件,主要有串口1数据收发和处理,串口任务启动事件,如下图所示。然后在源文件usart1_task.c的usart1_task()函数中,处理各种串口任务事件,OSAL调度器在收到串口的各种事件后,都会在这个函数里面处理各种事件,如下图所示。(限于篇幅,这里只列出部分源码)对于SI4432和nRF24L01这两款无线模块的任务处理,其任务事件的处理框架都是大同小异的,这里以SI4432为例进行说明。先来看看源文件si4432_task.c里面的任务初始化函数,如下图所示。在初始化函数si4432_task_init()中,先对si4432芯片的连接引脚和芯片寄存器进行初始化,然后再初始化si4432的数据发送和接收队列,然后再根据系统设置的参数,进行无线通信信道设置。在头文件si4432_task.h中,定义了各种任务事件,主要有数据发送和接收,超时处理,以及中断事件,如下图所示。各种任务事件是在si4432_task()这个函数中进行处理的,对于SI4432无线模块接收到的数据,目前都是通过串口透传出去,交给上位机进行处理,各个任务事件的函数内容,如下图所示。(限于篇幅,这里只列出部分源码)由硬件原理图可知,不管是SI4432或nRF24L01模块,一旦接收到无线数据,都是通过引脚中断的方式来通知STM32进行处理的,因此,需要在STM32的外部中断引脚处理函数中,取出无线模块接收到的数据,如下图所示。看门狗任务是用来监测整个系统的运行情况的,一旦发现系统运行异常,看门狗由于喂狗不及时,系统就会进行超时重启。因此,看门狗任务比较简单,主要是初始化STM32的看门狗外设,并设置一个定时喂狗任务,定时进行看门狗计数器复位操作,防止系统复位。与此同时,也可以利用看门狗超时的特性,来定义一个复位任务,方便一些系统重启操作,如下图所示。指示灯任务是用来指示系统无线网络状态的,当无线网络处于连接成功/连接断开/数据广播等不同状态的时候,指示灯会以不同的频率进行闪烁。网络状态指示灯的任务处理,如下图所示。为了方便开发者对ARM中控扩展模块进行设置,模块还支持AT指令扩展,开发者可以通过AT指令对模块进行波特率参数,信道,恢复出厂设置,查询软硬件版本信息等操作,也可以根据实际需要,修改源码扩展自己的AT指令集,目前模块支持的AT指令如下图所示。以上就是ARM中控模块的软件开发内容,编译源码并下载到模块中运行,可以使用串口工具测试模块的AT指令是否工作正常,如下图所示。使用两个ARM中控扩展模块,并同时接到PC电脑上,用串口调试工具可以在这两个模块直接互相透传数据,如下图所示。项目的开源地址:https://github.com/embediot/Embedded-IoT-Projecthttps://gitee.com/embediot/Embedded-IoT-Project感谢阅读!#嘉立创PCB##PCB有什么好玩的#
工程师进阶笔记
0 7 嘉立创PCB
#嘉立创PCB# 新手请教各位大佬,像这种PCB布线情景,有方法可以把芯片引脚和接线端子引脚快速地连接起来吗?~[愉快]
工程师进阶笔记
2 7 嘉立创PCB
【嵌入式物联网智能硬件】CC254x蓝牙AT指令模块
资料包含CC254x蓝牙模块的源代码程序,原理图和PCB工程源文件,BOM文件,蓝牙模块开发的参考资料。CC254x蓝牙模块,已经实现以下功能:1、支持修改广播名称和广播间隔。2、支持串口透传数据,烧录固件即可使用。3、支持AT指令设置模块参数。4、板载LED指示灯指示蓝牙连接状态。5、支持板载PCB天线和IPEX天线6、提供邮票孔封装的PCB文件。7、提供源码使用说明。8、模块大小:26mm * 20mm源代码工程概览:原理图和PCB概览:BOM清单概览:参考资料概览:#嘉立创PCB##PCB有什么好玩的#
工程师进阶笔记
0 3 嘉立创PCB
#嘉立创PCB# 电子工程师心目中的理想工作室,好想拥有一间~[惊喜]
工程师进阶笔记
6 10 嘉立创PCB
物联网IoT开发实战 -- 开发板接入物联网开发平台
物联网的概念其实十几二十年前就已经有了,随着人工智能,大数据,云计算这些科技的发展,越来越多的物联网项目正式商用落地,比如,共享单车和共享汽车,全屋智能家居,等等。时至今天,国内的物联网生态可谓百花齐放,不乏一线大厂,比如华为腾讯小米;小米应该是布局物联网生态比较早的公司,大部分人都认为小米是做手机的,但发展到今天,小米已经成为一个生态链平台。大概在2015年左右,有一家公司渐渐进入物联网的生态圈,涂鸦智能。我最早接触涂鸦大概是在2016的时候,记得当时有一个做植物灯具的厂家,想用手机控制家里的植物照明灯,并且实时监测家里的环境数据并记录。如果按照当时的技术水平和技术思维,大部分开发者都会想着自己搭建服务器,然后自己开发硬件,自己开发手机应用,这一整套下来,光是服务器的搭建和维护成本已经不低。当时老板不知道在什么地方找到涂鸦,交到我手上的,是一款涂鸦开发板;我应该是当时比较早的尝鲜开发者了,那时候的开发文档虽然没有现在完善,但参考文档已经可以实现设备联网,数据记录,手机应用控制这些基本功能。当时我记得采用的开发方式是,设备端使用涂鸦提供的MCU_SDK接入涂鸦云平台,手机APP是采用涂鸦提供的SDK进行开发的,项目比较顺利,进行了不到两个月就进入了量产阶段,直到今天产品仍然在量产。用涂鸦方案开发完两三个项目之后,我就跳槽了,转到了其他技术方向,之后有三四年的时间就没有使用过涂鸦方案了。以上是我使用涂鸦物联网方案的一段工作小经历。最近,偶然间刷到涂鸦IoT的信息,因为记得自己当时有注册账号,于是,登录上去看看~对比起几年前,涂鸦确实发展了很多,平台增加了人工智能和工业物联网的相关内容,第三方云接入,完全自定义的手机界面,等等。大概看了一下各种开发文档后,忽然想起我手上刚刚好有一款小熊派物联网开发板,于是就想尝试一下,把小熊派接入涂鸦IoT平台,然后自己设计一个简单的UI界面,再次学习一下涂鸦IoT平台的开发接入过程。以前也写过不少小熊派物联网开发板相关的文章,小熊派官方是接入华为云的,我之前也已经把小熊派接入腾讯云并实现了MQTT通信,相关的文章可以查阅我的博客。现在,我尝试把小熊派接入涂鸦IoT平台,并实现以下简单的功能:(1)通过涂鸦提供的WiFi模块,设备接入涂鸦IoT平台,设备可以通过手机进行配网操作。(2)设备通过配网指示灯提示配网过程,并可以通过按键解除配网。(3)设备上报温湿度传感器和光照传感器的数据信息,云平台进行数据记录,曲线显示。(4)手机APP界面显示数据信息,可下发控制指令,控制电机和紫光灯。(5)LCD界面显示设备运行信息。以下是涂鸦IoT平台的思维导图及开发过程。注册开发者账号1、首先,根据涂鸦官方的指引,注册一个开发者账号,然后使用该账号登录涂鸦IoT开发平台,即可进行物联网产品开发,注册页面和登录页面如下图所示。账号注册链接:https://t.tuya.com/AY1D3R8xay创建产品2、涂鸦IoT平台登录成功后,即可进入平台首页,在平台首页可以查看到创建的产品总数,以及各种开发中的产品信息,如下图所示。3、点击创建产品按钮,即可进入产品创建页面,由于我们使用的是小熊派物联网开发板,属于涂鸦产品库里面的非标准品类,因此,我们使用【找不到品类】功能,创建一款开发者自定义的产品,接入涂鸦IoT平台,这样的灵活性更高,如下图所示。4、根据产品的实际情况,填写产品信息,我使用的是小熊派物联网开发板,实现了植物环境监测的功能,因此,我创建的产品信息,如下图所示。5、产品创建成功后,IoT平台会为该产品生成唯一的PID,由于我们是开发一款非标准产品,里面的功能节点都是自定义的,因此我们不添加任何涂鸦产品库里面的功能节点,点击【确定】,进入产品开发页面。定义产品功能6、涂鸦的IoT平台非常人性化,根据智能硬件的开发流程,设置好了开发引导,对于所有的智能硬件开发,基本都遵循了【功能定义】、【设备面板】、【硬件开发】、【产品配置】、【设备调试】、【测试服务】这个流程,如下图所示。7、对于开发一款智能硬件设备,需要先对其进行功能定义,对于需求模糊的产品,是没有办法进入产品开发阶段的,因此,在进行硬件设备开发和手机APP开发之前,先定义产品的功能,对于我们将要开发的小熊植物监测设备,需要添加自定义功能。如下图所示。8、所有植物监测设备的自定义功能添加完成后,如下图所示。至此,我们完成了在IoT平台上确定一款智能硬件的具体功能,并且可以进行下一步的设备面板开发和设备硬件开发。开发设备显示面板9、一个优秀的APP显示界面是十分重要的,涂鸦IoT平台为开发者提供了多种APP界面设计方式,如Studio面板,SDK开发面板,定制面板,自由配置面板。Studio面板,是使用涂鸦提供的界面设计工具,使用拖曳的方式进行界面设计,所见即所得。SDK开发面板,是使用涂鸦提供的SDK,进行手机APP界面开发。定制面板,是向涂鸦提供面板设计需求并付费后,涂鸦进行界面开发。自由配置面板,是用于项目调试阶段,功能完整但美观度不足。10、根据我们自己的实际情况,我选择了使用Studio面板进行界面开发,进入Studio面板开发界面后,可以在页面左侧拖曳控件,然后在页面右侧设计各个控件的属性,对于如何进行Studio面板开发,涂鸦也提供了一系列的文档,如下图所示。11、界面设计完成后,即可进行发布,点击右侧的发布按钮,按照发布流程进行操作,在发布之前,也可以使用预览功能对界面进行预览,没问题后进行发布,发布后的界面也支持修改,如下图所示。至此,APP界面开发已经完成,发布成功后的界面会同步到手机APP端,在设备登录IoT平台成功后,即可用自己设计的界面操作设备。界面开发完成后,即可开始设备硬件开发。开发设备硬件12、涂鸦提供了三种方式接入IoT平台,分别是Link SDK,MCU SDK,TuyaOS,我们这次开发是采用了MCU SDK的方式接入涂鸦云的,并且选用涂鸦提供的WR3 WiFi模块作为联网模块,如下图所示。13、设置完成后,即可在页面下载功能点调试文件,快速入门指南,MCU SDK,模组串口协议,涂鸦模组调试助手,下载的这些文件,可以帮助我们更好地进行硬件设备开发,如下图所示。14、接下来的工作,需要移植MCU_SDK到小熊派物联网开发板,MCU_SDK是涂鸦IoT平台根据产品的功能点,自动生成的一套设备代码,这套代码需要根据不同的芯片平台进行移植,SDK的代码文件如下图所示。mcu_api文件,提供一系列开发者主动调用的函数,比如内存操作,数据类型转换,DP数据上报,复位wifi模组,或者wifi模组信息,等等。protocol文件,开发者需要修改此文件,实现功能点的数据处理,包括下发和上报功能,此文件内有具体的移植提示,需要重点关注。system文件,主要是涂鸦平台通信协议的解析,一般不需要修改。wifi.h文件,使用涂鸦sdk里面的函数时,需要包含此头文件。15、把MCU_SDK里面的文件,复制到工程代码里面,并且添加到编译器里,在编译器里面设置好头文件相关的路径,如下图所示。16、为了更好地进行各种任务调度,软件工程里面添加了一个操作系统抽象层的调度器,并且创建了一些任务事件。17、对于WiFi模组的各种任务事件处理,主要放在wifi_task.c文件里面,在这个文件里面,主要是对涂鸦wifi协议的初始化,并且创建一个持续的任务,不断获取wifi模块的状态信息,以及不断调用wifi_uart_service()函数处理WiFi模组的任务。18、wifi_task.c文件还提供了WiFi模组的复位操作,以及清除配网信息操作,关键的源码如下图所示。19、当用户在手机界面操作的时候,IoT平台就会下发指令到设备端,设备端需要调用相应的函数进行处理,处理函数在protocol.c文件里面。比如,当用户点击app上面的按钮的时候,打开电机,则开发者需要把电机的驱动函数放到protocol.c相应的DP功能函数里面,如下图所示。20、对于需要开发者上报的功能点数据,可以通过MCU SDK提供的功能点上报函数进行处理,在all_data_update()函数里面,有各个功能点的上报函数,这些函数开发者可以在适当的时候进行调用,如下图所示。21、大部分的功能逻辑都在user_task.c文件里面进行处理,如周期地获取传感器数据,刷新LCD显示屏,并且周期地把数据上传到涂鸦IoT后台,具体的代码实现如下图所示。22、至此,硬件设备相关的开发已经进行得差不多,具体的源码工程我已经上传到gitee,源码的下载链接如下所示。https://gitee.com/embediot/bearpi_tuya_project.git设备调试23、界面和设备开发完成后,就可以进行设备调试了,可以通过【智能生活】APP,对设备进行配网操作,配网成功后,就会在APP端看到我们自己设计的界面,可以通过这个界面看到设备上报的信息,以及对设备进行控制。24、除了使用APP进行设备调试之外,也可以使用涂鸦IoT平台上面的设备调试界面,进行设备调试,在页面添加了设备的ID信息后,就可以用APP扫描二维码,进入设备调试界面,这个设备调试界面可以打印出调试过程的数据,有利于开发者进行分析。设备发布上线25、设备开发完成后,就可以进行发布上线,在产品开发的主页面右上角,可以点击【发布产品】按钮,根据界面提示进行操作,即可发布产品,如下图所示。26、设备的运行界面以及手机APP的运行界面,如下图所示。
工程师进阶笔记
1 10 嘉立创PCB
#嘉立创PCB# 这块中控PC主板已经锈迹斑斑了,但其背面的PCB走线很美观,而且是高亮绿色油墨,在现在哑黑和蓝色油墨主流的今天,高亮绿色油墨比较少见了~
工程师进阶笔记
1 5 嘉立创PCB
#嘉立创PCB# 为啥现在点赞、评论、发布帖子,所加的分数少了这么多?
工程师进阶笔记
1 16 嘉立创PCB
#嘉立创PCB# 【第三集】很酷的手工焊接电子艺术作品~
工程师进阶笔记
1 6 嘉立创PCB