emoestudio / eEEExplore-2023

电子工程相关技术交流讨论repo-2023年限定
GNU General Public License v3.0
20 stars 2 forks source link

[MCU]基于华大HC32F460芯片的DSP学习笔记 #10

Open ConstantineNo opened 1 year ago

ConstantineNo commented 1 year ago

ref:https://www.emoe.xyz/stairway-to-dsp_beginning/ 大佬们的这个项目已经眼馋很久了,但是一直没有时间去完成。之前做ADC就比较菜,主打一个俺寻思能行,控制采样率全靠绑一个GPIO翻转去示波器里测延时,有一种在word里靠空格调居中对齐的感觉。人不能菜一辈子,这周照着这篇文章的路线,把里面有价值的东西做一做。

芯片用的华大半导体的HC32F460,这玩意首先不和stm32 pin2pin兼容,寄存器也有很多不一样的,自带的芯片库写的比我还菜,基本上得全都靠自己了。所以这里记录一下调试的思路和进步的过程。

先从ADC开始调吧,库用的官方给的2.0的SDK里面的库 image

这个库里的例程已经帮我配置好timer0触发ADC了,看起来还不错,加一条GPIO翻转烧进板子里看看。(已经路径依赖了) image

完了拿电源给一个100mV电压进去的结果飘到天上去了,采50次再平均能得到准确的100mV,但是单次采样的结果从30mV到200mV上下飘,没什么规律。检查ADC采样时间正常。发现Jtag的3.3V和板子连一起了,可能我电脑USB供电非常不干净,把这个拔了之后单采一个固定值电压就稳定了。

烧完之后发现采样率是1Hz,于是去改timer的触发频率,想着刚来,稍微改一下改到1000hz。 image

上电之后发现实际采样率大概在112hz的样子。 于是仔细看了timer那边的手册,timer触发的传递,ADC的频率配置,最后发现这个库带的那个串口发送的程序在条件编译里被启用了,这个过程放在读取数据里面给整个速度拉低了。我这板子没画串口部分。把串口相关的代码给清理干净,再次烧录上电。

这次改完最高采样率能到900多hz,但是定时器直接配到1K触发的时候采样率是正好500hz,正当我检查定时器时钟以及分频配置的时候,发现配置成500hz的时候触发采样率也是500hz。所以瓶颈大概在别的地方。于是去检查ADC的配置代码。发现这个默认会同时进行五六个通道的转换。把通道数砍到1一个。最高采样率来到25Khz。

把原来主循环里的东西删干净,开一个长度是512的u16的数组,主循环轮询ADC状态然后把值存进去。把开头调ADC飘的问题的时候增大的采样时钟重置到一个比较合理的值。于是得到一个能准确产生400Khz采样率的东西。

不用DMA的话大概就到此为止了。接下来配DMA。

这芯片例程我实在看不懂,对着库函数和手册硬来。设置好几个地址,传输次数,传输触发之类的,最后还是翻了车,死在DMA传输大小那里。我以为它注释说的是总大小,结果是传输一次的大小。

多花了点时间,DMA顺利配完,几个中断写一写,中断里面状态位写一写,主循环重新载入ADC写一写。

于是我得到一个最大1.66666Mhz的ADC,手册上标的2.5Mhz我调不上去,感觉瓶颈在ADC那边。定时器触发改到2M之后实测采样率会变成1M,后面再调啦!

接下来拿采到的数据做一下卷积啊SDFT什么的,等我做了再来分享感悟。

Floyd-Fish commented 1 year ago

好欸,说实话这个项目我目前是处在咕咕咕状态23333,本来想着至少把ADDA跑起来,再弄个FIR试试的,一直被各种事情拖延到现在。。我倒是有些没实现的想法分享分享(挖坑:

  1. ADC采样,DSP运算完后DAC输出,可以做信号滤波、移相等
  2. ADC采样后,在数字域中利用FPU加速完成IQ解调
  3. DAC当作一个任意波形发生器用(这个之前俺做过,写了篇文:利用STM32的片上DAC实现DDS(数字频率合成)
  4. 做一个低带宽的波形分析仪,利用内插、FFT、FIR、CIC等DSP库实现示波器、频谱等功能(好吧就是个示波器
  5. 用ADC/DAC代替某些模拟器件功能,做一些常规模拟电路很难实现指标的电路
  6. LMS滤波器、音频EQ balabala...

以上纯挖坑,不填 ;D

OliverKung commented 1 year ago

所以我好奇的问下,这个项目是指DSP学习笔记嘛?为啥要用HC32F460这颗片子捏

从 Windows 版邮件发送

发件人: Floydfish 发送时间: 2023年7月18日 13:01 收件人: emoestudio/eEEExplore-2023 抄送: Subscribed 主题: Re: [emoestudio/eEEExplore-2023] [MCU]基于华大HC32F460芯片的DSP学习笔记 (Issue #10)

好欸,说实话这个项目我目前是处在咕咕咕状态23333,本来想着至少把ADDA跑起来,再弄个FIR试试的,一直被各种事情拖延到现在。。我倒是有些没实现的想法分享分享(挖坑:

  1. ADC采样,DSP运算完后DAC输出,可以做信号滤波、移相等
  2. ADC采样后,在数字域中利用FPU加速完成IQ解调
  3. DAC当作一个任意波形发生器用(这个之前俺做过,写了篇文:利用STM32的片上DAC实现DDS(数字频率合成)
  4. 做一个低带宽的波形分析仪,利用内插、FFT、FIR、CIC等DSP库实现示波器、频谱等功能(好吧就是个示波器
  5. 用ADC/DAC代替某些模拟器件功能,做一些常规模拟电路很难实现指标的电路
  6. LMS滤波器、音频EQ balabala... 以上纯挖坑,不填 ;D — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you are subscribed to this thread.Message ID: @.***>
MeowMeow-Neko commented 1 year ago

FFT还有FIR什么的东西,咱最近刚好因为电赛在AT32F413上跑了一下,基本上算是调通了DAMO.直接copy了安富莱的ARMdsp教程,反正都是m4核,移植上没啥问题, c246d7af6a585b7689cb4bbfc78f8ad

赛后有空了咱把代码发发