This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0G3107:在单个引脚上复用 ADC 和 COMP

Guru**** 2398695 points
Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1260770/mspm0g3107-multiplexing-adc-and-comp-on-single-pin

器件型号:MSPM0G3107
主题中讨论的其他器件:SysConfig

Champs,

客户正在开发一种非常成本敏感且空间受限的应用、并尝试将所有功能压缩到一个更小的封装中。 我们知道 ADC 和 COMP 应该使用单独的引脚、但是它们尝试在单个引脚上对它们进行多路复用、并且这两个引脚似乎都可以正常工作。 Question:

1.我们是否看到这种使用有任何问题?

2.这些问题可能是什么? 有什么需要注意的? 完成附属品后、我看不到任何会阻止此类活动的东西(除了 SysConfig 不让我们这样做、但一切都通过编程方式工作)

更具体地说,它们使用 PA27 (A0_0和 COMP0_IN0-), ADC 以序列模式运行,对多个通道进行采样,包括一个与 COMP 共享的通道,关闭 VDDA 作为基准(3.3V )并使用 DMA。

以下是他们使用的配置代码:

 

 

静态 常量 DL_ADC12_ClockConfig gADC12_0ClockConfig ={

   .clockSel      = DL_ADC12_CLOCK_SYSOSC

   .diveRatio   = DL_ADC12_CLOCK_Division_4

   .freqRange     = DL_ADC12_CLOCK_FREQ_RANGE_24_TO_32

};

 

   DL_ADC12_RESET (ADC12_0_INST);

   DL_ADC12_enablePower (ADC12_0_INST);

 

   DL_ADC12_setClockConfig (ADC12_0_INST、(DL_ADC12_ClockConfig *)&gADC12_0ClockConfig);

 

   DL_ADC12_initSeqSample (ADC12_0_INST、

       DL_ADC12_REPEATE_MODE_DISABLED、DL_ADC12_SAMPLING_SOURCE_AUTO、DL_ADC12_TRIG_SRC_SOFTWARE

       DL_ADC12_SEQ_START_ADDR_00、DL_ADC12_SEQ_END_ADDR_03、DL_ADC12_SAMP_CONV_RES_12_BIT

       DL_ADC12_SAMP_CONV_DATA_FORMAT_UNsigned);

   DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_0、

       DL_ADC12_INPUT_CHAN_2、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED

       DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);

   DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_1、

       DL_ADC12_INPUT_CHAN_3、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED

       DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);

   DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_2、

       DL_ADC12_INPUT_CHAN_7、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED

       DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);

   DL_ADC12_configConversionMem (ADC12_0_INST、ADC12_0_ADCMEM_3、

       DL_ADC12_INPUT_CHAN_0、DL_ADC12_REFERY_VOLTAGE_VDDA、DL_ADC12_SAMPLE_TIMER_SOURCE_SCOMP0、DL_ADC12_AVERAGE_MODE_DISABLED

       DL_ADC12_BURN_OUT_SOURCE_DISABLED、DL_ADC12_TRIGGER_MODE_AUTO_NEXT、DL_ADC12_Windows_COMP_MODE_DISABLED);

 

   DL_ADC12_setPowerDownMode (ADC12_0_INST、DL_ADC12_POWER_DOWN_MODE_MANUAL);

   DL_ADC12_setSampleTime0 (ADC12_0_INST、160);

 

   DL_ADC12_enableDMA (ADC12_0_INST);

   DL_ADC12_setDMASamplesCnt (ADC12_0_INST、4);

   DL_ADC12_enableDMATrigger (ADC12_0_INST、DL_ADC12_DMA_MEM3_RESULT_LOADED);

 

   DL_ADC12_clearInterruptStatus (ADC12_0_INST、(DL_ADC12_INTERRUPT_DMA_DONE));

   DL_ADC12_enableInterrupt (ADC12_0_INST、(DL_ADC12_INTERRUPT_DMA_DONE));

   DL_ADC12_enableConversions (ADC12_0_INST);

 

比较器初始化代码:

/* COMP 的定义*/

#定义 COMP_INST                                                         COMP0

#定义 COMP_INST_INT_IRQN                                       COMP0_INT_IRQn

 

/* COMP DACCODE0的定义*/

#定义 COMP_DACCODE0                                                     (144)

 

/* COMP 的 GPIO 配置*/

#定义 GPIO_COMP_IN0N_PORT                                             (GPIOA)

#定义 GPIO_COMP_IN0N_PIN                                     (DL_GPIO_PIN_27)

#定义 GPIO_COMP_IOMUX_IN0N                                    (IOMUX_PINCM60)

#定义 GPIO_COMP_IOMUX_IN0N_FUNC                (IOMUX_PINCM60_PF_UNCONNECTED)

 

/* COMP 初始化*/

静态 常量 DL_COMP_Config gCOMPConfig ={

   .channelEnable = DL_COMP_ENABLE_CHANNEG

   .mode         = DL_COMP_MODE_ULP

   .negChannel   = DL_COMP_IMSEL_CHANNEL_0

   .posChannel   = DL_COMP_IPSEL_CHANNEL_0

   .hysteresis   = DL_COMP_hysteresis_20

   .POLARITY     = DL_COMP_POLICY_NON_INV

};

静态 常量 DL_COMP_RefVoltageConfig gCOMPVRefConfig ={

   .mode          = DL_COMP_REF_MODE_STATIC、

   .source        = DL_COMP_REF_SOURCE_VDDA_DAC

   .terminalSelect = DL_COMP_REF_ENTER_SELECT_POS

   .controlSelect = DL_COMP_DAC_CONTROL_SW

   .inputSelect   = DL_COMP_DAC_INPUT_DACCODE0

};

 

   DL_COMP_RESET (COMP_INST);

 

   DL_COMP_enablePower (COMP_INST);

 

   delay_cycles (power_startup_delay);

 

   DL_COMP_init (COMP_INST、(DL_COMP_Config *)&gCOMPConfig);

   DL_COMP_refVoltageInit (COMP_INST、(DL_COMP_RefVoltageConfig *)&gCOMPVRefConfig);

   DL_COMP_setDACCode0 (COMP_INST、COMP_DACCODE0);

   DL_COMP_enableInterrupt (COMP_INST、(DL_COMP_INTERRUPT_OUTPUT_EDGE | DL_COMP_INTERRUPT_OUTPUT_EDGE_INV));

 

   DL_COMP_ENABLE (COMP_INST);

 

谢谢!

迈克尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Michael、您好!

    我认为、 为 ADC 输入和 COMP 输入使用同一引脚是比较好的。  

    您可能需要注意的一点是、在 ADC 采样期间 、它可能会导致输入引脚上发生抖动。 这可能会触发 COMP。 您可以考虑使用 COMP 输出滤波器功能来滤除抖动。

    此致、

    现金豪