昂瑞微 HS6621 芯片 ADC检测调试

HS6621 芯片 ADC检测调试

一、函数接口

  • 工程中给我们提供了三种直接使用 ADC 的接口函数
  1. 获取当前芯片供电电源电压
  2. 获取单个 GPIO 引脚电压
  3. 获取两个 GPIO 引脚电压差值,所以返回值为 int16_t, 他允许负数的存在,所以返回值存储时需要注意
  • 函数最后一个参数是调用该函数所采集 ADC 值的次数,返回值为多次返回值的平均值,单位是 mv
/**
 * @brief adc read voltage with channel
 *
 * @param[in] cb call the callback when adc sample done
 *
 * @return voltage (mV)
 **/
int16_t adc_battery_voltage_read(adc_callback_t cb);

/**
 * @brief adc read voltage with channel, use single_ended
 *
 * @param[in] ch_p adc channel.
 * @param[in] gain adc gain. or the measure range(V)
 * @param[in] cb call the callback when adc sample done
 * @param[in] sample_num measure count
 *
 * @return voltage (mV)
 **/
int16_t adc_battery_voltage_read_by_single_pin(adc_channel_t ch_p, adc_pga_gain_t gain, adc_callback_t cb, int sample_num);

/**
 * @brief adc read voltage with channel, use differential mode
 *
 * @param[in] ch_p adc channel, adc_inp.
 * @param[in] ch_n adc channel. adc_nnp
 * @param[in] gain adc gain. or the measure range(V)
 * @param[in] cb call the callback when adc sample done
 * @param[in] sample_num measure count
 *
 * @return voltage (mV)
 **/
int16_t adc_battery_voltage_read_by_dif_pin(adc_channel_t ch_p, adc_channel_t ch_n, adc_pga_gain_t gain, adc_callback_t cb, int sample_num);

二、电压引脚初始化通道选择

  • HS6621CG 这款芯片能够使用 ADC 检测的引脚有:PIN2, PIN3, PIN7, PIN8, PIN9, PIN10, PIN11, PIN12
  • 在 GPIO 引脚初始化函数 pinmux_config(); 中进行设置
typedef enum
{
	//......
	
    // Analog mode
    PINMUX_ANALOG_BEGIN_CFG      = 200,
    PINMUX_ANALOG_CH0_PIN8_CFG,
    PINMUX_ANALOG_CH1_PIN9_CFG,
    PINMUX_ANALOG_CH2_PIN2_CFG,
    PINMUX_ANALOG_CH3_PIN3_CFG,
    PINMUX_ANALOG_CH4_PIN10_CFG,
    PINMUX_ANALOG_CH5_PIN11_CFG,
    PINMUX_ANALOG_CH6_PIN12_CFG,
    PINMUX_ANALOG_CH7_PIN7_CFG,
}pinmux_t;

三、 测量电压范围设置

/// ADC PGA Gain
typedef enum {
    ADC_PGA_GAIN_0P125        = 0,  /* when measuring voltage, the range is 0-4.2v. */
    ADC_PGA_GAIN_0P25            ,  /* when measuring voltage, the range is 0-3.2v. */
    ADC_PGA_GAIN_0P5             ,  /* when measuring voltage, the range is 0-1.6v. */
    ADC_PGA_GAIN_1               ,  /* when measuring voltage, the range is 0-0.8v. */
    ADC_PGA_GAIN_2               ,  /* when measuring voltage, the range is 0-0.4v. */
    ADC_PGA_GAIN_4               ,  /* when measuring voltage, the range is 0-0.2v. */
    ADC_PGA_GAIN_MAX
} adc_pga_gain_t;

四、调用函数接口时的 ADC 通道选择

/// ADC Channel type
typedef enum {
    ADC_CHANNEL_CHIP_TEMPERATURE   = 0, /* b0000 channel temperature. bit */
    ADC_CHANNEL_CHIP_BATTERY       ,    /* b0001 channel battery. */
    ADC_CHANNEL_CHIP_VCM           ,    /* b0010 channel vcm. */
    ADC_CHANNEL_EXTERN_CH0         ,    /* b0011 channel 0. */
    ADC_CHANNEL_EXTERN_CH1         ,    /* b0100 channel 1. */
    ADC_CHANNEL_EXTERN_CH2         ,    /* b0101 channel 2. */
    ADC_CHANNEL_EXTERN_CH3         ,    /* b0110 channel 3. */
    ADC_CHANNEL_EXTERN_CH4         ,    /* b0111 channel 4. */
    ADC_CHANNEL_EXTERN_CH5         ,    /* b1000 channel 5. */
    ADC_CHANNEL_EXTERN_CH6         ,    /* b1001 channel 6. */
    ADC_CHANNEL_EXTERN_CH7         ,    /* b1010 channel 7. */
    ADC_CHANNEL_VIP_CHG            ,    /* b1011 channel vip chg. */
    ADC_CHANNEL_VCC_VBAT_CHG       ,    /* b1100 channel vcc vbat chg. */

    ADC_CHANNEL_NUM
} adc_channel_t;

五、源码示例

void example_adc(void)
{
    float ret = 0.0;
    pinmux_config(7, PINMUX_ANALOG_CH7_PIN7_CFG);
    pinmux_config(8, PINMUX_ANALOG_CH0_PIN8_CFG);
    pinmux_config(9, PINMUX_ANALOG_CH1_PIN9_CFG);	//对 GPIO,7、8、9 引脚设置为 ADC 检测引脚
 
    while(1)
    {
    	//打印当前供电电压
        log_debug("battery = %f\n", adc_battery_voltage_read(NULL));
        
        //获取GPIO 7 上的 ADC 值
        ret = adc_battery_voltage_read_by_single_pin(ADC_CHANNEL_EXTERN_CH7, ADC_PGA_GAIN_0P125, NULL, 10);
        log_debug("single battery = %f\n", ret);
        
        //获取GPIO 8、9 上的 ADC 差值
        ret = adc_battery_voltage_read_by_dif_pin(ADC_CHANNEL_EXTERN_CH0, 
                                              ADC_CHANNEL_EXTERN_CH1,
                                              ADC_PGA_GAIN_0P125,
                                              NULL,
                                              10);
        log_debug("diff battery = %f\n", ret);
        co_delay_ms(500);
    }
}
  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值