基于STM32的雷达原理实验箱设计

2022-09-27

雷达原理课程涉及到微波、通信原理、自动控制原理、信号处理等多门学科知识, 要求学员有扎实的基础知识和较强的综合能力。针对于飞行学员侧重于飞行训练, 专业基础课较为薄弱, 我们设计了这款实验箱, 其目的就是使学员可以快速、直观的建立起基本概念, 辅助雷达原理的课程教学。我们在建设实验室之初考察了市场上的相关产品, 发现由于专业面很窄, 雷达原理实验套件在市场上难觅踪影, 而购买实际的雷达装备价格又过于昂贵, 于是根据我们教研室多年的雷达教学经验, 在大学实验室建设经费的支持下, 自主研制了这套实验设备。

ST M3 2系列处理器是意法半导体于20 08年开始推出的基于A RM-C or t e xM3内核的处理器, 具有功耗低, 价格低, 外设资源丰富的特点。意法半导体提供了完整的Firmware源码支持, 方便了对外设的访问。尤其是增强型E系列的产品, 增加了F S M C, D A C等外设, 高达5 1 2 K B的片内Flash及64KB的片内SRAM, 可以很容易的移植上μCOSⅡ实时操作系统及μCGUI嵌入式图形系统, 使软件开发工作更加灵活、高效。

1 STM32的主要优势

1.1 具业界领先架构的Cortex-M3内核

采用了哈佛总线结构, 高效率1.2 5 D MI P S/MH z和低功耗0.1 9 m W/M H z, Thumb-2指令集以16位的代码密度带来了32位的性能, 单周期乘法指令和硬件除法指令, 内置了快速的中断控制器, 使得中断间的延迟时间降低到只需6个CPU周期, 从低功耗模式唤醒的时间只需要6个CPU周期。与ARM7TDMI相比运行速度最多可快35%且代码最多可节省45%。

1.2 出众的功率效率

当代码从Flash中以72MHz全速运行时, 外设时钟开启时STM32仅消耗27mA电流, 待机模式下, 典型的耗电值仅为2uA。2.0V~3.6V的供电电压范围, 适合电池供电的应用。

1.3 内部高度集成

内嵌电源监控器, 包括了上电复位、低电压检测、掉电检测、自带时钟的看门狗定时器, 内置RC振荡器可作为主时钟源, LQPF100封装芯片的最小系统只需要7个外部无源器件 (滤波电容) 。

1.4 创新而出众的外设

在芯片内部集成了USB, I2C, SPI, G P I O, U S A R T, P W M, A D C, D A C, D M A, T I M E R, R T C, B K P (备份寄存器) , C A N, FSMC等丰富外设, 大大简化了系统硬件电路设计。

1.5 提供了完备的固件库和丰富的例程

固件库用于访问各种外设, 虽然稍微牺牲了一些性能, 但有效提高了软件开发速度, 通过参考固件库里附带的分类例程, 可迅速对外设性能进行评估, 开发效率极高。

2 实验箱功能及组成

实验箱需要模拟产生雷达发射机的调制脉冲, 能够产生接收机的视频脉冲并能调整脉宽, 占空比等参数。能产生在自动增益控制/STC增益控制/手动增益控制三种增益控制模式下的视频脉冲信号, 使学员能够直观了解各种增益控制电路的不同作用和原理。考虑到STM32系列的处理器片内外设丰富, 并且可通过串口实现在系统编程 (ISP) , 使得后续的功能扩展十分, 软件升级都十分的方便。

系统硬件组成如图1所示, STM32为核心处理单元, ADC用于采集两个电位器输出的模拟电压值, FSMC接口用于驱动3.2英寸的液晶屏, 触摸屏通过专用芯片将电压值量化后通过SPI接口和STM32通信。DAC输出波形经运算放大器驱动后输出到面板上, MAX3232用于扩展出3线制串口, 用于烧写程序以及与上位机通信。GPIO用于采集开关量输入状态, 接下来介绍各项具体功能需求。

2.1 自动增益模式

在自动增益模式, 由于输入信号的幅度不稳定, 而为了使输出信号幅度保持稳定, 接收机增益会不断调整, 这样的结果是输出信号的幅度一定, 但噪声幅度会一直在变化。在这种模式下, 需要通过DAC产生脉冲和噪声相叠加的信号, 并且噪声的幅度还会随机变化。

2.2 近程增益控制模式 (S T C)

近程增益控制电路又称“时间增益控制电路”或“灵敏度时间控制 (STC) 电路”, 它用来防止近程杂波干扰所引起的中频放大器过载。在STC模式下, 接收机的增益随目标距离的变化而变化, 对于距离近的目标, 增益较小, 而对于距离远的目标, 接收机增益加大, 其增益随目标距离变化的曲线如图2所示。因此, 当发射机天线在作扫描时, 如果扫描到不同距离的目标, 接收机输出的视频信号是一系列幅度不等的脉冲, 每个脉冲对应于一个点目标, 距离越近, 增益越小, 距离越远, 增益越大, 距离超过一定范围后, 增益为一恒定值, 因此当接收机接收到的脉冲为等幅脉冲时, 其输出脉冲幅度与时间的关系如图3所示, 时间轴的零点为发射脉冲的时刻。

STC增益控制曲线是可以调节的, 面板上的STC调节电位器可以产生不同的STC增益控制曲线, 如图4所示。

2.3 手动增益模式

在手动增益模式下, 输出信号的幅度取决于手动增益调节电位器的设置。实际雷达的手动增益调节范围很宽, 但作为教学使用调节范围在20dB就足够了。在这种模式下, STM32需要采集增益控制电位器的值, 然后根据这个值输出相应幅度的脉冲信号。

2.4 脉冲参数调节

这项功能是为了使学员能直观观察到不同参数的脉冲信号, 通过两个电位器调整输出脉冲的脉冲宽度和脉冲周期参数。STM32根据两个电位器的电压值改变输出信号的脉冲宽度及脉冲周期。

2.5 人机交互控制

为了便于学员实验操作, 还需要在液晶屏上显示实验项目列表, 在进行各项实验时要在液晶屏上提示操作步骤、实验原理及实验结果, 使学员实验时无需参考实验指导书也能正常操作。

3 关键技术的实现

前面介绍了硬件组成和功能需求, 由于硬件已经高度集成化, 设计工作量不大, 主要工作量集中在软件开发上。这里我们选用了KEIL公司的MDK3.8集成开发环境, 采用C语言编程, 添加了ST公司提供的Firmware库, 移植了μCGUI和μCOSⅡ, 再此基础上开发了应用程序, 下文对其中的关键技术做了详细介绍。

3.1 μCGUI和μCOSⅡ的移植

对于简单的实时系统, 不需要操作系统支持, 但我们设计的实验箱既要驱动液晶屏, 在上面显示复杂的文本, 图片, 同时还要采集触摸屏的位置, 电位器的电压及一些开关量, 并通过DAC输出各种信号, 控制关系比较复杂, 为了简化编程, 我们在STM32上移植了μCOSⅡ实时操作系统以及μCGUI图形系统。这两个系统都是针对于嵌入式系统设计的, 在可移植方面做了很多的考虑, μCOSⅡ源码中目录Ports下的文件包含了所有和硬件平台相关文件, 包括os_cpu_c.c, os_cpu.h, os_cpu_a.asm, 除此之外, 还要在STM32的中断向量表中添加OSPendSV中断服务, 中断向量表通常定义在stm32f10x_startup.s文件中。因此为了实现μCOSⅡ的移植, 这4个文件必须做相应的修改。

μCGUI的移植关键在LCD驱动部分和触摸屏的位置采集, 意法半导体的官方网站提供了完整的参考设计, 通过对参考设计的研究, 我们发现在GUI_X_Touch.c文件定义了触摸屏事件的处理, 在LCDDriver目录里定义了液晶屏驱动的底层操作。μCGUI调用了以下重要函数来实现对屏幕的操作。

只要这三个函数正确实现, μCGUI就可以正确地在屏幕上显示文本和图像, 具体实现需要根据LCD屏的硬件参数, 我们采用的液晶屏为3.2寸的320*240分辨率, 控制芯片为ILI9320。这个液晶屏为16位的并行总线接口, 共两个端口, 一个是控制端口, 一个是数据端口, 为了提高访问速度, 我们利用了STM32的FSMC接口, STM32只有增强型系列才有DAC, FSMC外设, 在器件选型时应注意这一点。图5是STM32的FSMC控制器IO与LCD控制器的连接示意图。FSMC接口的数据线为16位, 连接到LCD的16位数据总线, LCD的地址线只有一个, 这里为了编程方便, 使用了FSMC的A1地址, 实际上可以用任意一根地址线 (A0除外) 。对于某些封装的STM32, 例如V系列是100脚封装的, 没有A1地址线, 完全可以用其它地址线代替。RD和WR分别为读、写信号, NE4为FSMC其中的一个片选信号, , 其对应的基地址为0x6C000000, 更详细的地址分配请参见STM32数据手册。

为了更好的理解μCGUI对液晶屏的操作过程, 我们对程序进行了跟踪和分析, 得到如图6所示的调用层次关系, 按照这个原理, 我们已经成功移植了不同驱动芯片的液晶屏。

最顶层是我们在程序中可以直接调用的函数, 比如显示文本, 绘图等操作, 这些操作最终归结为在指定位置画点和读取指定位置的像素点操作, 为了完成画点, 通常又要分解为两步, 首先是设置光标或者时设定显示区域, 然后再写数据, 读指定位置的像素也需要分两步进行, 这些操作都可归结为对显存的访问。对显存的访问最终依靠对两个端口的读写操作, 因此, μCGUI液晶屏驱动移植的关键点就在于最底下两层, 这部分代码只要正确无误, μCGUI的移植就是成功的。

3.2 利用Timer中断事件触发DMA读取ADC

STM32的外设既能产生中断, 也能产生事件。在中断打开时, 中断会使CPU的执行路径发生改变, 像读取ADC这样的简单任务如果每次也要CPU去读, 显然浪费了CPU资源, 尤其是在通道数比较多的情况。STM32可以利用DMA搬运数据, 而DMA又可以通过事件来触发驱动, CPU对Timer, DMA, ADC初始化完毕后, DMA就会自动地将ADC的转换结果搬运到指定的内存, CPU要想获得ADC的转换结果, 只需访问对应的内存变量即可, 通过这种方式有效提高了CPU的执行效率, 同时也简化了编程。

3.3 利用Timer、DMA和DAC产生叠加有噪声的脉冲信号

S T M 3 2有两个D M A控制器, 其中DMA1上有7个通道, DMA2上有5个通道, 前文所用的DMA仅占用了12个通道中的一个通道, 因此还有足够的DMA资源可作别用, 本文的设计利用DMA1读取ADC采样值, 利用DMA2将内存中的数据搬运到DAC外设, 触发周期由Timer设定。

STM32有两个DAC通道, 我们只用到其中的一个通道。为了输出脉冲波形, 首先在片内RAM中建立一个short类型, 长度为4096的数组, 将一个周期的脉冲信号波形存入这个数组中, 在主循环中判断两个电位器的值是否发生变化, 如果脉冲宽度有变化就需要更新这个数组, 如果是脉冲宽度有变化则需要重新初始化并启动DMA, 需要改变DMA的传输字节数。

噪声叠加可以通过两种模式来实现, 一种是修改数组, 数据里的每一个成员都叠加随机数, 但这样修改数据会占用大量的CPU时间;另一种方法是直接利用DAC的硬件噪声发生器来产生噪声, 只占用非常少的CPU资源, CPU只需设置一下噪声的幅度, 因此我们选择了采用DAC的硬件噪声发生器来产生噪声。

4 结语

完成这篇文章时, 我们的实验箱已经制作了20台, 产品的一致性非常好, 由于有了3.2寸触摸屏的支持, 所有的操作步骤及提示都可以显示在屏幕上, 使用起来十分方便。由于集成度很高, 产品的成本得以降低, 成品率非常高。

STM32虽然功能强大, 但在开发过程中还是遇到了不少问题, 主要集中在软件方面。下面总结了我们开发过程中遇到的一些问题和解决方法, 供大家参考借鉴。

跟其它处理器相比, 它的外设时钟缺省是断开的, 为了使用某个外设, 必须先把使能外设时钟, 然后再进行初始化等操作。

STM32的外部晶振最好用8MHz的, 因为它的Firmware默认晶体的基准时钟是8MHz。如果用其他频率的晶振, 需要修改Firmware源文件, 再重新编译生成库文件。

由于这个芯片比较新, 购买时可能会买到测试版的芯片, 这些芯片一般都有少量BUG, 在调试的过程中发现, 有时在访问合法内存地址时也会出现内存访问异常, 这样会导致即使断电后即使重启程序也会锁死, 导致不能通过仿真器加载程序, 遇到这种情况, 只能通过串口擦除flash, 然后恢复程序到上一步的状态, 才能用仿真器进行烧写。因此建议一定要将串口0扩充出来, 以防止程序跑飞导致仿真器无法下载程序。

摘要:雷达原理实验箱需要模拟产生雷达在不同工作模式下的一些关键信号, 要求人机交互界面友好, 系统升级方便。STM32处理器具有丰富的片内外设资源, 阐述了如何灵活利用其片内ADC, DAC, DMA, TIMER资源实现了设计目标, 首先介绍了μCOSⅡ和μCGUI在STM32平台上移植的关键步骤, 其次介绍了利用DMA访问外设以减轻CPU负担的方法, 最后还介绍了采用片内DAC产生随机噪声的技巧, 该设计具有很强的参考价值和实用价值。

关键词:STM32,Cortex-M3,μ COS,μ CGUI

参考文献

[1] ST Microelectronics.STM32Reference Manual, 2009.

[2] ST Microelectronics.UM0427User manual, 2009.

[3] 李妍, 李威宣.基于ARM和mC/OS-II的手机展示平台的设计[J].信息化纵横, 2009, 12:7~9.

[4] 关海, 冯大政.μCOSII在基于Cortex2M3核的ARM处理器上的移植[J].电子科技, 2009 (22) :69~74.

上一篇:多元文化背景下高校思政教学改革分析下一篇:液化天然气加气机检定现状及可能出现的问题