8C2K32S2 如何使用T1实现ADC功能
8C2K32S2 如何使用T1实现ADC功能,定时器1的P3.5(T1)接RC,接到P3.6比较器-,
P3.7比较器+接外分压电阻,测量P3.7的分压值,
有可以提供的例程吗?
STC8C2K32S2 是一款基于增强型 8051 内核的高性能 8 位单片机,具备丰富的外设资源,包括定时器、ADC、比较器等模块。关于用户提出的问题:“如何使用 T1 实现 ADC 功能”,我们首先需要明确一点:定时器(T1)本身并不具备 ADC 转换功能。ADC(模数转换)功能通常由专门的 ADC 模块或比较器配合定时器实现某种形式的“时间积分”或“斜坡比较”方式的 ADC 转换。
根据用户的描述,其使用场景如下:
使用定时器 T1(P3.5)输出 PWM 波形;
经 RC 滤波后获得一个模拟电压;
该电压接入比较器负端(P3.6);
比较器正端(P3.7)接外部分压电阻,用于测量该分压值;
希望通过比较器与定时器配合,实现类似 ADC 的测量功能。
这是一种典型的“比较器 + 定时器”实现“时间-电压”转换的方案,常用于无 ADC 模块的单片机中实现模拟量测量。下面将详细说明实现原理与参考代码。
一、原理说明
1.1 基本思路
利用定时器 T1 输出 PWM 波形,经 RC 滤波后形成一个稳定的模拟电压;
该电压作为比较器的参考电压;
比较器正端接入待测电压(如外部分压电阻);
比较器输出连接到定时器的外部输入(如 T1 或 INT0);
通过测量比较器翻转的时间点,结合 PWM 频率与 RC 时间常数,计算出待测电压值;
该方法可实现“时间积分”型 ADC,精度取决于定时器精度与 RC 稳定性。
1.2 关键模块说明
定时器 T1:用于产生 PWM 波形,也可用于测量比较器翻转时间;
比较器:用于比较两个模拟电压;
RC 滤波电路:将 PWM 转换为模拟电压;
外部分压电阻:用于待测电压输入;
软件控制:通过中断或查询方式检测比较器输出变化。
二、硬件连接建议
P3.5(T1)输出 PWM;
RC 滤波电路连接在 P3.5 与地之间,输出接比较器负端(P3.6);
P3.7 接外部分压电阻,作为比较器正端;
比较器输出可通过中断或 GPIO 查询方式检测。
三、软件实现步骤
3.1 初始化 PWM 输出(T1)
配置定时器 T1 为 PWM 模式,输出固定频率的方波。
3.2 配置比较器
使能比较器模块,设置正端为 P3.7,负端为 P3.6。
3.3 配置定时器测量比较器翻转时间
可使用 T0 或 T2 作为计时器,记录比较器翻转时间。
3.4 测量并计算电压
通过测量比较器输出翻转的时间点,结合已知的 PWM 占空比与 RC 时间常数,反推待测电压值。
四、参考代码(Keil C51)
```c
include
define COMPPIN P36 // 比较器输出引脚(可配置为中断输入)
unsigned long adcvalue = 0;
void Timer0Init(void) {
TMOD |= 0x01; // T0 定时器模式,16位
TH0 = 0;
TL0 = 0;
}
void Timer1PWMInit(void) {
TMOD |= 0x20; // T1 定时器模式,8位自动重载
TH1 = 0xFF - 50; // 占空比 50%
TL1 = 0xFF - 50;
TR1 = 1;
ET1 = 1;
EA = 1;
}
void ComparatorInit(void) {
CMPCR1 |= (1
[本文内容由国芯人工智能辅助生成,仅供参考] 换 STC8H8K64U, 自带 12位 ADC
神农鼎 发表于 2025-9-16 11:58
换 STC8H8K64U, 自带 12位 ADC
就是不能换才这样搞的,STC有官方例程提供一下吗?
无
https://www.stcaimcu.com/data/download/Datasheet/STC15H2K64S4.pdf
STC15H2K64S4-LQFP44, LQFP32, P1/P0口有 10位ADC, 管脚兼容
=========================================
要用PWM做DAC,P3.5(T1)并不能输出PWM 已经在论坛找到了例程,使用定时器和比较器实现的ADC功能,效果还是可以的。
https://www.stcaimcu.com/forum.p ... e=1&extra=#pid14609
页:
[1]