AT32F421专题--关于433无线模块和TSSOP20和LQFP48封装的干扰那些事(实物讲解)

【啰嗦两句】

       真的,这篇文章将价值至少几万,因为这些历程让我损失了商业时机和不断投入的开发资源,掐指一算,又少几万(为什么要说“又”呢?),我薪资低,几万对我来说已经很大一笔财富。如果更多人在面对同类项目时,受到启发和影响,很可能就省下这笔钱。我就没有这个运气,可是读者网友粉丝亲人们,这次你们有了。

      这是一个到处可见并且成熟到烂大街的商业产品项目:电源开关控制系统无线版,也就是用APP控制家电、商业场所常见的门、桌台等等,我作为一个半软件半硬件人,用我喜欢的方式(不限于手动、语音、眼神盯着)让这些死板的用电设备变成”活“的,是一种乐趣。显然,让它们听我指挥,比让人类听话容易太多。

【MCU选型之路】

       很多人在看到”单片机控制系统“这种话题,基本已经在脑海中刻画出“一个IO搞定”的不屑的想法。可是真动手做的时候就发现,商用的产品要考虑太多,MCU的选型、成本、开发难度等。

      今天所说的这款产品,基本架构如下图:

433M无线控制系统基本架构图

    本文的主角是架构中的最被看不到的开关单元,这个单元本质上确实只有一个IO控制继电器,一个IO控制LED指示灯,因此,可选择的MCU太多,从51架构到STM8到STM32等ARM架构,成本也可以有效控制。

    但是,433无线模块呢?这里必须特别强调一点:这种控制单元里面包含了继电器,是具有较强电源干扰和空间辐射干扰的元件,可不是随随便便一个433M模块就能搞定的!不考,但仍要划重点

     有了解过的人一定有接触过SI4432、SX1278、LLCC68等等主控,这些芯片往往是以模块的形式跟我们自己的产品结合,因为调无线频率太多讲究了,没有相关实验室很难调好。用模块就比较轻松,应用产品只需要考虑自身的开发,而不用过多考虑无线信号问题。

    所以,我们产品第一代是找了几个“无线透传模块”来跟我们的主板配合使用,介绍一下:普通的无线模块是开放出无线主控的SPI等引脚跟我们的MCU通信,而透传模块是普通无线模块里面额外多一个MCU将无线功能整合好,再用AT指令跟我们自己的MCU通信。

    第一代选型的MCU是STC8G1K08,8051架构,SOP20封装,无线模块反反复复试了4家串口透传模块,原以为这样一来最省事,搞了几个月,出了百来个样板,信号问题、指令乱发问题、包长导致的信号混乱问题层出不穷。最后勉强找到一家用sx1278的模块,问题少了很多,但是无线信号距离始终不让人满意。硬着头皮生产了几百套,时不时各种问题导致代理商已经骂街了。

   不得不给STC这个品牌一个赞,他们的MCU抗干扰相当强。

   一路不顺走过来,今年头的时候无意又找到一家用LLCC68主控的模块厂家,他们的模块带有屏蔽罩,给了我信心,用了开发板测试了信号收发,完美解决距离问题(可以隔好几堵墙),但是他们的模块是直接用SPI和MCU通信,需要自己驱动无线芯片,于是才发现STC8G1K08的RAM和ROM远远不够用,而LLCC68的厂家竟然没有提供51架构的代码,模块厂家也说没有,只有STM32类的,只好尝试自己移植,但是移植也受架构影响,代码的格式都不能兼容。

    第二代采用新唐的N76E003开发,也是51架构的,ROM空间较为充足,TSSOP20封装。结果发现所用的代码不知道如何解决频率问题,导致距离很短。移植也不顺利。

    这2代的共同点是MCU的引脚都比较少,因为我们的主板体积较小,没多少空间给更大封装的MCU。

   终于来到今天的话题了,前戏有点多,请读者见谅。

   第三代采用了模块厂家演示版的雅特力芯片,厂家用的是AT32F403系列,对我来说封装太大,所以我选了AT32F421的TSSOP20封装,也就是我这个专题的故事起源了。

   至此,我经过不懈的努力,总算推出第三代产品,并且彻底解决了信号距离问题,提升了2倍的距离,客户代理商们听说了之后跃跃欲试,我一边手工焊了20来套,一边琢磨着啥日子开瓶香槟庆祝一下。

   谁知道打击来得那么快,代理商都把别人家准备装我们产品的机器都拆散了,因为信心比较足,所以拆了十几台机器,那个画面自己想想吧。结果,第一台装上产品后开关瞬间就死机,所有人都没有任何准备,只得愣在那里......满地的机器配件,我不在现场,也知道安装师傅的脸色一定很难看!

    是我大意了,测试的时候太过关注信号距离,全程忘了做干扰测试,随后的测试结果确实发现AT32F421在开关瞬间,跳到HardFault_Handler()中断去了。

文件at32f421_int.c中的代码:

void HardFault_Handler(void)
{
    /*
        1.读取PSP和MSP的值,通过和SP值进行对比,确认当前是指向PSP还是MSP
        2.在Memory中打开存储位置,找到08开头格式的地址
        3.在Disassembly输入08开头格式的地址,定位出现问题的具体位置    
    */
    
    /* if Hard Fault exception occurs, go to infinite loop */
    while (1) {
			
			
			
    }
}

 【故障复现】

    用AT-LINK+进入调试模式,采用容易触发干扰的用电设备测试就能复现该问题,这里提示一下,用较大功率的LED灯,很容易发现这种干扰,可能是LED启动瞬间有PWM信号发生。堪称测试继电器干扰的神器啊!

【解决过程】

       熟悉STM32编程的读者可能一听说HardFault_Handler()中断,就大概猜出问题“应该”在内存溢出、读写FLASH时硬件故障,或者往硬件布局不合理、电源不干净等等角度去找原因,对,我也是这么找的,可惜并没有找到答案,内存溢出方面,我屏蔽了所有输入输出,除了433模块(为啥不屏蔽?我得用它通信呀),我用厂家的代码,他们执行得一点问题都没有,长时间运转没有任何溢出。

       顺便简单提一下如何排查HardFalt_Handler,这方面文章已经很多了,看我代码里的注释:

/*
        1.读取PSP和MSP的值,通过和SP值进行对比,确认当前是指向PSP还是MSP
        2.在Memory中打开存储位置,找到08开头格式的地址
        3.在Disassembly输入08开头格式的地址,定位出现问题的具体位置    
    */

        后来找了433模块厂家帮忙找问题,厂家拿样测试后,建议想办法做电路的优化,将芯片和继电器距离拉开或电源隔离。听说又要改板,一开始是拒绝的,我觉得第一代第二代也没有发现这个问题(第二代N76E003在后来的重测时也发现干扰,但没那么明显),同样的版型没理由又改一次。

        另外在这段时间里,我又用网关(今天的主题没有介绍)的AT32F421的LQFP48封装的芯片,飞线到这个产品上,却意外发现没有干扰。

         至此,迫于周期和现实,我心中已经有了新的改造方案了----将原TSSOP20改LQFP48封装,并且专门把MCU和433模块单独布局在一张小板,小板立起来跟主板拼接,电源部分仍然布局在主板上,电源先不做隔离。如下图:

      胶水工艺+四爪蓝白线+热缩管的运用,你没理由不欣赏吧。这个版本算是第三代的第二版本。

 

      曙光出现,经过这个改版之后,整个世界不再躁动了,反复开关2天(5秒通断一次),再也没有出现死机现象,并且同时测试了通信距离,仍然一如既往的远。

      产品将再次寄给代理们实际应用,虽然经历了很多次转折打击,本应该看淡的我仍然没有办法沉着,而是再次对产品有信心,并为能解决问题而感到幸运。越挫越勇?也许吧,总得有个理由逼自己往前走。

【干扰的原因分析】

     第一个,对比AT32F421这2个不同封装的表现,虽然我的主板布局稍微不同,但是特性差异太大,只能说是TSSOP20的抗干扰太差,同类应用不推荐选型TSSOP20。同时,也可能雅特力的产品仍然缺乏市场的验证,企业底蕴不如STC这种老牌芯片厂吧。

     具体硬件内部布局我没有深究,有猜测是某对引脚内部走线(芯片内部)过于靠近SPI导致,这种是需要有经验的芯片工程师才能发现的。

     这些方面找资料还是有点困难,只能遇到一个解决一个。

      第二个,继电器在通断瞬间会有火花,会对电源、空间辐射造成干扰电磁波,所以导致TSSOP20封装的芯片内部进入保护状态。但是这个不能怪我,我们这种应用多了去,实物出货已经不少了,别的芯片咋没AT32F421的这么脆弱呢?

     第三个,由于我所选的433M模块内部采用32M晶振,和MCU的48M(内置),通过调频到120M,不知道是否有什么直接关联,根据433模块厂家文档的说法,可能需要避开相近频率。

    再次提醒选型阶段的读者们,慎用TSSOP20封装,虽然价格便宜一些,但是完全让人找不到干扰的根源,会导致开发和维护成本相当高,搞不好丢掉市场。LQFP48型号貌似还可以接受。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值