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.5∣min+12.5∣12bit]×TADC−CLKTCONV=TSMPL+TSAR=83.33ns∣min+416.67ns∣12bit=500.0ns(forfADC−CLK=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 CAL2−TS CAL1TS CAL2 TEMP−TS CAL1 TEMP×(TS DATA−TS 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