乐鑫技术交流
直播中

caosurround

11年用户 799经验值
私信 关注
[问答]

通过SPI和外接的esp32实现通信,使用延时函数无法达到100K的采样率,为什么?

我通过SPI和外接的AD 芯片实现通信,可以对AD值进行读取
现在想以10us的速度(100KHz)进行采样,我尝试了
使用10us的定时器,但是会导致看门狗复位,如果使用延时函数则不会触发看门狗,但是无法达到100K的采样率
请问大家有什么好的建议吗?
定时器方式失败,因为esp32的周期性esp_timer会对最小计时器周期施加50us的限制,也就是说我想使用10us是无法实现的
现在我想通过pwm控制spi的片选信号,在PWM下降沿时进行一次AD采集,这就需要使用LEDC—PWM的计数中断,但是技术手册上只有寄存器的设置,我应该如何在代码中使用这些寄存器呢

回帖(1)

自我清欢

2024-6-12 17:35:21
在这种情况下,我们可以尝试以下几种方法来实现100KHz的采样率:

1. 优化延时函数:首先,我们需要检查延时函数的实现,确保它尽可能高效。可以尝试使用更精确的延时函数,例如使用硬件定时器或者直接操作硬件寄存器。

2. 减少SPI通信开销:检查SPI通信过程中是否有不必要的开销,例如初始化、配置等。尽量减少这些开销,以提高采样率。

3. 使用中断驱动的SPI通信:尝试将SPI通信改为中断驱动,这样可以在数据准备好时立即进行处理,而不是等待延时函数。

4. 使用DMA(Direct Memory Access):如果硬件支持,可以使用DMA来实现SPI通信,这样可以减少CPU的负担,提高采样率。

5. 调整PWM计数中断:关于使用PWM控制SPI的片选信号,可以尝试以下步骤:

   a. 配置PWM通道:根据ESP32的技术手册,设置PWM通道的频率、占空比等参数。

   b. 配置LEDC计数器:设置LEDC计数器的参数,例如计数器的初始值、最大值等。

   c. 配置PWM计数中断:根据手册中的寄存器设置,配置PWM计数中断的触发条件和中断服务程序。

   d. 在中断服务程序中处理SPI通信:在PWM计数中断的中断服务程序中,控制SPI的片选信号,并进行AD采集。

6. 考虑使用RTOS(实时操作系统):如果以上方法仍然无法达到100KHz的采样率,可以考虑使用RTOS来优化任务调度和资源分配,以提高采样率。

总之,要实现100KHz的采样率,需要从多个方面进行优化,包括延时函数、SPI通信、PWM计数中断等。希望这些建议对您有所帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分