基于芯片STM8S001J3M3转换时间说明
一、ADC采样转换时间
1、理论说明
存在固定总转换周期
根据STM8S0001J3数据手册:总转换周期固定为14个ADC周期;
换算公式:
总转换周期:Tcov=14个ADC周期
总转换时间:tcov =14 / fADC (us);
ADC的分频系数:fADC = fcpu/x(MHZ)(x为分频系数);
Tcov =采样周期+ x个ADC周期(包括10个周期+额外开销)
在这里X个ADC时钟周期是由硬件固定的包括10个逐次逼近周期(10位分辨率) +额外开销;
针对STM8的固定总转换周期,需要特别关注相应的分频系数,去计算出采样时间是否合适;
数据手册说明:


参考手册说明:

可以看出我们是无法通过软件配置采样周期的寄存器,只能配置对应的分频系数;
2、软件配置
设置相应的的fcpu、fADC的分频系数
这里HSI高速内部时钟选用16MHZ,X分频系数可选2、3、4、6、8、10、12、18;计算对应的采样时间;
main.C
//设置HSI的时钟
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); //16MHZ
ADC.C
/*------------------------------------------------------------------------------
* @name Bsp_ADC1Init
* @brief ADC1 初始化
* @param[in] void
* @return void
* @attention 底层GPIO、ADC初始化
* PD6->ADC_IN6/单次转换/4Mhz/GPIO触发/右对齐
------------------------------------------------------------------------------*/
void Bsp_ADC1Init(void)
{
GPIO_Init(ADC1_POWER_PORT, ADC1_POWER_PIN, GPIO_MODE_IN_FL_NO_IT);
ADC1_DeInit(); //ADC1寄存器恢复缺省值
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_POWER_CHANNEL, ADC1_PRESSEL_FCPU_D4, \
ADC1_EXTTRIG_GPIO, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL6,\
DISABLE);
ADC1_Cmd(ENABLE);
}
这里设置分频系数为4,则fADC = 4MHZ,算出总的转换时间
fADC = 4MHz = 4,000,000 Hz
1/fADC = 0.25 μs
总转换时间 = 14 × 0.125 μs = 3.5 μs
3、
(根据我们选择16MHZ,数据手册中的此时无法获取到fADC =6MHZ的情况)
值得注意的是,此型号是根据分频系数、总的转换时间去估算出相应的采样时间
数据手册中, 提及到的采样时间ts也是作为典型值3个ADC周期作为代表,从而得到对应的分频条件下的采样时间

方便我们后续根据实际需要的采样时间进行选择:
|-------|-------------|--------------|------------|-----------------|
| 分频系数 | f_ADC (MHz) | ADC周期时间 (µs) | 总转换时间 (µs) | 典型采样时间 (µs) |
| 2 | 8.0 | 0.125 | 1.75 | 0.375 |
| 3 | 5.33 | 0.188 | 2.63 | 0.563 |
| 4 | 4.0(典型) | 0.250 | 3.5 | 0.75(3个ADC) |
| 6 | 2.67 | 0.375 | 5.25 | 1.125 |
| 8 | 2.0 | 0.500 | 7.0 | 1.5 |
| 10 | 1.6 | 0.625 | 8.75 | 1.875 |
| 12 | 1.33 | 0.750 | 10.5 | 2.25 |
| 18 | 0.89 | 1.125 | 15.75 | 3.375 |
二、STM32_F103C8T6采样时间
1、理论说明
参考手册说明:


转换时间(总转换时间):
Tconv =采样时间+12.5个ADC周期(转换周期)
tconv =Tconv/fADC
(当ADC的时钟频率达到最大14MHZ时,采样周期为1.5个 ADC周期,那么Tconv=1.5+12.5=14个个周期,也就是1us 转换时间)
在这里12.5个ADC时钟周期是由硬件固定的包括12个逐次逼近周期(12位分辨率)+0.5个周期的额外开销;
也就是说,我们可以软件对fADC的时钟、采样周期进行软件配置,而不是像STM8S001J3M3一样固定采样周期,只能通过修改fADC的时钟从而修改采样时间
2、两者对比
STM8 这种"固定采样周期 + 调 fADC"
主要基于:
- 架构简单、硬件成本低
- 软件配置简单(设置Prescaler)
- 对电源、时钟噪声更"稳"(采样周期固定,不会因为周期选择不当导致噪声敏感性增加)
- 输入源阻抗要求非常苛刻(源阻抗必须很低(几十欧到几百欧级)否则采样电容来不及充电 → 出现台阶跳变现象)
- 不适合低频、高阻、高精度采样(电池采样、NTC、光敏、电化学传感器等高阻信号源 → 采样误差大、波形不稳定)
STM32 这种"可调采样周期 + 调 fADC"
主要基于:
- 极强的适应性(可依输入源阻抗、噪声、分辨率要求选择采样周期)
- 低阻信号 → 3 cycles → 高速采样
- 高阻信号 → 239 cycles → 充分充电 → 精准稳定
- 更易解决"台阶现象、不稳定波形"(采样周期拉长)
- 软件配置相对复杂(经验判断选择周期数,参数多)
- 大量采样周期会降低采样速度(如果需要快速扫描多通道,会受限。)