STM32F401+nRF24L01无线传输音频(对讲机原型)

发布者:感恩的7号最新更新时间:2022-08-15 来源: csdn关键字:STM32F401  nRF24L01 手机看文章 扫描二维码
随时随地手机看文章

尝试结合STM32F401的ADC, PWM, SPI(NRF24L01)和TIM, 试验了一下音频的无线传输(对讲机原型)


工作机制

音频采样

因为硬件的限制, 包括STM32F401片内存储, 内存大小, PWM频率, 以及之前实际测试NRF24L01得到的经验数据, 采样使用了最基础的8bit分辨率, 采样频率为16KHz附近


SYSCLK使用25MHz, APB2CLK使用一半频率, 即12.5MHz

ADC在APB2CLK基础上8分频, 所以ADC时钟为12.5MHz/8

ADC使用8bit分辨率, 对应11个ADC时钟, 采样周期设置为84, 所以每次采样为95个ADC周期, 这样实际采样频率为 12500000 / 8 / 95 = 16,447 Hz, 接近16KHz

使用ADC2DMA, DMA使用一个32byte大小的uint8_t数组

无线传输

使用fastwrite机制, 即一直保持在发状态, 只要FIFO TX队列未满就一直往里写, 如果满了就检查MAX_RT标志位, 如果置位则拉低再拉高CE重置发送状态

采样端使用DMA的传输完成中断, 对应32个byte的DMA内存, 每次采集满32个byte都会触发中断, 此时调用NRF24L01进行发送

接收端使用IRQ中断接收, 创建一个128Byte的接收数组, 循环写入. 每次接收中断就往里面写32个byte, 往后增长, 到右边界后再从0开始

音频输出

接收端也使用25MHz的SYSCLK

接收端启用PWM输出, 输出分辨率为8bit

接收端启用Prescaler=0, Period=1561的定时器TIM3, 这个配置对应的频率为 25000000 / (0 + 1)(1561 + 1) = 16,005 Hz, 接近16KHz. (注: 这里频率选择有些问题, 应该要比发送端频率略高, 这样才能保证在持续发送中, 播放不被接收打断)

每次定时器触发中断, 都会在128byte的接收数组中检查是否有新数据, 有则前进一格并以此值修改PWM占空比, 无则跳过. 如果已经到达数组右边界则返回到数组0下标.

电路

输入端电路

输入端使用一个驻极体二极管加S9014组成简单的放大电路.

输出端电路

输出端先经过以及RC低通滤波(R=20, C=10uF), 再使用PAM8403进行放大


项目代码

项目代码在Github: https://github.com/IOsetting/stm32f4-hal-projects/tree/main/Projects/WalkieTalkieDemo

可以使用Keil5 MDK打开和编译


测试记录

采样: 采样工作正常, 观察输出可以看到有动静时采样值的变化

传输: 仅在10米以内距离测试, 出现MAX_RT标志的比例很小, 至少从16KHz采样, 32byte一个package的发送速率看, 发送和接收都不是瓶颈. 当有墙体阻挡时错误率上升明显

播放: 背景噪音大, 在近距离时容易互相干扰产生啸叫. 播放效果较差, 沙沙声明显. 在加入低通滤波后能听清人声, 但是依然未能达到"能听"的水平.


电路部分原型

电路部分原型

发送端

下一步

因为传输不是瓶颈, 所以改进的方向主要是音质. 可能需要从几个方面进行排查:


播放方面. 这块是比较容易排查的, 比如使用单频音源输出, 使用预录的音源输出, 需要评估使用多高的PWM频率以及RC滤波参数能达到可接受的播放效果

采样方面. 如果有示波器会很方便, 没有示波器的话, 只能通过ADC采样的输出来判断, 需要写代码将数组输出到存储, 需要加一些片外存储


关键字:STM32F401  nRF24L01 引用地址:STM32F401+nRF24L01无线传输音频(对讲机原型)

上一篇:Keil MDK STM32系列(五) 使用STM32CubeMX创建项目基础结构
下一篇:Keil MDK STM32系列(六) 基于抽象外设库HAL的ADC模数转换

推荐阅读最新更新时间:2024-11-13 11:34

基于51单片机的nrf24l01无线的接收和发射程序
通过灯的闪烁来判断数据的接受和发射 有接收端和发射段的程序 如果24L01用reg51那么两个设备都要用reg51,如果用reg52就都得用reg52! PC通过串口发送给单片机命令 ,单片机把命令通过24L01无线发送给另一个单片机,另一个单片机控制灯LED1,LED2,LED3,LED4闪烁。 无线发射程序: #include 2401.h #define uint unsigned int #define uchar unsigned char //1//sbit KEY1=P0^0; //发送按键 //1//sbit KEY2=P0^1; //1//sbit KEY3=P0^2
[单片机]
基于51单片机的<font color='red'>nrf24l01</font>无线的接收和发射程序
51单片机 nRF24L01 无线模块 测试 按键灯远程控制
入正题,这个实验的功能就是一个发送模块(大的那个板)连接4个按键,通过按动这4个不同的按键来发送4种不同的命令,来控制接收端(小的板)点亮4个不同的灯。 _ !首先是发送模块: 1 void main() 2 { 3 uchar Tx_Buf1 ={1}; //发送的信息1 4 uchar Rx_Buf ; //接收到的数据暂存器,最多32字节数据 5 init_NRF24L01(); 6 LED6=1; //初始灯6熄灭 7 8 while(NRF24L01_Check()) //检查不到24l01则报警 9 { 10 beep=0;
[单片机]
51单片机 <font color='red'>nRF24L01</font> 无线模块 测试 按键灯远程控制
STC8H开发(五): SPI驱动nRF24L01无线模块
nRF24L01模块 整体介绍和STM32F1, STM32F4, STC12的代码 https://www.cnblogs.com/milton/p/14999884.html 2x4pin模块和USB测试板, Arduino配置 https://www.cnblogs.com/milton/p/8807436.html 利用FIFO队列进行发送速度优化 https://www.cnblogs.com/milton/p/15259485.html 迁移到STC8H 只需要调整SPI发送部分, 为适应nRF24L01的发送方式, 增加了多字节发送方法(节省了字节间拉高拉低CS的GPIO操作) uint8_t SPI_TxRx(
[单片机]
MSP430+nRF24L01程序
************************************************** 来源:网上 改写:bluefeel 时间:10-03-13 单位:桂林理工大学 /**************************************************/ #include reg51.h #include api.h #define uchar unsigned char /***************************************************/ #define TX_ADR_WIDTH 5 // 5字节宽度的发送/接收地址 #define TX_PLOAD_
[单片机]
Mini2440 NRF24L01无线模块驱动
为了和jihuaLi 完成智能家居系统,我移植了这个驱动,不管写的如何,总结一下是很有必要的。 NRF24L01使用SPI总线与主机通信,没有SPI端口的设备可以使用IO口进行模拟。 关于SPI: SPI是一种四线串行总线, SCLK: 串行时钟线 MOSI: 总线主机输出/ 从机输入 MISO: 总线主机输入/ 从机输出; SS: 从机使能 数据传输方式 通讯是通过数据交换完成的,这里先要知道SPI是串行通讯协议,也就是说数据是一位一位的传输的。这就是SCLK时钟线存在的原因,由SCK提供时钟脉冲,SDI,SDO则基于此脉冲完成数据传输。数据输出通过 SDO线,数据在时钟上升沿或下降沿时改变,在紧接着的下降沿或上升沿
[单片机]
Mini2440 <font color='red'>NRF24L01</font>无线模块驱动
基于STM32F103和nRF24L01的近程无线数传系统设计
简介:近年来, 随着无线通信技术的发展, 无线通讯设备的集成化越来越高。本文介绍了一种选用高性能、低功耗的32位微处理器STM32F103和射频收发芯片nRF24L01来设计短距离无线数据传输系统的具体方法。 1 系统设计 短距离无线数传系统主要由电源管理器AMC7635、微控制器STM32F103、射频收发器nrf24l01三部分组成。下面分别介绍其关键电路。 1.1 电源电路 本设计的电源采用3.7V锂电池供电, 然后经低压降电源管理芯片AMC7635, 以产生3.0V的电压来为STM32F103和nRF24L01供电, 图1所示是本系统的供电电路。 图1 系统供电电路 1.2 微控制器电路 微控制器选用带AR
[单片机]
基于STM32F103和<font color='red'>nRF24L01</font>的近程无线数传系统设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved