陈葆群-嵌入式开发与仪器仪表题
分享人: 61521516 陈葆群 23 年 B 题一等奖
电赛会用到的单片机主要还是在 STM32 和 TI MSP 里面选。
STM32 建议选用 STM32F407ZGT6 以上,可以尝试使用 STM32H723/743,H7 系列性能可以追一追一些 FPGA。F4 已经是十多年前的产品了,性能靠谱,不太建议使用更老的 F1 系列。STM32 我们这边是自己选购板子,使用 STM32CubeMX+Keilv5 进行开发调试。TI 单片机可以只用 MSPM0,CCS 配套的 Diverlib+Syscfg 可以非常轻松的开发,有时候比 STM32 上用 CubeMX+Keil 还要舒服,因为 TI 给的例程是图形化界面+代码+学习资料都配齐的,图形化界面更加贴近模拟电路方面的应用,许多用法看着确实让人眼前一亮。
抛开具体使用的单片机不谈,偏硬件方面比较基础的,应当是对一些底层概念有一些抽 象的认知。先打好一些对数电、模电、计组的基础,哪怕是科普性的都行(逝去的三合一课程在这边还是蛮管用的),后续可以举一反三。
先看代码,代码究竟是怎么跑的?跑一片代码的时间量级大概是微秒级还是毫秒级的? 数据的更新处理只能靠 CPU 吗?再来看看外设,以 GPIO 为例,什么时候是输入,什么时候是输出?显然有寄存器指向这个吧,搓模拟 I2C,涉及输入输出转换时会用到;处于输出模式时,怎么拉高拉低电平,显然也得有寄存器指向这个吧,同样的,厂商应当有配套的库函数;开漏输出和推挽输出有什么区别,上拉下拉电阻怎么加,开漏输出肯定加上拉电阻等等。 以 Timer 为例,显然应用时会考虑何时开始计数?计数是上升还是下降,溢出了怎么处理? 更加复杂一点的是,输入捕获又得怎么用?万一输入捕获的不是个比较好的方波,而是更加一般的模拟信号,比如正弦波,那这个正弦波该怎么处理才能使捕获正常?
这些内容,虽然纷繁冗杂,但是抓好一些基础课程的学习,相信还是能迎刃而解的。偏嵌入式软件开发方面,在整体框架上相当重要的仍然也是一些课内知识,尤其是状态机,应当让一个状态机(任务)在这个仪器仪表代码工程文件中占统治地位。还会用到的,应当是一些数据分析处理相关的,在数值分析/计算方法课程中会学到;有时还会用到一些频域知识,可能会做fft,那么信号与系统相关知识就少不了了,如果是用stm32,这个时候可以去调用 arm dsp 库。
总之课内知识好好学,如果是大二结束的那个暑假参加电赛,这个时间节点应当很多库 内知识都是非常非常管用的。
再回到电赛嵌入式系统开发,仪器仪表方面。从培训到参赛,随时间推移,手头上的资源是越积越多的,重要的战略目标是开发出能够对接各种题目(各种业务)的通用软件框架。 测控电路因题而异,但人机交互、工程框架这些更加偏底层内容的应当准备好,单片机选型那也是基本固定了。中后期应当能方便拿出一个业务逻辑缺省但其它资源基本齐全,如配套的串口屏驱动(建议 ILI9341,320*240,2.4 寸以上屏幕)以及 ui 相关库函数(如写浮点数)、字库等+矩阵键盘运行逻辑,如按键扫描,取数等等功能备齐的工程文件。嵌入式实时操作系统 FreeRTOS 这个中间件该不该学?可以不学,电赛仪器仪表题需要开发的嵌入式系统不够复杂,不会像机器人一样有一堆电机需要协调,但是会用的绝对是感觉真香,别人不用操作系统在这里头疼那里头疼的时候,你就自己一边乐去吧。为什么这边不提中断相关的,因为基本不用。FreeRTOS 在机器人社团属于电控组新人培训后期得掌握的内容。
单片机外设虽然看着蛮多的,但这个不用慌。虽然看着多,但是用到的两个巴掌还是数 的过来的,而且很多用法是固定的,电赛培训一个月时间内应当能基本掌握。
SPI:使用 SPI 驱动的外设有 SPI 屏(如 ILI9341 320*240 串口屏)、DDS 模块(如 AD9910)、 PLL 模块(如 ADF4351),通常只用到发送数据,即单片机 MOSI(TI 单片机中是 PICO),有写数据写命令通过 DC 引脚分开的应用。
I2C:这部分外设比较少,仪器仪表题一般碰不到 I2C 外设,或者直接有用 SPI 替代的, 如果需要用建议使用软件模拟 I2C,定时器尝试一下微秒级延时,STM32 的硬件 I2C 可能不太好用。这部分关键仍然是商家示例代码移植,如果是 STM32,需要将底层硬件接口对应上,一些操作该换库函数的换库函数,不该用的延时,如用 systick 做的延时可能造成一些冲突导致代码阻塞在一些地方,就需要自己改成定时器或者软件自减凑合。
DMA:通常搬的是 ADC 数据,别的数据没碰见需要搬的。
FSMC:外扩 SRAM 或者接并口屏,用了之后即使是有一百多根引脚的 F407 也难找出个比较舒服的位置插矩阵键盘排线了,所以不要用。
ADC:测控电路的关键,ADC 不转换出来怎么处理数据?但不要太怀疑 ADC 转换不准, 情况不太对很可能是外围电路造成的,调试时建议 ADC 引脚接示波器。很多时候用的都是单次转换,大可不必想连续转换这里好那里好之类的,果断点,用单次转换!可能用到时钟源触发多通道 ADC+DMA 转换,一次采样几千个数据,这已经是比较终极的应用了,搓示波器并对波形进行频率分析时就这么用。STM32H7 系列的 ADC 比较高级,没有用过。TI MSPM0 的 ADC 也有好多花里胡哨的功能,什么硬件平均之类的确实挺帅的。
TIM:定时器,好像可以想方设法偷懒不去用,但这不能成为短板,不然亏大了。有定 时,计数,产生 PWM 波,做 ADC 触发源,做 RTOS 时钟,输入捕获等等应用。STM32 里面定时器涉及的寄存器比较多,好多都有点重复,这边不要怀疑是自己的问题,大胆用。
GPIO:内容清晰,效果深刻。哪天要是对库函数感觉腻了,想玩玩寄存器相关的,也可以从 GPIO 开始。相关内容开头已经提了,这边不再重复了。
其它外设,要么意义不大,如看门狗,你就在你作品旁边,不能自己伸手按 RESET 吗? 国测验收老师都让按哈哈;要么是我这边也不太用,比如 UART,USB 这些做仪器仪表题真没见有用,做无人机的倒是用得比较火。如果要做单片机和 FPGA 通信,不建议用 UART 因为我们这边确实撞了南墙,当然这是不是 UART 的锅得另说。在 FPGA 上模拟 UART 接收可能难以调试,可能电子专业方向大三学电子系统设计相关课程才会更加熟悉,电赛那会儿碰见这个确实只能认栽。至于 CAN,当然 STM32H7 用的是新标准 FD-CAN,CAN 通信有点意思, 但只有用到比较高级的电机的时候才会用上,属于控制题需要考虑的,仪器仪表题就不用管了哈哈,当然这也是机器人社团新人培训里面特别基础的内容。
受限于时间精力,篇幅也有限,虽然码是码了 2.5k 字了,但好多事情这边还是一下子讲不清楚。要是此文真的帮的上忙,那还是挺不错的。个人感觉讲的其实真没啥,建议来机 器人社团电控组学习一下,就知道这个"没啥"是什么分量了。当然,真要是碰见问题,欢迎直接打扰我(QQ 2782371474)。我们组电赛碰见问题,也是大胆半夜一点钟去打扰老师的,最终收获了一些雪中送炭般的支持。
陈葆群
2023.10.6