工作总结
2022年3月加入公司,公司在河南,从事车载空调等相关项目,我的岗位是嵌入式软件工程师,在工作中也遇到了很多机遇和挑战,也学到了非常多的东西,在这里给大家分享下总结经验。
关于工作、公司
毕业后考研无望,实习公司又很拉,又经过学长引荐到了这个公司工作,由于我没有工作经验,到公司之后看完公司代码架构,感觉到深深的力不从心,学生时代的代码跟产品代码还是有非常大的差别,由于当时公司也缺人,我来之后就直接上手项目了,当时对空调系统还有非常大的欠缺,也非常感谢我的主管,他是一个非常会教人的人,在他的带领下一步步了解整个系统,到后来能独立做项目。
我3月入职公司,在五月初公司就安排我出差了,我现在还记忆犹新(由于公司设备没有那么完善,这之前我都没体会到过真正的装机空调是怎样的),当我真真切切的体会到空调之后,我明白很多东西为什么要那样做,流程为什么那样走,要考虑的点等等,其实做嵌入式、做项目,实地体验和自己动手真的非常重要。第一年出差还是非常多的,遇到了形形色色的人,还是乐此不比的。
我来当时,公司刚好走了一波人,我也没见到,但是那个月的公司加班统计表我看到了他们的名字,一个月加班70+小时,我当时人都傻了(公司五点半下班,但是加班时间是从七点开始算的,很不理解,也大为震撼),这人真顶。确实开始的几个月也是狂加班,不熟悉业务,项目也非常多,深深感觉到了主管的压力。还记得跟同事加班到11点多的情景,根本干不完。但那段时间也是飞速成长的时间,学习到了很多很多东西。第二年就好多了,加班很少了,一是业务比较熟练了,二是公司又招了不少小伙伴,三是项目也没之前那么多那么杂了。其实加班少,基本上不出差还是挺轻松的,偶尔有一两个急的项目,大多数时间还是能自己掌握的。
来公司之后,除了遇到一个好的主管,还有好几个好的朋友,还记得我们自驾去夜爬泰山,大家一起窝在泰山台阶上等日出,一起去参加江哥婚礼,一起去嵩山。。。不过他们都陆陆续续走了,后来联系也没那么多,但是还是挺值的回忆的。
我离职的出发点是累了,这里也确实不是一个能干到老的地方,就想出去走走,趁着节日去旅游旅游。
关于空调
空调系统说白了就是制冷剂的汽化吸热,液化放热,将室内的热量带出去。
图1:普通式汽车空调系统结构
图1是一个单冷的汽车空调工作系统图:进入压缩机的是低温低压的气体,经过压缩机1后变成高温高压的气体,然后通过冷凝网2,通过冷凝风机将外部空气吹过冷凝网,变成高温高压的液体(放热),再经过干燥瓶3,和膨胀阀4进入蒸发网5,再经过蒸发网之后变成(气体)吸热,经过蒸发风机吹进室内就是凉风了,最后低温低压的气体再进入压缩机进行循环。
一些器件的作用
压缩机:将低温低压的气体加压成高温高压的气体,也是制冷系统的动力核心。
冷凝器:主要作用为冷媒降温降压。分为冷凝网和冷凝风机。
干燥瓶:主要作用为储存制冷剂、过滤杂质和干燥环境。
膨胀阀:将液体变成雾状气体。
蒸发箱:将制冷剂由液态变成气态,高温高压雾态制冷剂大量吸收周围的热量后变成低温低压的气体。
四通阀:将制冷剂流向进行切换。由于压缩机只能从一个方向吸气,加压后从另一端排除,所以需要四通阀改变制冷剂流向,从而进行热泵制热。
电磁阀:利用两次温度变化改变
电磁阀:开断式控制制冷剂通断的装置。
热力膨胀阀:利用两测温度变化,改变制冷器流量,从而控制冷量。
电子膨胀阀:多段式制冷剂流量控制装置,还起着重要的泄压作用。
板式换热器:具有一定波纹形状的金属片叠装的热交换装置。换热效率极高。
水箱:电池的冷却液存放的水箱。
水泵:提供电池冷却液循环的动力装置。
空气PTC:加热丝加热,通过风扇吹入空气中加热。
水PTC:加热,水循环带走热量。
上述还说了一些这个系统中没有的。其实现在的空调功能已经变得更加齐全,包括加热,给新能源电池降温、升温等大功能。各种期间中有些是纯机械控制的,例如蒸发箱,热力阀。只有那些能通过电控的才需要我们控制,例如压缩机,电子膨胀阀等。
空调不同工况
图2:带电池液冷的汽车冷暖空调系统图
空调工作模式包含:制冷、制热、通风、自动模式(其实也是根据自动模式的控制逻辑进行三种模式的区分)。
电池工作模式:制冷、制热、自循环(就是只水泵工作,有时在电池中,冷却液流动不及时,电池某系地方温度高,某些地方温度低,水泵带动冷却液循环后即可解决)。
如图2所示:
单独空调(驾驶室)制冷:空调制冷流程如虚线上方黑线所示,流程跟图1一致,四通阀关闭,制冷剂走黑色线路,膨胀阀(电子膨胀阀)A打开,膨胀阀B关闭,虚线以下都不工作;
单独空调(驾驶室)制热:四通阀打开,制冷剂走红色线路(相当于将制冷时的室外机搬进室内,室内机放到室外),膨胀阀(电子膨胀阀)A打开,膨胀阀B关闭,虚线以下都不工作;
单独电池制冷:空调制冷流程如虚线上方黑线所示,流程跟图1一致,四通阀关闭,制冷剂走黑色线路,膨胀阀(电子膨胀阀)A关闭,膨胀阀B打开,水泵工作;
单独电池制热:绝大多数都不会用热泵制热去给电池加热,一般采用水暖PTC的方式,此种工况下水暖PTC工作,水泵打开,膨胀阀B是关闭的;
还有其他多种组合工况,膨胀阀A和膨胀阀B进行相关冷量分配和调节。
空调故障及特殊工况
空调在正常情况下工作,遇到一些元件或者温度异常等特殊情况需要停止空调工作。
高压(电压)异常、低压(电压)异常要停止所有器件工作;
风机异常、压力异常、重要温度传感器异常要停止制冷或制热;
水泵异常、水位异常要停止水冷工作;
其他异常根据优先级酌情判断;
关于电池板换工作
电池板换无论工作在哪种模式(待机除外)都要求空调系统上高压、水泵工作。板换有个不好区分的点就是出水温度,板换会发目标温度过来,我们指的温度点是机组到板换的温度(机组出水温度),另一侧就是板换到机组的温度(机组进水温度)。
工程车空调
工程车制冷流程大致还是那样,区别就是压缩机。燃油车压缩机是发动机带动的,所以压缩机工作的时候需要有怠速提升信号,电车压缩机是电池高压带动的,就不需要这个信号。在制热方便区别较大,一般工程车不采用热泵加热(我理解的是热泵效率和耗电方面都好于ptc,但是在不同工况下差别较大,例如极端冷或者热,但是ptc就会稳定很多,一般工程车的工况都比较不怎么理想,ptc的制热速度也比较快),工程车一般采用PTC制热或者发动机热水的热带过来(所以在燃油车中,用发动机的热作为热源的话就没什么额外的电耗)。
关于空调高压
目前新能源的流程态势,使得绝大多数都采用整车高压供电驱动压缩机等器件工作,高压作为整个系统的动力来源,所以上下高压流程也就非常重要。
上下高压的底层逻辑就是按照顺序上电,避免所有器件同时上电或者下电瞬间电流过大,造成接触器黏连或者烧毁。 比如空调所有负载都断开的情况下上高压,然后再依次打开蒸发风机->冷凝风机->压缩机等。
压缩机预充电
由于现在电动压缩机两端不能瞬间直接加载目标高压(一般500多V),所以需要一个缓冲及压缩机预充电路。
图3一种高压预充电路。
感谢知乎大佬的图。大家可以将逆变器想成压缩机高压。原理是一样的。
上高压
AIR继电器是常闭,这里我们不考虑他。上高压时,左侧电源给电高压,首先预充电继电器闭合,预充电阻开始充电,几秒之后闭合AIR+(主继电器),即可完成高压预充上电。有的系统中还会在主继电器那里放一个继电器检测,当请求主继电器吸合之前(继电器是断开状态),去检测继电器是不是断开的。如果继电器是闭合的那就可能是继电器黏连了。还要注意的就是上高压之后,其他器件开始工作的间隔时间,不能间隔太短,也不能让一些功率大的器件瞬间最大功率工作,要软起动,可以避免一些器件损毁,典型的就是蒸发冷凝风机的启动。
下高压
下高压时要先关闭所有负载(包括压缩机转速清零),之后断开主接触器,同理也不可间隔时间太短,同时打开放电继电器,几秒之后断开放电接触器。在放电期间不可闭合预充接触器以及主继电器,否则可能造成高压短路。 有些厂家会要求在几秒内完成下高压动作(为了配合整车断电),可缩短负载关闭时间,及迅速关闭所有负载,但是还是要在关闭负载和断开主接触器之间做一些时差,否则还是会造成接触器黏连。
关于单片机
主要使用的还是GD芯片和芯旺微-KungFu芯片。国产GD芯片已经跟ST芯片很接近了,使用起来也比较方便。
STM32这类程序,还是得在实践中学习、成长,只有不停的试,遇到问题才能成为大佬。每一行代码都要自己亲自去敲,不要怕错,就怕不练。从底层搭建,到应用层逻辑。
从单片机学习单片机来说,芯片功能,寄存器,IDE的设置等都要掌握,至少要了解。
从项目开发的角度来说,从前期的需求,到板子原理图,看单片机手册、芯片手册,写底层,调试板子,看PCB,然后写逻辑,调试功能,虽然我是软件工程师,但是我感觉一些必要的硬件基础还是要掌握的,这样对调试板子,分析问题更加方便快捷。
关于CAN
目前汽车模块之间的主流通讯采用CAN通信。CAN网络的特点、优势什么的百度一大堆就不说了。
由于CAN网络的优点,使得汽车电气化更方便,不同模块通过搭载到不同CAN总线上即可进行通信,模块与模块之间关联
图4一种汽车网络CAN总线。
感谢知乎大佬的图。不同模块之间通过CAN总线进行通信。汽车上有许多CAN总线,不同设备搭载到相关总线上进行通讯。同一总线上的波特率是相同且唯一的。总线一般只有两个终端电阻,各120欧,总线电阻为60欧,当总线终端电阻过多或者过少会影响通信。
报文、协议
CAN模块之间通信的媒介叫做报文,不同厂家之间都有各自的协议。
图5完整的CAN报文协议
读协议(一般协议都这样,或许还有其他的表达方式,不过大差不差):
报文标识符就是报文ID,一般我们采用两种,一种是扩展帧,就是报文ID长八位,另一种是标准帧,报文ID长3位。
参数组编号,就是根据报文ID算出来的PGN值,也可以说报文ID就是根据PGN及其他算出来的。
报文类型包含报文发送类型有周期型Cycle、事件型Event、周期事件型CycleEvent(简称CE)、激活型IfActive周期型Cycle最简单,就是按照固定周期循环发送的报文。事件型Event平时不发送,当事件发生的时候才发送一段时间后停发。周期事件型CE就有点复杂了,他有两个周期,快发周期和慢发周期,平时按照慢发周期(譬如100ms),事件发生的时候按照快发周期(譬如20ms)发一段时间后切换回慢发周期。激活型IfActive平时不发送,状态激活的时候才发送。
报文周期就是两帧报文间隔时间。
报文长度就是数据的长度。
排列格式包含Intel、Motorola MSB、Motorola LSB,Intel是高位在后,Motorola 是高位在前,MSB和LSB的区别是从当前字节往前算(LSB)和往后算(MSB)(注意都是高在前,比如信号起始位:byte1的bit4,信号长度:12bit,LSB就是bit12到bit0,MSB就是bit12到bit23)。
报文数据:物理值=(理论值*分辨率)+偏移量。
CAN程序
配置好波特率,即CAN主频/CAN分频/(1+BS1+BS2)=CAN波特率。
其他就是CAN报文的接收和发送。
CAN接收:
CAN过滤器模式,分列表模式和掩码模式:列表模式就是接收的报文ID,掩码模式就是屏蔽的报文ID(规定某些位必须保持一致,某些位不必在意,过滤符合的ID)。过滤器是数据链路层面的即物理层,报文不符合过滤器连程序中断都不会触发。
CANID类型,标准帧还是扩展帧等。
CAN接收校验,一般校验数据ID、长度、及帧类型。
CAN通讯故障时,要给那些can接收值的变量赋相关的无效值。
CAN接收之后就立即通过中断处理了,因为CAN是带数据的,如果处理中间,再来另外的数据的话,接收数组就会被替换,一般系统中没做数据加密的话要将CAN优先级设定的相同。
CAN发送
CANID类型,标准帧还是扩展帧等。
CAN报文类型,周期型还是事件型。
CAN发送FIFO一瞬间只能发送一帧,将多帧按顺序加入发送邮箱中。
直接通过系统的CAN发送函数发送CAN报文,如果一瞬间往FIFO里塞的数据过多的话可能会造成数据的丢失,所以最后是采用缓冲区,等待FIFO里能再存下报文再继续往里边塞。
关于不起眼的变更记录及代码规范
刚去公司的时候不懂,吃了大亏。工作一段时间后发现越干越累,一点点事儿就忙的。没有变更记录或者变更记录写的不详细,等到下次要改或者去查改了什么就非常麻烦,以至于最后自己都不知道代码的最终版本是哪个了。代码不规范的话,过一段时间,自己都看不懂,要改需求自己都得花大量的时间去屡清楚。后来请教了公司大佬,慢慢梳理清楚了,后来就不会手忙脚乱的扒拉记录了。
图6变更记录表
我是如图六记录的,不同的项目不同的记录法。找到适合自己的就行,不要弄乱。
关于心态
做好自己的事情。不卑不亢。
关于未来
还是喜欢单片机这个行业,也会继续从事这个行业,但是也听不少人说软件就是一碗青春饭,继续发光发热吧。
@侵权立删
–Shiboven