针对裸机与实时操作系统的对比讨论已经很多,而搞电力电子的小伙伴可能不是很熟,所以这里针对电源开发应用再单独讨论讨论。对于一些简单的电源应用,往往只需要一个while大循环再加上中断就能完成。但是随着产品的不断升级和功能复杂化,一个这种“传统”的开发裸机已经逐渐变得愈发臃肿,往往我们会遇到的主要难点是,开发速度非常慢!非常慢!非常慢!其中的原因我想可以展开为以下几点:一是学习曲线非常陡峭。TI的硬件封装api做得并不好,这就导致C2000平台上出现大部分用户写代码都是直接操作寄存器的奇观,虽说直接操作寄存器显得很高级,代码效率也会比较高,但是代价就是开发速度相当慢。每次做不同的实验的时候都需要重新阅读datasheet,查看每一个寄存器配置成什么值代表什么意思,等到写好了再调试又会花非常多的时间,据我所知,由于C2000架构的相对复杂性,仅仅是一个中断的配置都能难倒不少人。stm32的封装就做的很好,官方的HAL用起来用户省心了不少,那么问题来了,TI什么时候能争点气呢?二是重复造轮子的情况非常普遍。不同人对于不同功能都有自己的函数实现,导致所有人的代码互相不兼容,各自为阵。以我自己为例,我以前的开发流程是先配置寄存器,也就是导入一个看起来跟自己实现功能差不多的官方例程。每加一个新功能就导入一个例程,然后ctrl c ctrl v。寄存器配置完毕之后写应用层函数,比如说为了实现串口控制,会写串口字符的解析函数。我记得,串口的解析程序和发送程序我都写了好多遍,个中酸爽,相信大家都有所体会。三是可维护性是一个很大的问题。一般电力电子系统会对于环路计算的实时性要求非常高,所以会放在中断中计算,然后其他任务放在大while中放一个状态机判断。一旦任务多了,任务之间的依赖错综复杂。此时在while大循环中就出现非常复杂的状态机系统,此时系统的可维护性将会变得非常差,出现大家常说的屎山代码,相信包括在我在内的任何人都不愿意看别人写的状态机代码。而且这么复杂的状态机系统如果不经过良好的时序优化,系统的实时性其实也会变得非常糟糕。四是内存安全得不到有力保障。任何一个处理多个任务的系统都涉及不同任务对共享内存的访问,电力电子控制也不例外。比如有些状态机可能被主循环和ISR同时读写,就可能产生所谓“竞争”的问题。比如主循环正将状态从A修改到B,这时ISR打断主函数并将状态从A修改到C并返回,然后主循环开始执行状态B对应的代码可是此时真正的状态已经是C了,最终导致状态机崩溃。这种问题特别难以调试,一旦出问题就很严重,遇到了可能只能烧香拜佛了。同步和竞争的概念可能对很多电力电子的小伙伴比较陌生,感兴趣的同学可以参见:
RT-Thread诞生于2006年,是一款以开源、中立、社区化发展起来的物联网操作系统。RT-Thread主要采用 C 语言编写,浅显易懂,且具有方便移植的特性(可快速移植到多种主流 MCU 及模组芯片上)。RT-Thread把面向对象的设计方法应用到实时系统设计中,使得代码风格优雅、架构清晰、系统模块化并且可裁剪性非常好。目前已经做到通过wrapper兼容freertos和uC/OS,提供posix接口,同时兼容Arduino。在内核层面提供各种hook方便用户定制。总之就是傻瓜操作,兼容并包,而且是中国创造。基于此我们选择了基于RT-thread进行开发适配于C2000的RTOS。
目前已实现的效果
兼容控制台使用命令行控制
通过串口,我们可以实现类似命令行的工具,可以非常方便监控系统状态并且操纵外设,启动任务
比如输入如下指令就可以设置pwm占空比、相位、死区等等
pwm probe <device name>- probe pwm by name pwm enable <channel>- enable pwm channel pwm disable <channel>- disable pwm channel pwm get <channel>- get pwm channel info pwm set <channel><period><pulse>- set pwm channel info pwm phase <channel><phase>- set pwm phase pwm dead_time <channel><dead_time>- set pwm dead time
一、SAE J1939协议概述SAE J1939协议是由美国汽车工程师协会(SAE,Society of Automotive Engineers)定义的一种用于重型车辆和工业设备中的通信协议,主要应用于车辆和设备之间的实时数据交换。J1939基于CAN(Controller Area Network)总线技术,使用29bit的扩展标识符和扩展数据帧,CAN通信速率为250Kbps,用于车载电子控制单元(ECU)之间的通信和控制。小北同学在之前也对J1939协议做过扫盲科普【科普系列】SAE J