本文将介绍逐次比较型ADC

许多微控制器的ADC采用如下图所示的逐次比较型ADC。

中文说明请参阅网站

逐次比较型ADC通过比较VIN与VREF/2^m的值来工作,因此VIN的值可通过以下公式计算:

VIN = ( ADC Data Register value × VREF ) / 2^n

考虑了各种问题的ADC程序示例:
1.ADC待机状态检查
2.ADC启动 & ADC执行启动检查
3.ADC在规定时间内未完成时的超时处理
  ADC的转换时间会随着ADC的位数(2n)而变化,因此需要相应调整超时值TIME_OUT_ADC。
4.ADC读取

#define TIME_OUT_ADC 10      // 10[us]

// Sample HAL function
int hal_adc_status( int );   // ADC status read function
int hal_adc_start( int );    // ADC start function
int hal_adc_read( int );     // ADC read function
bool time_out( int );        // Time out function [us]

int ADC_Read( int ch)
{
    bool flag = FALSE;
    int  val  = 0;
    // Check if ADC is running
    if( hal_adc_status( ch ) == ADC_FIN )
    {
        // ADC start
        if( hal_adc_start( ch ) == ADC_EXE )
        {
            flag = TRUE;
            do{
          // Check Time out
                if( time_out( TIME_OUT_ADC ) == TRUE )
                {
                    flag = FALSE;
                    break;
                }
            // Check ADC fin
            }while( hal_adc_status( ch ) == ADC_FIN )
        }
    }
    if( flag == TRUE )
    {
        // ADC read
        val = hal_adc_read( ch );
    }
    return( val );
}

简单的ADC程序示例:
1.ADC 启动和 ADC 转换等待,ADC 读出

// Sample HAL function
int hal_adc_start_read( int );     // ADC start & read function

int ADC_Read( int ch)
{
    // ADC start & read
    return( hal_adc_start_read( ch ) );
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值