FPGA驱动CS1237(Verilog)

本文分享了作者使用Verilog编写代码,根据CS1237数据手册时序图实现锂电池电压24位ADC采集的过程,包括硬件电路设计、状态机控制和数据处理策略。期待读者指正交流,同时提到了后续更新针对电池工作电压范围的调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近用到CS1237(24位ADC)采集锂电池电压,也是本人第一次用Verilog自己按照数据手册的时序图写通讯协议,内容可能会有不足之处,也欢迎大家在评论区指正。

话不多说,开始整活

(CS1237数据手册的时序图我就不贴了,大家如果要用这个芯片,最开始肯定有找数据手册)

硬件电路图:

 正采集端用电阻分压的原因是,芯片自己的数据转换公式里会给基准电压除2 ,为方便数据处理,硬件上做个电阻分压。

Verilog代码:

module  CS1237
(
    input   wire            sys_clk     ,   //系统时钟,频率25MHz
    input   wire            sys_rst_n   ,   //复位信号,低电平有效

    inout   reg             adc         ,   //数据端口
    output  reg             sclk        ,   //时钟端口
    
    output  reg     [7:0]   bat_power        

);

parameter   S_STOP      =   3'd0,   //时钟高电平,休眠状态
            S_WAIT_R    =   3'd1,   //时钟低电平,等待数据转换完成
            S_READ      =   3'd2,   //1-24时钟,读取数据
            S_WAIT_W    =   3'd3,   //25-29时钟,准备写
            S_WRITE     =   3'd4,   //30-37时钟,发送写寄存器指令,37时钟用于过渡
            S_CONFIG    =   3'd5;   //38-47时钟,写寄存器,47时钟是为了让46时钟完整

parameter   T_STOP      =   8'd250; //us,休眠状态时长,根据自己需求修改

reg     [2:0]   state       ;   //状态机状态
reg             adc_d1      ;   //总线信号打一拍
wire            adc_fall    ;   //总线下降沿

reg     [4:0]   cnt         ;   //时钟分频计数器
reg             clk_1us     ;   //1us时钟
reg     [7:0]   cnt_us      ;   //us计数器
reg             en_sclk     ;   //输出时钟使能
reg     [5:0]   bit_cnt     ;  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值