NXP MCU 技术论坛
直播中

Arvinhw

9年用户 911经验值
擅长:嵌入式技术
私信 关注
[问答]

使用MPC5748G Micro进行ADC转换,如何配置ADC?

我正在使用 MPC5748G Micro 进行 ADC 转换。我正在使用 12 伏输入的电路。我需要使用 ADC 监控该电路的输入,因为我使用的是带 3.3 伏参考电压的分压器电路。我不断地通过 ADC 通道读取读数,但读数不是恒定的,而是不断变化的。我正在为 ADC 使用以下配置。请建议是否需要任何更正。
void ADC1_PadConfig_ChanSelect(void) {
SIUL2.MSCR[PD0].B.APC = 1; /* PD0 = 函数 ADC1_P[0] = ADC 1 通道 0 */
ADC_1.NCMR0.B.CH0 = 1; /* 为 ADC1 上的正常转换启用通道 0 */
}
void ADC1_Calibration(void) {
uint32_t __attribute__ ((未使用)) ADC1_Calibration_Failed = 1; /* 校准还没有通过 */
ADC_1.MCR.B.PWDN = 1; /* 断电以开始校准过程 */
ADC_1.MCR.B.ADCLKSEL = 0; /* ADC 时钟 = 总线时钟/2 (80/2 MHz FS80) */
/* 注意:校准要求将其设置为最大 40MHz 以获得最佳结果 */
ADC_1.CALBISTREG.B.TEST_EN = 1; /* 启用校准测试 */
ADC_1.MCR.B.PWDN = 0; /* 启动校准测试的备份电源 */
while(ADC_1.CALBISTREG.B.C_T_BUSY); /* 等待校准完成 */
if(ADC_1.MSR.B.CALIBRTD) { /* 如果校准成功 */
ADC1_Calibration_Failed = 0; /* 校准成功 */
}
else {
ADC1_Calibration_Failed = 1; /* 校准不成功 */
}
}
void ADC1_Init(void) { /* 初始化 ADC1 模块并启动正常扫描模式 */
ADC_1.MCR.B.PWDN = 1; /* 断电开始模块初始化 */
ADC_1.MCR.B.OWREN = 0; /* 启用覆盖旧的转换结果 */
ADC_1.MCR.B.MODE = 1; /* 使用扫描模式 (1) 而不是单次模式 */
ADC_1.MCR.B.ADCLKSEL = 1; /* ADC 时钟 = FS80 总线时钟(此处为 80 MHz)*/
ADC_1.MCR.B.PWDN = 0;/* ADC_1 准备接收对话触发器 */
ADC_1.MCR.B.NSTART = 1; /* 启动正常扫描的触发器 */
}
void ADC1_Read_Chan_0 (void) { /* 读取转换结果 */
Result= ADC_1.CDR[0].B.CDATA; /* 读取通道 0 转换结果数据 */
ResultInMv = (uint16_t) (ADC_VREF*Result/0xFFF); /* 转换为 mV */
}

                                       
                                                



回帖(1)

闫颖慧

2023-3-15 10:20:49
你能具体说明它有多少变化吗?转换精度水平还取决于噪声水平和 ADC 输入阻抗,通常您会看到转换结果有点浮动,除非是高精度模拟设计,EVB 不是这种情况。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分