ZHCUBZ5A September 2021 – April 2024
与前面的 PWM 部分类似,对于通用电机控制实验不支持的定制电路板、TI 电机控制套件或 C2000 MCU 也可以更改 ADC 连接。HAL 模块会配置 ADC 通道,使其与电机驱动器板正确对应。例如,LAUNCHXL-F280025C 和 BOOSTXL-DRV8323RS 组合的连接图如图 4-3 所示。以下步骤介绍了 ADC 模块配置,电路板特定的潜在更改以粗体突出显示。步骤 1 和步骤 2 对于配置新的电机驱动器板或不同的 C2000 MCU 以运行电机至关重要。
以下代码取自位于 solutions\universal_motorcontrol_lab\f28002x\drivers\include and \source 文件夹中的 hal.h 和 hal.c 文件。
#define MTR1_IU_ADC_BASE ADCA_BASE // ADCA-A11*/C0
#define MTR1_IV_ADC_BASE ADCC_BASE // ADCC-A14/C4*
#define MTR1_IW_ADC_BASE ADCC_BASE // ADCC-A15/C7*
#define MTR1_VU_ADC_BASE ADCA_BASE // ADCA-A6*
#define MTR1_VV_ADC_BASE ADCA_BASE // ADCC-A3*/C5
#define MTR1_VW_ADC_BASE ADCC_BASE // ADCA-A2/C9*
#define MTR1_VDC_ADC_BASE ADCC_BASE // ADCC-C6*
#define MTR1_POT_ADC_BASE ADCA_BASE // ADCA-A12*/C1
#define MTR1_IU_ADCRES_BASE ADCARESULT_BASE // ADCA-A11*/C0
#define MTR1_IV_ADCRES_BASE ADCCRESULT_BASE // ADCC-A14/C4*
#define MTR1_IW_ADCRES_BASE ADCCRESULT_BASE // ADCC-A15/C7*
#define MTR1_VU_ADCRES_BASE ADCARESULT_BASE // ADCA-A6*
#define MTR1_VV_ADCRES_BASE ADCARESULT_BASE // ADCC-A3*/C5
#define MTR1_VW_ADCRES_BASE ADCCRESULT_BASE // ADCA-A2/C9*
#define MTR1_VDC_ADCRES_BASE ADCCRESULT_BASE // ADCC-C6*
#define MTR1_POT_ADCRES_BASE ADCARESULT_BASE // ADCA-A12*/C1
#define MTR1_IU_ADC_CH_NUM ADC_CH_ADCIN11 // ADCA-A11*/C0
#define MTR1_IV_ADC_CH_NUM ADC_CH_ADCIN4 // ADCC-A14/C4*
#define MTR1_IW_ADC_CH_NUM ADC_CH_ADCIN7 // ADCC-A15/C7*
#define MTR1_VU_ADC_CH_NUM ADC_CH_ADCIN6 // ADCA-A6*
#define MTR1_VV_ADC_CH_NUM ADC_CH_ADCIN3 // ADCC-A3*/C5
#define MTR1_VW_ADC_CH_NUM ADC_CH_ADCIN9 // ADCA-A2/C9*
#define MTR1_VDC_ADC_CH_NUM ADC_CH_ADCIN6 // ADCC-C6*
#define MTR1_POT_ADC_CH_NUM ADC_CH_ADCIN12 // ADCA-A12*/C1
#define MTR1_IU_ADC_SOC_NUM ADC_SOC_NUMBER1 // ADCA-A11*/C10-SOC1-PPB1
#define MTR1_IV_ADC_SOC_NUM ADC_SOC_NUMBER1 // ADCC-A14/C4* -SOC1-PPB1
#define MTR1_IW_ADC_SOC_NUM ADC_SOC_NUMBER2 // ADCC-A15/C7* -SOC2-PPB2
#define MTR1_VU_ADC_SOC_NUM ADC_SOC_NUMBER4 // ADCA-A6* -SOC4
#define MTR1_VV_ADC_SOC_NUM ADC_SOC_NUMBER5 // ADCC-A3*/C5 -SOC5
#define MTR1_VW_ADC_SOC_NUM ADC_SOC_NUMBER5 // ADCA-A2/C9* -SOC5
#define MTR1_VDC_ADC_SOC_NUM ADC_SOC_NUMBER6 // ADCC-C6* -SOC6
#define MTR1_POT_ADC_SOC_NUM ADC_SOC_NUMBER6 // ADCA-A12*/C1 -SOC6
#define MTR1_IU_ADC_PPB_NUM ADC_PPB_NUMBER1 // ADCA-A11*/C10-SOC1-PPB1
#define MTR1_IV_ADC_PPB_NUM ADC_PPB_NUMBER1 // ADCC-A14/C4* -SOC1-PPB1
#define MTR1_IW_ADC_PPB_NUM ADC_PPB_NUMBER2 // ADCC-A15/C7*- SOC2-PPB2// interrupt
#define MTR1_PWM_INT_BASE MTR1_PWM_U_BASE // EPWM1
#define MTR1_ADC_INT_BASE ADCA_BASE // ADCA-A14 -SOC4
#define MTR1_ADC_INT_NUM ADC_INT_NUMBER1 // ADCA_INT1-SOC4
#define MTR1_ADC_INT_SOC ADC_SOC_NUMBER4 // ADCA_INT1-SOC4
#define MTR1_PIE_INT_NUM INT_ADCA1 // ADCA_INT1-SOC4
#define MTR1_INT_ACK_GROUP INTERRUPT_ACK_GROUP1 // ADCA_INT1-CPU_INT1// POT_M1 ADC_setupSOC(MTR1_POT_ADC_BASE, MTR1_POT_ADC_SOC_NUM, MTR1_ADC_TRIGGER_SOC, MTR1_POT_ADC_CH_NUM, MTR1_ADC_V_SAMPLEWINDOW);// read POT adc value
pADCData->potAdc = ADC_readResult(MTR1_POT_ADCRES_BASE, MTR1_POT_ADC_SOC_NUM);