当前位置: 首页 > news >正文

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

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

  • 前言
  • 一、芯片手册阅读
    • 1.SPI通信时序
  • 二、仿真分析
  • 三、代码分析
  • 总结
    • 视频演示


前言

定制
要求使用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就实现两个通道的切换了。
在这里插入图片描述
仿真只做了一种通道,后面实际上板是两个通道来回采样,实现了两个通道的采样。

在这里插入图片描述

三、代码分析

主要就是状态机的轮转

  //state goalways @(posedge sys_clk or negedge rst_n)beginif(!rst_n)beginstate<=IDLE;adc_data1_temp<=16'd0;adc_data2_temp<=16'd0;CH_SET<=1'b0;lcd_flag<=1'b0;endelse begincase(state)IDLE:beginstate<=WAIT;lcd_flag<=1'b0;CH_SET<=~CH_SET;endWAIT:beginif(wait_count==WAIT_max)beginstate<=START;endelse beginstate<=WAIT;endendSTART:beginstate<=SET;endSET:beginif(clk_count==8'd3)beginstate<=READ_DATA;endelse beginstate<=SET;endendREAD_DATA:beginif(clk_count==8'd19)beginstate<=OVER;endelse beginstate<=READ_DATA;endendOVER:beginstate<=SAVE_DATA;endSAVE_DATA:beginstate<=IDLE;lcd_flag<=1'b1;if((adc_data1==adc_data2) && CH_SET==1'b1)beginadc_data1_temp<= ((adc_data1 * 3300) >> 4'd8);endelse if((adc_data1==adc_data2) && CH_SET==1'b0)beginadc_data2_temp<= ((adc_data1 * 3300) >> 4'd8);endelse beginadc_data1_temp<=adc_data1_temp;adc_data2_temp<=adc_data2_temp;endenddefault:state<=IDLE;endcaseendend

总结

视频演示

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

http://www.dtcms.com/a/178334.html

相关文章:

  • TypeScript 中,属性修饰符
  • 解锁跨平台开发的新时代——Compose Multiplatform
  • 针对共享内存和上述windows消息机制 在C++ 和qt之间的案例 进行详细举例说明
  • PyTorch 版本、torchvision 版本和 Python 版本的对应关系
  • 每日一笑话(三)
  • AI(学习笔记第二课) 使用langchain进行AI开发
  • 智能边缘计算系统:基于Python的创新应用
  • openwrt之UCI 增删改查(add/get/set /add_list...)
  • 防浪涌光电隔离型RS-485集线器可蓝牙通信
  • kafka records deletion policy
  • 赋能金融科技创新,Telerik打造高效、安全的金融应用解决方案!
  • Electron 打包与发布指南:让你的应用运行在 Windows、macOS、Linux
  • 【Java 专题补充】流程控制语句
  • 蓝桥杯第十六届c组c++题目及个人理解
  • 每周靶点分享:Angptl3、IgE、ADAM9及文献分享:抗体的多样性和特异性以及结构的新见解
  • 基于大型语言模型的高效时间序列预测模型选择
  • 【网工第6版】第7章 网络操作系统与应用服务器③
  • Arm核的Ubuntu系统上安装Wireshark
  • 英语六级---2024.12 卷二 仔细阅读2
  • 第5章 深度学习和卷积神经网络
  • 如何将 Build at、Hash 和 Time git 的 Tag 号等构建信息,自动写入一个 JSON 文件
  • P4017 最大食物链计数
  • 可观测性方案怎么选?SelectDB vs Elasticsearch vs ClickHouse
  • 计算机网络-DNS协议, ICMP协议,DDoS攻击
  • Minor GC与Full GC分别在什么时候发生?
  • DeepSeek驱动的智能客服革命:语音交互与大模型的融合实践
  • keep the pipe Just full But no fuller - BBR 与尘封 40 年的求索
  • 复刻低成本机械臂 SO-ARM100 单关节控制(附代码)
  • 基于STM32、HAL库的CP2102-GMR USB转UART收发器 驱动程序设计
  • 分享 2 款基于 .NET 开源的实时应用监控系统