基于FPGA控制ADC0832双通道采样+电压电流采样+LCD屏幕显示

基于FPGA控制ADC0832双通道采样+电压电流采样+LCD屏幕显示


前言

定制

要求使用ADC0832芯片进行ADC采样。其中电压采样以及电流采样是固定电路,是硬件设计,跟软件没没关系。本质上是进行了两路的电压信号采集。

引用:ADC0832模块说明

一、芯片手册阅读

1.SPI通信时序

确定SPI相关信息:

第一个空闲状态下CLK和DI的状态,图上显示CLK默认为低电平,上升沿设置数据,下降沿读取数据。DI空闲状态下为高电平。

CS正常拉低。

DOUT数据输出15个bit,本身这个ADC是8位,因此输出的数据就是8bit的,但是这个芯片本身有一个验证的功能吧相当于。分别把这个8位数据输出两次,先从高位输出到低位,再从低位输出到高位,其中低位是共用的。如果两个8位数据一致,则输出。否则认为ADC采样有问题。
数据构成相关说明:

跟一般的SPI AD采样的过程的区别就是前3个bit是进行设置。第四个脉冲的下降沿进行输出数据,但是用第五个的脉冲的上升沿读取数据更加合理,所以一共需要3+1+15个脉冲,也就是19个脉冲。

这个就是对前三个比特说明:第一个比特必须为高,目的是告诉ADC要开始读取了。其次后面两个比特是进行采样通道的设置,10就是用通道0,11就是用通道1.其他就是差分输入了,我用不到。

二、仿真分析

通过改通道10或者11就实现两个通道的切换了。

仿真只做了一种通道,后面实际上板是两个通道来回采样,实现了两个通道的采样。

三、代码分析

主要就是状态机的轮转

c 复制代码
  //state go
    always @(posedge sys_clk or negedge rst_n)begin
    if(!rst_n)begin
        state<=IDLE;
        adc_data1_temp<=16'd0;
        adc_data2_temp<=16'd0;
        CH_SET<=1'b0;
        lcd_flag<=1'b0;
    end
    else begin
        case(state)
        IDLE:begin
            state<=WAIT;
            lcd_flag<=1'b0;
            CH_SET<=~CH_SET;
        end
        WAIT:begin
            if(wait_count==WAIT_max)begin
                state<=START;
            end
            else begin
                state<=WAIT;
            end
        end
        START:begin
            state<=SET;
        end
        SET:begin
            if(clk_count==8'd3)begin
                state<=READ_DATA;
            end
            else begin
                state<=SET;
            end
        end
        READ_DATA:begin
            if(clk_count==8'd19)begin
                state<=OVER;
            end
            else begin
                state<=READ_DATA;
            end
        end
        OVER:begin
            state<=SAVE_DATA;
            
        end
        SAVE_DATA:begin
            state<=IDLE;
            lcd_flag<=1'b1;
            if((adc_data1==adc_data2) && CH_SET==1'b1)begin
                adc_data1_temp<= ((adc_data1 * 3300) >> 4'd8);
            end
            else if((adc_data1==adc_data2) && CH_SET==1'b0)begin
                adc_data2_temp<= ((adc_data1 * 3300) >> 4'd8);
            end
            else begin
                adc_data1_temp<=adc_data1_temp;
                adc_data2_temp<=adc_data2_temp;
            end
        end
        default:state<=IDLE;
        endcase
    end
    
    end

总结

视频演示

基于FPGA控制ADC0832双通道采样+电压电流采样+LCD屏幕显示

相关推荐
坏孩子的诺亚方舟16 天前
FPGA系统架构设计实践15_高云Arora V系列时钟体系
fpga开发·系统架构
FPGA小徐16 天前
入门 CNN 结构全解析|从流程图理论到 FPGA Verilog 硬件实现(含习题带讲解)
fpga开发
FPGA小徐16 天前
FPGA 数字信号处理:并行 FIR 与串行滤波器设计原理、对比与完整 Verilog 实现
fpga开发
Saniffer_SH17 天前
【高清视频】Gen6 服务器还没到,Gen6 SSD 怎么测?Emily 现场演示三种测试环境
人工智能·驱动开发·测试工具·缓存·fpga开发·计算机外设·压力测试
zlinear数据采集卡17 天前
双核架构深度解析:ARM+FPGA如何让数据采集卡实现500Ksps高性能?
arm开发·fpga开发·架构
9527华安17 天前
FPGA实现GTH Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·gth·aurora 8b10b·transceivers
FPGA小徐18 天前
FPGA 数字信号处理(二):并行 FIR 滤波器的 Verilog 全流程设计与实现
fpga开发
国科安芯18 天前
基于AS32S601ZIT2型抗辐照MCU的商业航天卫星姿态确定与控制系统研究
单片机·嵌入式硬件·安全·fpga开发·架构·risc-v
ALINX技术博客18 天前
【黑金云课堂】FPGA技术教程FPGA基础:I2C 总线通信技术
fpga开发·i2c
Hello-FPGA18 天前
Xilinx KU040 FPGA Camera Link 图像采集
c++·fpga开发