【平衡小车专栏】 4个月后,再做一辆平衡小车

发布时间 2023-07-06 18:44:19作者: FBshark

今年3月做了一次平衡小车,不过是用面包板做的。写程序是用标准库写的,程序结构是前后台。

今年7月又做了一辆平衡小车,自己在jlc花电路板,设计结构。写程序是 HAL+CubeMX生成,程序是 FreeRTOS。

首先,电路板比面包板走线没那么乱了,以前用面包板走线,好几次走错吧,烧了两块芯片。

同时,也负载了更多的外设:另加了按键、蓝牙串口、OLED显示屏等等。这些便于动态调参(原来面包板上每次调参都是重新编译然后重新下载,比较麻烦)

(OLED显示屏没利用上,有机会买上,把PID参数显示上去)

 

程序原来是用标准库写的,现在用 CubeMX + HAL 不得不说方便很多。但是 HAL 库也有缺点,比如它的中断相关处理不如标准库简洁干练。

 也用到了 FreeRTOS,原来是用前后台架构的(利用MPU6050 的 INT 引脚的性质,产生数据就会触发 EXTI 中断,在中断中完成数据采集、控制的相关工作)

说说用了 FreeRTOS 的好处:

① 从逻辑结构上来讲,使用 FreeRTOS 比不使用逻辑上更加清晰了(原来在 EXTI 中断中处理数据,如果一个人不知道 MPU6050 这个引脚功能的话,可能就读不懂程序)

② 从需求匹配来说,使用FreeRTOS照顾到了不同环节(数据采集、数据处理、数据显示)的不同频率的需求。

原来不使用 FreeRTOS 的时候,数据处理必须在数据采集之后,而且因为同处于中断处理函数之中,两个任务频率相同。使用 FreeRTOS 当数据发生突变后,较高频率的数据采集能够提供更加准确的数据。

③ 另外,原来的前台是显示数据,里面用的是软件延时(死循环),一旦进入,就不能出去。而现在使用的是 OS_Delay() 的阻塞式延时,当前任务可以主动释放 CPU 资源,给其他的任务使用。

而且还有一点,系统会在空闲时候执行空闲任务(可以学学 STM32 的电源管理, 做一个省电的功能)。