<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>Kinetis MicrocontrollersのトピックKV56 HSADC Does Not Seem To Be Converting Correctly</title>
    <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV56-HSADC-Does-Not-Seem-To-Be-Converting-Correctly/m-p/1485684#M63522</link>
    <description>&lt;P&gt;I followed the&amp;nbsp;twrkv58f220m_hsadc_dual_parallel_conversion example for my own project but did not do a differential conversion and the HSADCs do not seem to be converting correctly. I am using the KV56 100 pin part. I expect 2048 counts on Ph A, B, and C below and the voltage matches what I'd expect for 2048 counts but I am getting around 4095 counts. Same below with Dc bus voltage below. I expect 0 counts but seem to be getting a few counts making the voltage reading noisy.&amp;nbsp;&lt;/P&gt;&lt;P&gt;These are the pins I am using:&lt;/P&gt;&lt;TABLE width="600"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="64"&gt;Pin&lt;/TD&gt;&lt;TD width="64"&gt;Name&lt;/TD&gt;&lt;TD width="258"&gt;Pin selection&lt;/TD&gt;&lt;TD width="214"&gt;HSADC connection&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;HSADC1A_CH2 / HSADC0A_CH2&lt;/TD&gt;&lt;TD&gt;HSADC0A_CH2 / HSADC1A_CH2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;HSADC1B _CH2 / HSADC0A_CH10&lt;/TD&gt;&lt;TD&gt;HSADC0A_CH6 mux ch10 / HSADC1B_CH2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PTB0&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;HSADC0B _CH2&lt;/TD&gt;&lt;TD&gt;HSADC0B_CH2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PTB2&lt;/TD&gt;&lt;TD&gt;DC&lt;/TD&gt;&lt;TD&gt;HSADC0A _CH14&lt;/TD&gt;&lt;TD&gt;HSADC0A_CH6 mux ch 14&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Below is my code - (I originally tried to use 2 channels on HSDC0 and 2 channels on HSADC1 but I commented out HSADC1 because I thought maybe that approach was causing issues).&lt;/P&gt;&lt;P&gt;Init function:&amp;nbsp;&lt;/P&gt;&lt;P&gt;HSADC_GetDefaultConfig(&amp;amp;hsadcConfigStruct);&lt;BR /&gt;HSADC_Init(HSADC0_BASEADDR, &amp;amp;hsadcConfigStruct);&lt;BR /&gt;//HSADC_Init(HSADC1_BASEADDR, &amp;amp;hsadcConfigStruct);&lt;/P&gt;&lt;P&gt;/* Configure each converter. */&lt;BR /&gt;HSADC_GetDefaultConverterConfig(&amp;amp;hsadcConverterConfigStruct);&lt;BR /&gt;hsadcConverterConfigStruct.powerUpCalibrationModeMask = kHSADC_CalibrationModeSingleEnded;&lt;BR /&gt;hsadcConverterConfigStruct.clockDivisor = 3U;&lt;/P&gt;&lt;P&gt;/* Enable the calibration in power up period. */&lt;BR /&gt;HSADC_SetConverterConfig(HSADC0_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, &amp;amp;hsadcConverterConfigStruct);&lt;BR /&gt;//HSADC_SetConverterConfig(HSADC1_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, &amp;amp;hsadcConverterConfigStruct);&lt;/P&gt;&lt;P&gt;/* Enable the power for each converter. */&lt;BR /&gt;HSADC_EnableConverterPower(HSADC0_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;BR /&gt;//HSADC_EnableConverterPower(HSADC1_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;BR /&gt;while (&lt;BR /&gt;(kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) ==&lt;BR /&gt;((kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) &amp;amp; HSADC_GetStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* Wait the calibration process complete. None End of Scan flag will be set after power up calibration process. */&lt;BR /&gt;while ((kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag) !=&lt;BR /&gt;((kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag) &amp;amp;&lt;BR /&gt;HSADC_GetStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;}&lt;BR /&gt;// while (&lt;BR /&gt;// (kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) ==&lt;BR /&gt;// ((kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) &amp;amp; HSADC_GetStatusFlags(HSADC1_BASEADDR)))&lt;BR /&gt;// {&lt;BR /&gt;// }&lt;/P&gt;&lt;P&gt;HSADC_ClearStatusFlags(HSADC0_BASEADDR,&lt;BR /&gt;(kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag));&lt;BR /&gt;//&lt;BR /&gt;// HSADC_ClearStatusFlags(HSADC1_BASEADDR,&lt;BR /&gt;// (kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag));&lt;/P&gt;&lt;P&gt;/* Make each converter exit stop mode. */&lt;BR /&gt;HSADC_EnableConverter(HSADC0_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;BR /&gt;// HSADC_EnableConverter(HSADC1_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;/P&gt;&lt;P&gt;ret = ConfigureFastADCSamples();&lt;/P&gt;&lt;P&gt;Function to configure the channels:&lt;/P&gt;&lt;P&gt;/* Configure the samples. */&lt;BR /&gt;HSADC_GetDefaultSampleConfig(&amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;/* For converter HSADC0 Conv A. */&lt;BR /&gt;// HSADC0A_CH14 (CH6 mux 4)&lt;BR /&gt;hsadcSampleConfigStruct.channelNumber = DCBUSV_HSADC0A_CH6_CHANNEL_NUM1;&lt;BR /&gt;hsadcSampleConfigStruct.channel67MuxNumber = DCBUSV_HSADC0A_CH6_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;hsadcSampleConfigStruct.enableDifferentialPair = 0;//DCBUSV_HSADC0A_CH6_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;// hsadcSampleConfigStruct.offsetValue = 0;&lt;BR /&gt;HSADC_SetSampleConfig(HSADC0_BASEADDR, 0U, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;/* For converter HSADC1 Conv A. */&lt;BR /&gt;// HSADC0A CH2&lt;BR /&gt;hsadcSampleConfigStruct.channelNumber = PHA_HSADC1A_CH2_CHANNEL_NUM1;&lt;BR /&gt;hsadcSampleConfigStruct.channel67MuxNumber = PHA_HSADC1A_CH2_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;hsadcSampleConfigStruct.enableDifferentialPair = 0;//PHA_HSADC1A_CH2_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;//hsadcSampleConfigStruct.offsetValue = MOTOR_PHASE_OFFSET;&lt;BR /&gt;HSADC_SetSampleConfig(HSADC0_BASEADDR, 1U, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;/* For converter HSADC0 Conv B. */&lt;BR /&gt;/* For converter B.&lt;BR /&gt;* In HSADC_SetSampleConfig(), the channel number 0~7 represents input 0~7 of converter A and channel number 8~15&lt;BR /&gt;* represents input 0~7 of converter B.&lt;BR /&gt;*/&lt;BR /&gt;// HSADC0B_CH2&lt;BR /&gt;hsadcSampleConfigStruct.channelNumber = (PHC_HSADC0B_CH2_CHANNEL_NUM1 + 8U);&lt;BR /&gt;hsadcSampleConfigStruct.channel67MuxNumber = PHC_HSADC0B_CH2_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;hsadcSampleConfigStruct.enableDifferentialPair = 0; //PHC_HSADC0B_CH2_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;//hsadcSampleConfigStruct.offsetValue = MOTOR_PHASE_OFFSET;&lt;BR /&gt;HSADC_SetSampleConfig(HSADC0_BASEADDR, 8U, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;// /* For converter HSADC1 Conv B. */&lt;BR /&gt;// /* For converter B.&lt;BR /&gt;// * In HSADC_SetSampleConfig(), the channel number 0~7 represents input 0~7 of converter A and channel number 8~15&lt;BR /&gt;// * represents input 0~7 of converter B.&lt;BR /&gt;// */&lt;BR /&gt;// hsadcSampleConfigStruct.channelNumber = (PHB_HSADC1B_CH2_CHANNEL_NUM1 + 8U);&lt;BR /&gt;// hsadcSampleConfigStruct.channel67MuxNumber = PHB_HSADC1B_CH2_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;// hsadcSampleConfigStruct.enableDifferentialPair = 0; //PHB_HSADC1B_CH2_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;// //hsadcSampleConfigStruct.offsetValue = MOTOR_PHASE_OFFSET;&lt;BR /&gt;// HSADC_SetSampleConfig(HSADC1_BASEADDR, PHB_HSADC1B_SAMPLE_NUM, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;uint16_t sampleMaskRet = HSADC_SAMPLE_MASK(0U) /* For converter A. */&lt;BR /&gt;| HSADC_SAMPLE_MASK(1U) /* For converter A. */&lt;BR /&gt;| HSADC_SAMPLE_MASK(8U) /* For converter B. */&lt;BR /&gt;| HSADC_SAMPLE_MASK(9U); /* For converter B. */&lt;BR /&gt;HSADC_EnableSample(HSADC0_BASEADDR, sampleMaskRet, true);&lt;BR /&gt;HSADC_EnableSample(HSADC0_BASEADDR, (uint16_t)(~sampleMaskRet), false); /* Disable other sample slots. */&lt;/P&gt;&lt;P&gt;Trigger a conversion:&lt;/P&gt;&lt;P&gt;void TriggerFastADCConversion()&lt;BR /&gt;{&lt;BR /&gt;// Block while we manually trigger ADC conversion for fast samples&lt;BR /&gt;// Using HSADC this will only block for 900ns with a 75MHz clock selection&lt;BR /&gt;/* Trigger the converter.&lt;BR /&gt;* Trigger converter A would execute both converter's conversion when in&lt;BR /&gt;* "kHSADC_DualConverterWorkAsTriggeredParallel" and simultaneous work mode.&lt;BR /&gt;*/&lt;/P&gt;&lt;P&gt;uint16_t status = 0;&lt;/P&gt;&lt;P&gt;HSADC_DoSoftwareTriggerConverter(HSADC0_BASEADDR, kHSADC_ConverterA);&lt;BR /&gt;//HSADC_DoSoftwareTriggerConverter(HSADC1_BASEADDR, kHSADC_ConverterA);&lt;/P&gt;&lt;P&gt;/* Wait the conversion to be done. */&lt;BR /&gt;while (kHSADC_ConverterAEndOfScanFlag !=&lt;BR /&gt;(kHSADC_ConverterAEndOfScanFlag &amp;amp; HSADC_GetStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;// /* Wait the conversion to be done. */&lt;BR /&gt;// while (kHSADC_ConverterAEndOfScanFlag !=&lt;BR /&gt;// (kHSADC_ConverterAEndOfScanFlag &amp;amp; HSADC_GetStatusFlags(HSADC1_BASEADDR)))&lt;BR /&gt;// {&lt;BR /&gt;// }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;And then to read the result:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void MCDRV_RawAdcGet(GE_Primary_Container_t *pContainer)&lt;BR /&gt;{&lt;BR /&gt;int16_t phARaw = 0;&lt;BR /&gt;int16_t phBRaw = 0;&lt;BR /&gt;int16_t phCRaw = 0;&lt;BR /&gt;int16_t dcBus_Raw = 0;&lt;/P&gt;&lt;P&gt;if (sampleMask == (sampleMask &amp;amp; HSADC_GetSampleReadyStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;phARaw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 1U) &amp;amp; 0x0FFF));&lt;BR /&gt;phBRaw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 9U) &amp;amp; 0x0FFF));&lt;BR /&gt;phCRaw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 8U) &amp;amp; 0x0FFF));&lt;BR /&gt;dcBus_Raw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 0U) &amp;amp; 0x0FFF));&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.mDcBusRaw = dcBus_Raw;&lt;/P&gt;&lt;P&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.m3PhABCRaw.PhA = phARaw;&lt;BR /&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.m3PhABCRaw.PhB = phBRaw;&lt;BR /&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.m3PhABCRaw.PhC = phCRaw;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Wed, 06 Jul 2022 20:18:01 GMT</pubDate>
    <dc:creator>derekcook</dc:creator>
    <dc:date>2022-07-06T20:18:01Z</dc:date>
    <item>
      <title>KV56 HSADC Does Not Seem To Be Converting Correctly</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV56-HSADC-Does-Not-Seem-To-Be-Converting-Correctly/m-p/1485684#M63522</link>
      <description>&lt;P&gt;I followed the&amp;nbsp;twrkv58f220m_hsadc_dual_parallel_conversion example for my own project but did not do a differential conversion and the HSADCs do not seem to be converting correctly. I am using the KV56 100 pin part. I expect 2048 counts on Ph A, B, and C below and the voltage matches what I'd expect for 2048 counts but I am getting around 4095 counts. Same below with Dc bus voltage below. I expect 0 counts but seem to be getting a few counts making the voltage reading noisy.&amp;nbsp;&lt;/P&gt;&lt;P&gt;These are the pins I am using:&lt;/P&gt;&lt;TABLE width="600"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD width="64"&gt;Pin&lt;/TD&gt;&lt;TD width="64"&gt;Name&lt;/TD&gt;&lt;TD width="258"&gt;Pin selection&lt;/TD&gt;&lt;TD width="214"&gt;HSADC connection&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;18&lt;/TD&gt;&lt;TD&gt;A&lt;/TD&gt;&lt;TD&gt;HSADC1A_CH2 / HSADC0A_CH2&lt;/TD&gt;&lt;TD&gt;HSADC0A_CH2 / HSADC1A_CH2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;20&lt;/TD&gt;&lt;TD&gt;B&lt;/TD&gt;&lt;TD&gt;HSADC1B _CH2 / HSADC0A_CH10&lt;/TD&gt;&lt;TD&gt;HSADC0A_CH6 mux ch10 / HSADC1B_CH2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PTB0&lt;/TD&gt;&lt;TD&gt;C&lt;/TD&gt;&lt;TD&gt;HSADC0B _CH2&lt;/TD&gt;&lt;TD&gt;HSADC0B_CH2&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;PTB2&lt;/TD&gt;&lt;TD&gt;DC&lt;/TD&gt;&lt;TD&gt;HSADC0A _CH14&lt;/TD&gt;&lt;TD&gt;HSADC0A_CH6 mux ch 14&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;Below is my code - (I originally tried to use 2 channels on HSDC0 and 2 channels on HSADC1 but I commented out HSADC1 because I thought maybe that approach was causing issues).&lt;/P&gt;&lt;P&gt;Init function:&amp;nbsp;&lt;/P&gt;&lt;P&gt;HSADC_GetDefaultConfig(&amp;amp;hsadcConfigStruct);&lt;BR /&gt;HSADC_Init(HSADC0_BASEADDR, &amp;amp;hsadcConfigStruct);&lt;BR /&gt;//HSADC_Init(HSADC1_BASEADDR, &amp;amp;hsadcConfigStruct);&lt;/P&gt;&lt;P&gt;/* Configure each converter. */&lt;BR /&gt;HSADC_GetDefaultConverterConfig(&amp;amp;hsadcConverterConfigStruct);&lt;BR /&gt;hsadcConverterConfigStruct.powerUpCalibrationModeMask = kHSADC_CalibrationModeSingleEnded;&lt;BR /&gt;hsadcConverterConfigStruct.clockDivisor = 3U;&lt;/P&gt;&lt;P&gt;/* Enable the calibration in power up period. */&lt;BR /&gt;HSADC_SetConverterConfig(HSADC0_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, &amp;amp;hsadcConverterConfigStruct);&lt;BR /&gt;//HSADC_SetConverterConfig(HSADC1_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, &amp;amp;hsadcConverterConfigStruct);&lt;/P&gt;&lt;P&gt;/* Enable the power for each converter. */&lt;BR /&gt;HSADC_EnableConverterPower(HSADC0_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;BR /&gt;//HSADC_EnableConverterPower(HSADC1_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;BR /&gt;while (&lt;BR /&gt;(kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) ==&lt;BR /&gt;((kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) &amp;amp; HSADC_GetStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;/* Wait the calibration process complete. None End of Scan flag will be set after power up calibration process. */&lt;BR /&gt;while ((kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag) !=&lt;BR /&gt;((kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag) &amp;amp;&lt;BR /&gt;HSADC_GetStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;}&lt;BR /&gt;// while (&lt;BR /&gt;// (kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) ==&lt;BR /&gt;// ((kHSADC_ConverterAPowerDownFlag | kHSADC_ConverterBPowerDownFlag) &amp;amp; HSADC_GetStatusFlags(HSADC1_BASEADDR)))&lt;BR /&gt;// {&lt;BR /&gt;// }&lt;/P&gt;&lt;P&gt;HSADC_ClearStatusFlags(HSADC0_BASEADDR,&lt;BR /&gt;(kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag));&lt;BR /&gt;//&lt;BR /&gt;// HSADC_ClearStatusFlags(HSADC1_BASEADDR,&lt;BR /&gt;// (kHSADC_ConverterAEndOfCalibrationFlag | kHSADC_ConverterBEndOfCalibrationFlag));&lt;/P&gt;&lt;P&gt;/* Make each converter exit stop mode. */&lt;BR /&gt;HSADC_EnableConverter(HSADC0_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;BR /&gt;// HSADC_EnableConverter(HSADC1_BASEADDR, kHSADC_ConverterA | kHSADC_ConverterB, true);&lt;/P&gt;&lt;P&gt;ret = ConfigureFastADCSamples();&lt;/P&gt;&lt;P&gt;Function to configure the channels:&lt;/P&gt;&lt;P&gt;/* Configure the samples. */&lt;BR /&gt;HSADC_GetDefaultSampleConfig(&amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;/* For converter HSADC0 Conv A. */&lt;BR /&gt;// HSADC0A_CH14 (CH6 mux 4)&lt;BR /&gt;hsadcSampleConfigStruct.channelNumber = DCBUSV_HSADC0A_CH6_CHANNEL_NUM1;&lt;BR /&gt;hsadcSampleConfigStruct.channel67MuxNumber = DCBUSV_HSADC0A_CH6_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;hsadcSampleConfigStruct.enableDifferentialPair = 0;//DCBUSV_HSADC0A_CH6_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;// hsadcSampleConfigStruct.offsetValue = 0;&lt;BR /&gt;HSADC_SetSampleConfig(HSADC0_BASEADDR, 0U, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;/* For converter HSADC1 Conv A. */&lt;BR /&gt;// HSADC0A CH2&lt;BR /&gt;hsadcSampleConfigStruct.channelNumber = PHA_HSADC1A_CH2_CHANNEL_NUM1;&lt;BR /&gt;hsadcSampleConfigStruct.channel67MuxNumber = PHA_HSADC1A_CH2_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;hsadcSampleConfigStruct.enableDifferentialPair = 0;//PHA_HSADC1A_CH2_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;//hsadcSampleConfigStruct.offsetValue = MOTOR_PHASE_OFFSET;&lt;BR /&gt;HSADC_SetSampleConfig(HSADC0_BASEADDR, 1U, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;/* For converter HSADC0 Conv B. */&lt;BR /&gt;/* For converter B.&lt;BR /&gt;* In HSADC_SetSampleConfig(), the channel number 0~7 represents input 0~7 of converter A and channel number 8~15&lt;BR /&gt;* represents input 0~7 of converter B.&lt;BR /&gt;*/&lt;BR /&gt;// HSADC0B_CH2&lt;BR /&gt;hsadcSampleConfigStruct.channelNumber = (PHC_HSADC0B_CH2_CHANNEL_NUM1 + 8U);&lt;BR /&gt;hsadcSampleConfigStruct.channel67MuxNumber = PHC_HSADC0B_CH2_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;hsadcSampleConfigStruct.enableDifferentialPair = 0; //PHC_HSADC0B_CH2_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;//hsadcSampleConfigStruct.offsetValue = MOTOR_PHASE_OFFSET;&lt;BR /&gt;HSADC_SetSampleConfig(HSADC0_BASEADDR, 8U, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;// /* For converter HSADC1 Conv B. */&lt;BR /&gt;// /* For converter B.&lt;BR /&gt;// * In HSADC_SetSampleConfig(), the channel number 0~7 represents input 0~7 of converter A and channel number 8~15&lt;BR /&gt;// * represents input 0~7 of converter B.&lt;BR /&gt;// */&lt;BR /&gt;// hsadcSampleConfigStruct.channelNumber = (PHB_HSADC1B_CH2_CHANNEL_NUM1 + 8U);&lt;BR /&gt;// hsadcSampleConfigStruct.channel67MuxNumber = PHB_HSADC1B_CH2_CHANNEL67_NUM1_MUXNUM;&lt;BR /&gt;// hsadcSampleConfigStruct.enableDifferentialPair = 0; //PHB_HSADC1B_CH2_CHANNEL67_NUM1_ENABLE_DIFF;&lt;BR /&gt;// //hsadcSampleConfigStruct.offsetValue = MOTOR_PHASE_OFFSET;&lt;BR /&gt;// HSADC_SetSampleConfig(HSADC1_BASEADDR, PHB_HSADC1B_SAMPLE_NUM, &amp;amp;hsadcSampleConfigStruct);&lt;/P&gt;&lt;P&gt;uint16_t sampleMaskRet = HSADC_SAMPLE_MASK(0U) /* For converter A. */&lt;BR /&gt;| HSADC_SAMPLE_MASK(1U) /* For converter A. */&lt;BR /&gt;| HSADC_SAMPLE_MASK(8U) /* For converter B. */&lt;BR /&gt;| HSADC_SAMPLE_MASK(9U); /* For converter B. */&lt;BR /&gt;HSADC_EnableSample(HSADC0_BASEADDR, sampleMaskRet, true);&lt;BR /&gt;HSADC_EnableSample(HSADC0_BASEADDR, (uint16_t)(~sampleMaskRet), false); /* Disable other sample slots. */&lt;/P&gt;&lt;P&gt;Trigger a conversion:&lt;/P&gt;&lt;P&gt;void TriggerFastADCConversion()&lt;BR /&gt;{&lt;BR /&gt;// Block while we manually trigger ADC conversion for fast samples&lt;BR /&gt;// Using HSADC this will only block for 900ns with a 75MHz clock selection&lt;BR /&gt;/* Trigger the converter.&lt;BR /&gt;* Trigger converter A would execute both converter's conversion when in&lt;BR /&gt;* "kHSADC_DualConverterWorkAsTriggeredParallel" and simultaneous work mode.&lt;BR /&gt;*/&lt;/P&gt;&lt;P&gt;uint16_t status = 0;&lt;/P&gt;&lt;P&gt;HSADC_DoSoftwareTriggerConverter(HSADC0_BASEADDR, kHSADC_ConverterA);&lt;BR /&gt;//HSADC_DoSoftwareTriggerConverter(HSADC1_BASEADDR, kHSADC_ConverterA);&lt;/P&gt;&lt;P&gt;/* Wait the conversion to be done. */&lt;BR /&gt;while (kHSADC_ConverterAEndOfScanFlag !=&lt;BR /&gt;(kHSADC_ConverterAEndOfScanFlag &amp;amp; HSADC_GetStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;// /* Wait the conversion to be done. */&lt;BR /&gt;// while (kHSADC_ConverterAEndOfScanFlag !=&lt;BR /&gt;// (kHSADC_ConverterAEndOfScanFlag &amp;amp; HSADC_GetStatusFlags(HSADC1_BASEADDR)))&lt;BR /&gt;// {&lt;BR /&gt;// }&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;And then to read the result:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;void MCDRV_RawAdcGet(GE_Primary_Container_t *pContainer)&lt;BR /&gt;{&lt;BR /&gt;int16_t phARaw = 0;&lt;BR /&gt;int16_t phBRaw = 0;&lt;BR /&gt;int16_t phCRaw = 0;&lt;BR /&gt;int16_t dcBus_Raw = 0;&lt;/P&gt;&lt;P&gt;if (sampleMask == (sampleMask &amp;amp; HSADC_GetSampleReadyStatusFlags(HSADC0_BASEADDR)))&lt;BR /&gt;{&lt;BR /&gt;phARaw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 1U) &amp;amp; 0x0FFF));&lt;BR /&gt;phBRaw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 9U) &amp;amp; 0x0FFF));&lt;BR /&gt;phCRaw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 8U) &amp;amp; 0x0FFF));&lt;BR /&gt;dcBus_Raw = ((int16_t) (HSADC_GetSampleResultValue(HSADC0_BASEADDR, 0U) &amp;amp; 0x0FFF));&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.mDcBusRaw = dcBus_Raw;&lt;/P&gt;&lt;P&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.m3PhABCRaw.PhA = phARaw;&lt;BR /&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.m3PhABCRaw.PhB = phBRaw;&lt;BR /&gt;pContainer-&amp;gt;mpDrive-&amp;gt;mAcPMSMController.m3PhABCRaw.PhC = phCRaw;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 06 Jul 2022 20:18:01 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV56-HSADC-Does-Not-Seem-To-Be-Converting-Correctly/m-p/1485684#M63522</guid>
      <dc:creator>derekcook</dc:creator>
      <dc:date>2022-07-06T20:18:01Z</dc:date>
    </item>
    <item>
      <title>Re: KV56 HSADC Does Not Seem To Be Converting Correctly</title>
      <link>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV56-HSADC-Does-Not-Seem-To-Be-Converting-Correctly/m-p/1486364#M63534</link>
      <description>&lt;P&gt;I think I figured this out - my ADC was only reading 0 to 0.38V and then rolling over. The problem was that I did not realize the format of the RESULT register:&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="derekcook_0-1657220210014.png" style="width: 400px;"&gt;&lt;img src="https://community.nxp.com/t5/image/serverpage/image-id/185984i32F26033B5395E88/image-size/medium?v=v2&amp;amp;px=400" role="button" title="derekcook_0-1657220210014.png" alt="derekcook_0-1657220210014.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;The ADC conversion is shifted left by 3 bits. Therefore, I need to shift the value right by 3 bits to read 12 bit 0 to 4095 number.&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Thu, 07 Jul 2022 18:57:05 GMT</pubDate>
      <guid>https://community.nxp.com/t5/Kinetis-Microcontrollers/KV56-HSADC-Does-Not-Seem-To-Be-Converting-Correctly/m-p/1486364#M63534</guid>
      <dc:creator>derekcook</dc:creator>
      <dc:date>2022-07-07T18:57:05Z</dc:date>
    </item>
  </channel>
</rss>

