LM3S811的AD采样,为啥始终不执行ADCProcessorTriggerADC

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LM3S811的AD采样,为啥始终不执行ADCProcessorTriggerADC相关的知识,希望对你有一定的参考价值。

参考技术A 这要看你采集的是不是差分信号,如果是就要选差分放大。AD转换前滤波器,一般是低通滤波,滤波器的目的是滤掉一些噪声毛刺。也可以用软件滤波。这样采集的电压值更准确。

FFT_ad采样速率

调用quartus的ip核测量频率和幅值,可以把程序分成四大部分。第一部分是AD采样模块,本次实验用的是ad828,最高采样率为70M,

根据奈贵斯特采样定律 Fs > 2Fc,即采样率要大于信号最高频率的两倍,如果要求信号的频率,需要知道频率所对应的地址和频率分

变率F。而F = Fs/N,所以只要知道了采样速率FS和地址坐标,就可以求出频率来。ad采样率为50M,程序设定的有四个频率分辨率,

分别为1Hz,10Hz,100HZ还有1KHz,拿1Hz来举例,FS = F * N,所以只要对采样时钟进行适当的分频就可以算出FS来。

另外还需要注意的一点就是fft输入的数据是有符号的,需要对原始数据处理一下,变成有符号的二进制,只要在前面补零就可以。

/*-----------------------------------------------------------------------

Date                :        2017-XX-XX
Description            :        Design for 频率分辨率.

-----------------------------------------------------------------------*/

module sample_clk
(
    //global clock
    input                    clk,            //system clock 200M
    input                    rst_n,             //sync reset
    
    //key interface
//    input                    key0_value,
    input        [1:0]        key_data,
    //sample_clk interface

    output    reg                sample_clk
    
); 


//--------------------------------
//Funtion :               

    
/* always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        key_data <= 2\'d0;
    else if(key0_value)
        key_data <= key_data + 1\'b1;
end */


//--------------------------------
//Funtion :   分频
reg            [15:0]            n;

always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        n <= 16\'d0;
    else 
        case(key_data)
        2\'b00 : n <= 16\'d48828;  //频率分辨率 1Hz
        2\'b01 : n <= 16\'d4882;     //10Hz
        2\'b10 : n <= 16\'d488;    //100Hz
        2\'b11 : n <= 16\'d48;    //1KHz
        default : ;
        endcase
end

//--------------------------------
//Funtion :   sample_clk
reg            [15:0]        cnt_clk;

always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        cnt_clk <= 16\'d0;
    else if(cnt_clk >= n - 1\'b1)
        cnt_clk <= 16\'d0;
    else
        cnt_clk <= cnt_clk + 1\'b1;
end        
        
always @(posedge clk or negedge rst_n)
begin
    if(!rst_n)
        sample_clk <= 1\'b0;
    else if(cnt_clk >= n - 1\'b1)
        sample_clk <= ~sample_clk;
    else
        sample_clk <= sample_clk;
end



endmodule
    

 

以上是关于LM3S811的AD采样,为啥始终不执行ADCProcessorTriggerADC的主要内容,如果未能解决你的问题,请参考以下文章

fpga的ila的采样深度为啥选择不到设置的最大值

如何解决GD32F103在重新上电AD采样时偶尔有6个码的跳动

stm32 ad进行对数据采样,怎么获取五秒内的采样数据

为啥匹配的持久卷不绑定到匹配的持久卷声明(使用 k3s)?

[原创]AD9212采样方法

AD模块2.5基准电压,怎样采集1~5V的电压信号?