【电赛】电赛控制题焚诀【待更新】(天津省一,邀请赛国三)(PS:山海机甲纳新ing)
本帖旨在分享一些电赛的实用技巧以及临场经验,帮助大家应对明年的电赛国赛以及其他的控制类比赛,由于是第一次撰写相关内容,如有错误烦请见谅。
我们的队伍成员分配为两男一女,均来自24级电气专业,其中女生负责整车结构以及一些琐碎事务,另一位男生负责撰写设计报告,笔者则负责所有的电控,硬件,视觉(累死我了),四天一共睡了六个小时。最终测试时仅第二问扣了三分,其余五问均满分。(其实在学校测的是全满分)作品使用stm32f407ZGT6,168Mhz的主频足以应付电赛需求,底盘使用轮趣mg513x直流减速电机,视觉部分使用maixcam pro,平衡结构部分采用达妙dm4310电机(喵老板牛逼),使用一块降压模块和一块rm中心版完成整车核心电气连接。
笔者是山海机甲电控出身,硬件和视觉水平都比较半吊子,所以本文主要介绍电控(软件)部分。整体的程序架构采用:hal库->BSP层->Module层->App层,四层解耦合,保证程序的可读性和稳定性,没有引入free rtos和thread rtos,因为电赛赛题的要求使用裸机定时器架构就足以应对。下面分别介绍各层思路:
BSP层,即Board Support Package,板件支持层,本层旨在将板上资源封装为随时可调用的函数,如uart,IIC,GPIO,SPI等,通过在cubemx中的图形化配置和调用hal库函数,将外设封装为可供上层直接调用的函数,如串口的发送,接收等。环形缓冲区,双缓冲区等均在本层完成,实现各个外设的高内聚,低耦合,避免屎山代码的形成,以及后期修改时的外设配置冲突等问题,bsp层是整套程序的基础,bsp层写好,能免去很多很多麻烦。
Module层,即模块层,本层主要写作品中使用到的各种模块元件,如:OLED屏幕,电机,视觉等,模块层主要通过调用bsp层函数和hal库进行活动,如0.96寸的OLED主要调用bsp层的bsp_IIC,视觉模块则主要调用bsp_uart,诸如此类不再赘述,模块层总体的思路和bsp层一致,依然是通过调用底层来做到更高一层的抽象,从而将模块封装为各自独立,互不影响的可供上层调用的函数,如电机转动,oled显示等,这里不多赘述。
Application层,即应用层,这一层是面向人类的,可读性最强的一层,一部分没学过c语言的同学,通过注释也能大概读懂这一层的代码,因为这一层写的都是面向任务的实际逻辑,如chassis(底盘),gimbal(云台),vision(视觉)等。app层主要调用模块层函数,通过各个模块的组合逻辑来完成现实任务,比赛时主要写的也是这一层,bsp层和模块层都应当在备赛时完成。
笔者写本文是临时起意,所以本次仅写了最核心的代码总体思路部分,具体细节待以后更新,或者也可以直接问我。希望对大家能有所帮助。最后打一波广告:河北工业大学山海机甲战队正在纳新,欢迎各位大一大二同学加入。“成为工程师,从踏入赛场那一刻开始!”
