我目前正在使用atmel微控制器EVK1104s,它包含UC32 Data Sheet。我们实际上已经在定制PCB上种植了这个芯片,并且正在编写更多固件。
目前,我需要告诉微控制器单元(MCU)上的ADC采样(8k采样/秒)。实际上,这是用于采样麦克风。无论哪种方式,文档都很不清楚,我正在寻找一些澄清。
我知道要更改采样率我需要更改所谓的模式寄存器,该寄存器用于配置ADC使用(上面链接中的第799页)。这是允许我更改采样/保持时间/启动时间和ADCclock的寄存器。
EX(from pg 799):
Sample & Hold Time = (SHTIM+3) / ADCClock
ADCClock = CLK_ADC / ( (PRESCAL+1) * 2 )
从我收集的内容来看,我只需更改PRESCAL即可使ADCClock以8Khz运行。问题是PRESCAL限制为8位分辨率。
例如,如果控制器设置为12Mhz / x = 8Khz,那么x将需要为1500.因为x如前所述限制为8位,这似乎是不可能的,因为最大值为255。 / p>
我觉得我在这里做错了什么,或者不了解数据表要我做什么。任何人都可以确认我刚刚谈到的内容或帮助指导我吗?
答案 0 :(得分:2)
您对采样率和ADC率感到困惑。
您在手册中引用的寄存器仅控制一个样品的取样。寄存器允许您控制采样电压的时间。根据所涉及的电路,这可能会对您产生影响。也就是说,您不希望为电路过快地采样。 (我没有仔细查看数据表,但是一些微控制器采用了几个样本并对它们求平均值。这种行为也是由寄存器控制的。)
但8 kHz采样率是指您想要采样的频率。也就是说,这是您想要触发单个样本的频率。你提到的寄存器没有解决这个问题。您需要使用时钟和中断处理程序将数据从寄存器中移出到存储器中或使用它执行某些操作,然后触发下一个样本。还有一个中断处理程序,可以在样本准备就绪后立即处理它。在该方案中,您使用处理程序:一个用于触发样本;另一个是在准备好时处理样品。
编辑:
为了解释为什么您不希望这么慢的ADC速率,请考虑ADC如何生成其数据。它为第一位采样,等待一个周期,为第二位采样,依此类推10个周期。结果的准确性取决于信号在所有这些样品上保持稳定。如果信号正在改变,那么这个数字的位是没有意义的。您需要足够快地设置预分频器和ADC时钟,以便信号不会发生变化,但速度足以让信号稳定下来。
所以是的,您想使用时钟和中断处理程序来读取数据然后触发下一次读取。 ADC独立于处理器运行,并在中断再次运行时准备就绪。 (第一次阅读将是垃圾,但你可以设置一个标志或一些东西来防范它。)
volatile int running = false
Handler()
if(running) do something with data
running = true
trigger ADC
output compare += 1/8000 s