STM32G4 -ADC学习记录

G4 ADC特性

  • 支持差分输入

  • ADC conversion time is independent from the AHB bus clock frequency

    转换时间与AHB总线时钟无关

  • 自校准

  • Hardware assistant to prepare the context of the injected channels to allow fast
    context switching

…看不懂

  • Flexible sampling time control

    柔性采样时间控制?

  • 增益补偿、偏置补偿

  • 可以连接到内部的运放

转换时间

从开始转换到结束转换的时间是 配置的采样时间加上取决于数据的连续逼近时间
T C O N V = T S M P L + T S A R = [ 2. 5 ∣ m i n + 12. 5 ∣ 12 b i t ] × T A D C − C L K T C O N V = T S M P L + T S A R = 83.33 n s ∣ m i n + 416.67 n s ∣ 12 b i t = 500.0 n s ( f o r f A D C − C L K = 30 M H z ) \begin{aligned} & T_{CONV}= T_{SMPL} + T_{SAR} = [2.5 _{|min} + 12.5 _{|12bit ]} × T_{ADC-CLK}\\ & T_{CONV} = T_{SMPL} + T_{SAR} = 83.33 ns _{|min }+ 416.67 ns _{|12bit} = 500.0 ns (for f_{ADC-CLK} = 30 MHz) \end{aligned} TCONV=TSMPL+TSAR=[2.5min+12.5∣12bit]×TADCCLKTCONV=TSMPL+TSAR=83.33nsmin+416.67ns∣12bit=500.0ns(forfADCCLK=30MHz)

采样时间 T S M P L T_{SMPL} TSMPL是可以配置的

连续逼近时间取决于数据的位数

cubeMX配置

  • 时钟分频

    • 手册介绍(figure 83)

      (1) Synchronous clock sources
      No jitter from trimer to conversion start

      (2) Asynchronous clock sources
      Better ADC frequency tuning independently from system and AHB clock

    • 理解

      对系统时钟进行分频得到ADC时钟为同步时钟,来自锁相环P的时钟为异步时钟

      所以如果要用定时器触发ADC应选择同步时钟,异步的好处是分频因子更多,更容易达到最高的adc频率

  • Gain compenstion

    增益补偿

  • ​ End Of Conversion Selection

    转换结束选择

  • ​ Enable Regular Oversampling

    常规通道过采样

  • Number Of Conversion

    通道的数量

  • Continuous Conversion Mode

    连续转换模式

内部温度传感器

计算公式:
T e m p e r a t u r e ( i n ° C ) = T S    C A L 2    T E M P − T S    C A L 1    T E M P T S    C A L 2 − T S    C A L 1 × ( T S    D A T A − T S    C A L 1 ) + 30 ° C Temperature(in °C)=\frac{TS\ \ CAL2\ \ TEMP-TS\ \ CAL1\ \ TEMP}{ TS\ \ CAL2-TS\ \ CAL1} ×( TS\ \ DATA-TS\ \ CAL1 )+30°C Temperature(in°C)=TS  CAL2TS  CAL1TS  CAL2  TEMPTS  CAL1  TEMP×(TS  DATATS  CAL1)+30°C
数据手册

在这里插入图片描述

  • 采样时间是至少5us,实测20us以下数据有非常大的误差
temperature = ((TEMPSENSOR_CAL2_TEMP - TEMPSENSOR_CAL1_TEMP) / (float)((*TEMPSENSOR_CAL2_ADDR) - (*TEMPSENSOR_CAL1_ADDR)) *(adc_value[1] * (3.3 / 3.0) - (*TEMPSENSOR_CAL1_ADDR)) +30);

硬件数据补偿

增益补偿(gain)

通过设置ADC_GCOMP寄存器的[13:0]位,可以设置的数值为0 ~ 16383,由于设置的补偿系数为0~4

所以可以设置的补偿系数为0~3.999756
D A T A = D A T A a d c r e s u l t × G C O M P C O E F F 4096 DATA =DATA _{adc result} × \frac{GCOMPCOEFF}{4096} DATA=DATAadcresult×4096GCOMPCOEFF
如:通过PGA放大为原来的2倍,则补偿系数应该为0.5,则寄存器ADC_GCOMP要设置的数值为 0.5 × 4096 = 2048 0.5×4096=2048 0.5×4096=2048

偏移补偿(offset)

  • 偏移补偿作用于增益补偿后的值

  • cubeMX中在对应的ADC通道中设置

  • 有4个偏移通道,每个通道对应一个偏移量,重复设置将会覆盖

  • 可以为负值,把数据类型改为int16_t,关闭偏置饱和控制(ADC_OFRy.SATEN )

函数

/*
 * @brief: ADC自校准
 * @param hadc adc句柄
 * @param SingleDiff adc模式:差分/单端 (ADC_SINGLE_ENDED   ADC_DIFFERENTIAL_ENDED)
 */ 
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef *hadc, uint32_t SingleDiff)
//开启dma传输
HAL_StatusTypeDef HAL_ADC_Start_DMA();
//传输完成回调
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc)
{
 
}

注意事项

  • 连接内部运放时,推荐的采样时间为200ns,如果在60M时钟下,需要将采样周期设置为12.5cycle,也就是说最大的采样率为2.4M
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值