Hello @abyssnone ,
MKE13Z 的 CMP 内置 DAC 不支持直接输出正弦波、三角波等动态变化电压,但可通过软件动态配置输出固定电压值,间接模拟简单波形。
只有 DAC0 支持通过缓冲器输出到外部引脚(参考下面截图),DAC1 输出仅可作为 ADC0 的参考输入,无法直接输出到外部引脚。
因此你可以使用PTE9,把它复用为DAC0_OUT function:
具体地,通过 CMP 控制寄存器(CMPx_C1)配置 DAC 的参考源、输出电压及使能输出。
设置CMP0_C0[EN] = 1以使能 CMP 模块,
设置CMP0_C1[DACEN] = 1以启用 DAC 电源,
通过CMP0_C1[VRSEL]选择参考电压;
接着通过CMP0_C1[VOSEL](8 位字段)设置固定输出电压,公式:DACO = (Vin / 256) × (VOSEL[7:0] + 1):
并设置CMP0_C1[DACOE] = 1以使能 DAC(仅DAC0) 输出缓冲器。
参考代码:
// 配置PCC使能CMP0时钟
PCC->CMP0 = PCC_CGC_MASK;
// 配置CMP0_C0寄存器:启用CMP模块
CMP0->C0 = CMP_C0_EN_MASK;
// 配置CMP0_C1寄存器:配置DAC
CMP0->C1 =
CMP_C1_DACEN_MASK | // DACEN=1,使能DAC
CMP_C1_VRSEL(0) | // VRSEL=0,选择Vin1(1V基准)
CMP_C1_DACOE_MASK | // DACOE=1,使能DAC0输出到引脚
CMP_C1_VOSEL(0x80); // VOSEL=0x80,输出电压=1V*(128+1)/256≈0.5V
要模拟简单动态波形(三角波、正弦波),可通过软件定时(LPIT, FTM等)更新 VOSEL 值来实现。但是注意它是有限制的,输出频率受软件更新速度限制,高频波形可能失真。如果是高频波型,建议使用PWM+滤波或者外部DAC。
BRs,
Celeste
Hello @abyssnone ,
MKE13Z 的 CMP 内置 DAC 不支持直接输出正弦波、三角波等动态变化电压,但可通过软件动态配置输出固定电压值,间接模拟简单波形。
只有 DAC0 支持通过缓冲器输出到外部引脚(参考下面截图),DAC1 输出仅可作为 ADC0 的参考输入,无法直接输出到外部引脚。
因此你可以使用PTE9,把它复用为DAC0_OUT function:
具体地,通过 CMP 控制寄存器(CMPx_C1)配置 DAC 的参考源、输出电压及使能输出。
设置CMP0_C0[EN] = 1以使能 CMP 模块,
设置CMP0_C1[DACEN] = 1以启用 DAC 电源,
通过CMP0_C1[VRSEL]选择参考电压;
接着通过CMP0_C1[VOSEL](8 位字段)设置固定输出电压,公式:DACO = (Vin / 256) × (VOSEL[7:0] + 1):
并设置CMP0_C1[DACOE] = 1以使能 DAC(仅DAC0) 输出缓冲器。
参考代码:
// 配置PCC使能CMP0时钟
PCC->CMP0 = PCC_CGC_MASK;
// 配置CMP0_C0寄存器:启用CMP模块
CMP0->C0 = CMP_C0_EN_MASK;
// 配置CMP0_C1寄存器:配置DAC
CMP0->C1 =
CMP_C1_DACEN_MASK | // DACEN=1,使能DAC
CMP_C1_VRSEL(0) | // VRSEL=0,选择Vin1(1V基准)
CMP_C1_DACOE_MASK | // DACOE=1,使能DAC0输出到引脚
CMP_C1_VOSEL(0x80); // VOSEL=0x80,输出电压=1V*(128+1)/256≈0.5V
要模拟简单动态波形(三角波、正弦波),可通过软件定时(LPIT, FTM等)更新 VOSEL 值来实现。但是注意它是有限制的,输出频率受软件更新速度限制,高频波形可能失真。如果是高频波型,建议使用PWM+滤波或者外部DAC。
BRs,
Celeste