当前位置: 首页 > news >正文

基于双SI4463芯片的 AIS 接收机开发

接手的半成品项目,前期试验已经完成,可以收到AIS命令,但SI4463芯片的晶振不够准确导致频率不准,导致明明在WDS里分别设定为161.975和162.025的AB芯片只有一个芯片能收到信号。

另外这本来也是个Demo,为了提高鲁棒性也需要大改代码,so开始搭积木,删删减减挑出有用的模块拼凑一下,顺便也解决上面提到的频率问题。

先随便写写吧,下面从项目概述开始介绍。

一、项目目标

AIS 工作在 VHF 海事频段,主要使用两个信道:

信道 频率
AIS1 (A) 161.975 MHz
AIS2 (B) 162.025 MHz

为了同时接收两个 AIS 信道,项目采用:

  • STM32F103 作为主控
  • 两颗 SI4463 射频芯片分别接收AB信道
  • USB与上位机通信
  • Qt/QML 开发上位机扫频软件

实现:

  • 双通道同时接收
  • QT 实时显示接收数据
  • QT RSSI 频谱显示
  • 可修改工作频率实现扫频功能(主要是为了解决晶振不准确导致的频率不准)
  • 掉电保存已配置的频率

通讯和工作流程如下图:

以上就是项目大致的架构,我的任务就是接手烂尾的STM32程序以及开发扫频功能的上位机。

PS:这里也考虑过直接设置芯片AFC来解决硬件导致的频率偏移问题,但实际结果是偏移过大(最后扫频发现A芯片的接收范围设为161.840-161.910MHz才能获得161.975MHz频率的信号,B通道设为161.940-162.010MHz能获得162.025MHz频率的信号,频率整体往下偏移,也不知道是不是硬件的锅),这么大的偏差用AFC根本不现实,很容易被别的频率带偏,甚至这两个频率都会互相干扰。

二、开发过程

Ⅰ.WDS

SI4463官方提供的便于配置芯片的小工具,可以直接生成初始化芯片的头文件。我接手时基础的配置已经配置好了,但需要根据文档找到调整频率的命令来实现扫频功能。

这里附上官网文档地址:

https://www.silabs.com/wireless/proprietary/ezradiopro-sub-ghz-ics/device.si4463?utm_source=chatgpt.com&tab=techdocs

里面非常详细,我只看了部分用到的文档,完整配置挺复杂的或许有空可以单独出一篇解释一下各个参数的功能。

Ⅱ.STM32

用一个F103来控制两个SI4463芯片接收AB信道,选择SI4463的原因是市面上有用该芯片做好的成品,这个项目相当于仿制研究AIS发送接收流程,后期应该会换成更便宜的国产芯片。

1.SI4463 硬件复位

拉高再拉低芯片的 SDN 引脚,重启芯片复位,延时一段时间等待芯片重启成功。

2.EEPROM初始化

把保存在Flash的参数加载到 EEPROM 缓存区,这里主要是为了重启时加载已经修改过的频率配置。

3.芯片初始化

SPI初始化SI4463↓
POWER_UP(这里把上电命令单独拎出来了,芯片接收到上电命令后会有很长一段时间的延迟,截获命令后可以看到CTS一直在询问但芯片在忙,所以单独给它一个长等待)↓
配置GPIO↓
配置调制器↓
配置频率(配置两个芯片的频率,有两种可能:1.从初始化文件正常配置2.如果Flash里存有数据则优先按照Flash进行配置)↓
配置中断(接收到AIS信号则进入中断进行解码)↓
进入RX模式

最开始接手的原程序为了省事直接多发了几遍初始化,没有按照正确的“发一条配置发一遍CTS”的方式进行初始化,我增加了CTS(Clear To Send)确保芯片能稳定的初始化成功。

4.主循环流程

① USB命令处理

USB发送命令↓
SI4463修改频率↓
存储到Flash(如果是保存命令的话)

上位机发送的修改频率的命令被分为两种,一种是直接修改频率,重启后会由于重新初始化而丢失,因此为了保存修改内容,增加另一种保存可以把频率保存到到Flash,保证断电不丢失配置。扫频时使用第一种修改方式,等扫频得到正确频率后使用第二种保存。

② AIS解码

NRZI解码↓
去填充0↓
CRC校验↓
Bit翻转↓
6bit转ASCII↓
USB发送给上位机

这个解码过程很麻烦,详细步骤可以参考我上一篇写的解码小程序。

Ⅲ.上位机

QML开发的上位机,显示获得的AIS信息以及实现扫频功能。

1.串口管理

常用功能直接ai生成了,刷新扫描串口,连接断开等基础功能。

2.日志管理

滚动日志,一键清空等功能,给我自己调试时看的。

3.频率配置

拖动Slider发送配置频率的命令,最开始的版本是手动拖动Slider实现扫频,发现手动不太方便所以又写了个自动扫频,输入起始位置、终止位置、步距、每步延时就能自动发送频率配置实现扫频。

最上方可以选择要进行扫频的AB通道,当选择A通道时,扫频、修改、RSSI图都属于A通道,选择B通道时同理,切换通道时RSSI图清空。

另一种保存方式则是输入并点击Set按钮,这里是保存到Flash,断电重启后初始化会优先按照Flash中的数值设定频率。

4.RSSI显示

获得包的时候也同时获得RSSI,可以更直观的看到哪个频率时接收信息最强。

http://www.gsyq.cn/news/1518346.html

相关文章:

  • 全网最全!二分查找的两种核心模板详解
  • M68000处理器指令集与寻址模式:CISC架构的经典设计解析
  • 工业大模型应用指南:小白程序员必备,收藏学习助你起飞!
  • Umi-OCR终极指南:3分钟掌握免费开源的离线OCR工具,开启高效文字识别新时代
  • 3步解锁微信聊天记录永久保存:WeChatMsg让珍贵对话永不丢失
  • Basalt在实际机器人项目中的应用:ROS集成与部署实践
  • 揭阳市 黄金回收合规商家及传家黄金实地测评 - 靖昱黄金回收
  • 5分钟彻底清理Mac应用残留:开源清理神器Pearcleaner终极指南
  • 2026工艺金饰估价避亏技巧,青岛五家回收商铺实地亲测分享 - 讯息早知道
  • 多核音频处理器引脚复用与系统设计实战解析
  • 2026江苏电气成套与配电系统十大品牌:汉发电气实力领跑,一站式电力工程解决方案优选 - 安互工业信息
  • Cursor Pro破解工具终极指南:3分钟实现AI编程助手永久免费使用
  • 如何一键清理Windows 11系统臃肿?Win11Debloat终极优化指南
  • zsh-async测试与质量保证:编写可靠的异步脚本
  • 别只看足金!你的18K金、铂金、旧金条都能卖钱:聊城全品类回收指南 - 润富黄金回收
  • gh_mirrors/do/dotnet-docs-samples完全指南:轻松掌握Google Cloud .NET开发的终极入门教程
  • 南山区的口才班太多了,我最后是这样选出来的 - 深圳市民HLL
  • 油莎豆加工成套设备常见问题解答(2026最新专家版) - 速递信息
  • term2048扩展指南:如何自定义游戏目标与棋盘大小
  • LING高级特性详解:如何利用Xen虚拟化优化Erlang运行时性能
  • 坪山区演讲口才哪家好?我对比了10家后的真实感受 - 深圳市民HLL
  • 终极指南:如何用BERTScore轻松评估文本生成质量?完整教程与实用技巧
  • 单身证明双认证怎么办?单身证明双认证流程? - 指上通
  • 2026年6月最新最权威的国内工业管道加热器工厂排名实测汇总 - 奔跑123
  • Cursor Pro激活工具:你的AI编程伙伴的终极解放者
  • 别再只盯着P值了!用R语言实战QTL分析:从基因型数据到LOD值图谱全解析
  • Skinny Bones Jekyll Starter响应式设计解析:移动端适配最佳实践
  • Nova未来展望:路线图与技术发展趋势分析
  • 2026大型不锈钢雕塑厂家实力对比及选型指南 - 曲阳嘉华园林
  • ComfyUI-KJNodes:5大实用功能彻底改变你的AI创作工作流