关于MKE13Z的DAC输出

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 
已解决

关于MKE13Z的DAC输出

跳至解决方案
228 次查看
abyssnone
Contributor II

我可以使用MKE13Z的CMP里的DAC输出指定的变化电压吗?例如正弦波,三角波。如果可以我该选哪个引脚呢?该如何配置?希望解答。

abyssnone_0-1755499013853.png

abyssnone_1-1755499091396.png

abyssnone_2-1755499261192.png

 

 

0 项奖励
回复
1 解答
169 次查看
Celeste_Liu
NXP Employee
NXP Employee

Hello @abyssnone ,

MKE13Z 的 CMP 内置 DAC 不支持直接输出正弦波、三角波等动态变化电压,但可通过软件动态配置输出固定电压值,间接模拟简单波形。

只有 DAC0 支持通过缓冲器输出到外部引脚(参考下面截图),DAC1 输出仅可作为 ADC0 的参考输入,无法直接输出到外部引脚。

Celeste_Liu_0-1755674610377.png

因此你可以使用PTE9,把它复用为DAC0_OUT function:

Celeste_Liu_0-1755681183740.png


具体地,通过 CMP 控制寄存器(CMPx_C1)配置 DAC 的参考源、输出电压及使能输出。
设置CMP0_C0[EN] = 1以使能 CMP 模块,

Celeste_Liu_1-1755681422770.png

 

设置CMP0_C1[DACEN] = 1以启用 DAC 电源,

Celeste_Liu_2-1755681541596.png

 

通过CMP0_C1[VRSEL]选择参考电压;

Celeste_Liu_3-1755681566031.png

 


接着通过CMP0_C1[VOSEL](8 位字段)设置固定输出电压,公式:DACO = (Vin / 256) × (VOSEL[7:0] + 1):

Celeste_Liu_4-1755681587189.png


并设置CMP0_C1[DACOE] = 1以使能 DAC(仅DAC0) 输出缓冲器。

Celeste_Liu_5-1755681645135.png

参考代码:

// 配置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

 

在原帖中查看解决方案

0 项奖励
回复
3 回复数
170 次查看
Celeste_Liu
NXP Employee
NXP Employee

Hello @abyssnone ,

MKE13Z 的 CMP 内置 DAC 不支持直接输出正弦波、三角波等动态变化电压,但可通过软件动态配置输出固定电压值,间接模拟简单波形。

只有 DAC0 支持通过缓冲器输出到外部引脚(参考下面截图),DAC1 输出仅可作为 ADC0 的参考输入,无法直接输出到外部引脚。

Celeste_Liu_0-1755674610377.png

因此你可以使用PTE9,把它复用为DAC0_OUT function:

Celeste_Liu_0-1755681183740.png


具体地,通过 CMP 控制寄存器(CMPx_C1)配置 DAC 的参考源、输出电压及使能输出。
设置CMP0_C0[EN] = 1以使能 CMP 模块,

Celeste_Liu_1-1755681422770.png

 

设置CMP0_C1[DACEN] = 1以启用 DAC 电源,

Celeste_Liu_2-1755681541596.png

 

通过CMP0_C1[VRSEL]选择参考电压;

Celeste_Liu_3-1755681566031.png

 


接着通过CMP0_C1[VOSEL](8 位字段)设置固定输出电压,公式:DACO = (Vin / 256) × (VOSEL[7:0] + 1):

Celeste_Liu_4-1755681587189.png


并设置CMP0_C1[DACOE] = 1以使能 DAC(仅DAC0) 输出缓冲器。

Celeste_Liu_5-1755681645135.png

参考代码:

// 配置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

 

0 项奖励
回复
139 次查看
abyssnone
Contributor II
如果使用PWM+滤波的方式,PWM配置方式可解答一下吗?
0 项奖励
回复
133 次查看
Celeste_Liu
NXP Employee
NXP Employee

您能帮忙新建一个post吗,我在那边回复您。

0 项奖励
回复