卫星导航接收机ZYNQ实现(一)
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
上学的时候,得到过一套卫星导航接收机的全套资料,当时照着实现了一遍,也就毕业了,很多地方都没有整明白;做出来的一套还是师傅给调出来的,自己整的那块板子都没能输出定位结果;工作之后也没有从事相关方向的专业,也就搁置起来了。让它跑起来,是多年以来的心愿。
一、方案的选择
硬件选择
当时那套资料是基于FPGA+DSP方案的,因为是十几年前的设计,芯片本身已经非常古老,我手上也没有相关的调试工具,另外,再照着复制一遍即使实现了也毫无意义。接收机的实现除了装用的ASIC芯片之外,大致有两种方案:FPGA+DSP、FPGA+ARM,导师说也有用两片FPGA的,我没见过,可能是一片作为逻辑实现,另一片用软核做控制,本质上没有区别。
无意间接触到ZYNQ这个片子,带ARM的FPGA,觉得这个东西简直是做接收机的不二之选,开发起来也非常方便。于是在网上买了一块微相科技的Z7-lite作为入门,看了一些自带的例程,觉得问题不大。
然后就是射频的选择,当时那套资料使用分立器件搭起来的,自然无法再选择,成本高不说,我根本调不出来,当年实验室因为没有相关仪器,也就没学这部分的调试。MAX2740是记忆中的一个片子,后来查了下MAXIN官网发现有升级版的MAX2769以及MAX2771,价格也很便宜。果断打了一块板子。
软件方案
看了一些论文,ZYNQ这个方案实现的不少,但都没有后明确指出软件的架构。也就靠着自己的理解试着去做了,裸机是比较容易实现的,也是初学者该选的方式,Linux看上去更高级一些,肯定能够胜任,但我感觉它的实时性得不到保证,Vxworks,UCOS,大致看了下本质上并无多大区别,所以我试着用SDK自带的Free RTOS做一下。
二、实现步骤
这里做一个大致的计划,类似于目标。
首先是射频功能的验证,如果射频不通一切便无从谈起,所以第一步是把MAX2769这个片子跑起来。
然后是硬件功能方面的准备工作,ZYNQ我是现学现用,需要验证一些用到的基本功能,包括PL-PS的交互、中断等;
接下来是FPGA部分代码的改写,原来的方案是ALTERO,所有的IP需要用Xilinx重新实现。
最后是软件功能的实现,从DSP/BIOS到Free RTOS,任务、消息邮箱的配合,接收机各部分功能从捕获、跟踪开始到导航定位的实现。
总结
本文所列的目标其实大都已经实现,系列文章是以回顾的方式把过程记录下来。所以接下来的文章会更加详细一些。