嵌入式Linux开发技术总体来说是一门应用于产品的技术,日常生活中见到的有智能电视,车载娱乐影音,商场导购屏幕,停车场出入口检测系统,大型医疗设备如CT,DR和MR等,都是以嵌入式Linux构建的系统为基础。u-boot、内核、文件系统、驱动、应用,都只是产品软件方案构成的一部分。嵌入式设备通过检测一系列外部行为,执行具体的动作,最终满足用户的服务。嵌入式产品的开发过程,同时也是从数据输入(包含不限于传感器、串口、网络等)到输出(输出不限于GUI、网络、电机机械控制、继电器通断开关)的实现过程。
在应用开发时,根据产品的需求,去分析产品输入和输出接口;这样可以更清晰的理解应用开发。学习中带着这种思想,也更容易理解自己下一步要做什么,同时也理解为什么这么做。基于数据流动的思想去理解嵌入式产品开发,从原理来说很简单,这里举个日常生活中的产品例子来帮助理解。
本篇中以大家比较熟悉得空调产品为例,来分析如何从嵌入式角度,来开发完整产品。不过本人并未从事过空调相关产品研发,只能从使用者的角度来进行分析,如有错误,欢迎大家留言。
对于空调产品,其架构是比较清晰的,由以下几部分组成。
按照这个思路,整个产品的框架如下所示。
可以看到,一个完整的智能空调系统由手机端APP,云服务器,语音控制设备(智能音箱,电视机等),遥控器,空调内机,空调外机等组成。其中遥控器,空调内/外机就是和嵌入式开发相关的内容,我们进一步解析这些模块的实现。
遥控器就是常见的电子设备,产品功能比较单一。例如遥控器的目的就是实现对空调的远程控制。不过这只是需求,我们需要实现什么功能,就需要进一步分析。下面按照产品设计的角度去分析遥控器的工作模式。遥控器需要哪些功能?
当然上面只是设计的功能,那么对于产品就要进一步的去对应到硬件和功能上。
可以看到整个框架比较简单,基于这个结构,就可以进行嵌入式软件的梳理。不过这里有个隐藏的开发经验内容,那就是遥控器是电池供电,且允许长时间待机后仍然能够工作(一年以上)。这就要求有极低的待机功耗,这就需要硬件设计以及遥控器主控需要考虑低功耗设计,这里面其实是有方法计算的。
两节7号电池的容量在1000~1200mAh,如果希望待机一年以上,则待机功耗需要小于:电池容量/365/24 = 114uA,也就是保证整机功耗小于100uA即可满足要求。以现在的硬件设计,难度并不高,但需要设计时考虑;如芯片选择低功耗芯片,支持低速时钟,休眠模式和休眠唤醒等;另外硬件上避免长时间导通的上拉/下拉电阻设计来降低功耗。
基于上述功能需求和框架设计,嵌入式软件的主要实现内容如下所示。
上述内容即实现遥控器的嵌入式软件开发流程;可以看到整个逻辑是比较简单的,以单片机开发为主,可在循环中实现。软件实现包含按键扫描模块、红外发送控制模块(选择带红外控制MCU或直接使用红外模块都可以实现功能)、UI界面显示模块、以及事件处理逻辑、在配合硬件驱动即可实现全部功能。
空调外机,也就是我们平时看到的外面转着风扇,轰轰直响的箱子。其从功能上描述,可以说并不复杂,就包括以下部分。
整个模型清晰,看起来并不复杂,如果以框架显示大致如下所示。
这里要从空调的基本原理来说明,其实很简单,利用到初中物理知识;液体和气体的转换,当液体转换成气体时体积膨胀,发生吸热;当气体转成液体时,体积减少,则发生放热反应。在实践中当然没这么简单,液体压缩需要专用的压缩机作为外机处理;而且这种操作会释放大量的热量,因此需要有风扇防止设备过温损坏。可以看到,空调外机的功能,就是将空调内机的控制信息如设置温度告知控制外机,外机根据设置需求,环境和设备温度执行对压缩机和风扇的动作。
你可能感觉框架简单,并没有多少模块,不过这部分其实才是整个空调产品的核心功能,这里讲下为啥这么重要。
空调的最终目的是什么?其实很清晰,就是实现温度的调节,再往上就是对于调温效率、功率、噪音、使用寿命、价格有要求。如果空调不能满足温度,或者调温效率太低(例如封闭环境下一个小时和目标温度还差10几度,制冷和制热做不到),那么这款空调就没有任何价值。如果耗电一天几十度,噪音起飞,那么也不会有人购买。而这几个指标,其实是相互矛盾的;在压缩机技术未革命性提升的情况下,调温效率越高,功率就需要越大,外机发热也更大,散热需求也相应更高,噪音也会更高。那么如何平衡这些指标,在成本可控的情况下,实现让客户满意的效果,就是空调产品的核心竞争力了。
空调外机的开发需要结构,硬件、软件和成本的综合考虑;硬件上选择更优秀的压缩机和控制主板,结构上设计更好的风道和交换管路,往往有更大的提升,不过往往也预示着更高的成本。当然软件算法的优化也一定程度可以降低噪音和功率,不过除非硬件和结构差距很小,不然很难弥补。
空调外机的嵌入式软件的主要开发内容就如下所示。
可以看到,空调外机可以使用单片机或者dsp作为主控,通过串口或can接口与空调内机进行通讯;然后根据空调内机的控制信息以及外机的检测状态,控制压缩机和散热风扇等。这一部分看似不复杂,却涉及到行业中专用的温度采集和处理算法,以及压缩机开发和调试功能。
控制压缩机以及风扇属于传统的电机控制,积累经验并不困难,但是通过收集到各位置温度信息,组合起来结合设定温度,实现对于屋内环境的平稳控制的算法才是整个应用中的难点。不同户型、不同户外场景、室外环境温、制冷和制热的不同需求,这需要大量的环境测试,综合收集数据进行处理改进算法;做出一个勉强及格的产品并不困难,但能适配复杂环境,交出在如今市场上有竞争力的产品十分不简单。
因为本人没有从事过空调行业,这里就不多赘述;只是根据经验描述下这部分的开发方法,具体深入就只能在行业中去了解,这里只不过结合自己的开发经验去总结思考。
空调内机是整个系统的中枢,是数据中转的中心。遥控器的控制信息,其它云端服务的请求,都需要空调内机进行接受和处理后,最终告知空调外机实现控制策略。空调内机虽然不是系统的核心功能,却是产品用户体验中重要的一环。
空调内机和外机比起来是直接面向终端消费者、app云端控制、语音控制、实时信息反馈、丰富的可调项可以大幅度优化用户体验。这部分并不核心,不过智能化UI界面,红外远程控制,云端和语音控制功能的实现,却很容易提升产品的体验感。在外机性能满足基本需求后,这部分就是很大的加分项,毕竟用过语音控制的空调,肯定再也不想返回还需要找遥控器的时代。
从嵌入式软件方法来说,这部分也是系统最繁杂的部分,具体包含如下内容。
按照上述功能需求,空调内机的模块组件可以解析如下所示。
空调内机的功能看起来就复杂很多,不过有着物联网产品开发框架的经验来说,就会发现其实大同小异,都可以采用相同的框架接口来实现。
按照软件功能的模块划分,可以分为红外串口解析模块、按键扫描模块、wifi通讯管理和mqtt组网模块、UI界面刷新模块、外机通讯控制模块、以及系统状态监控和硬件控制模块,最终统一到系统工作流中,实现完整的空调内机功能。
空调是我们在日常中最常见的产品,看起来并不复杂;但是从开发角度,仍然包含三部分设备的通讯交互,控制。涉及到按键扫描、显示驱动开发和UI界面开发、压缩机变频控制、内外机风扇控制、红外发送和红外接收解析,主从机通讯协议设计开发,WIFI通讯连接和MQTT组网服务,以及配套的硬件设计和安全包含机制等。整个系统的构建可以说涉及物联网设备的各方面知识,也有行业特殊的功能需求。单纯的学习芯片的驱动,或者实现应用demo,和开发集成这些功能的难度其实是跨越性的,没有工作经验很难去思考这些问题。
这也是需要转变思维的原因,嵌入式不只是要学习多少知识点,还要能够应用知识点,在遇到产品时,有着分解问题,转变为软件需求,并能够进行设计开发的能力。另外在学习本系列文章时,也要有着这种思维,要以需求为导向去了解知识,这也是嵌入式学习的最佳指引路线。本篇的内容也只是我按照自己经验分析的思路,当然会有错漏之处,如果有不同意见,可以反馈告知;有则改之无则加勉,才能共同进步。
直接开始下一节说明: c语言基础语法