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.

[参考译文] TMS320F280025C:温度传感器不起作用

Guru**** 2188665 points
Other Parts Discussed in Thread: TMS320F280025C, C2000WARE, SYSCONFIG
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1470705/tms320f280025c-temperature-sensor-doesn-t-work

器件型号:TMS320F280025C
主题中讨论的其他器件: C2000WARESysConfig

工具与软件:

你好。

我正在使用 TMS320F280025C 上的温度传感器。
我的理解是、以下程序在 while 语句中循环执行、直到 AD 转换完成、然后在转换完成时退出循环并开始计算。
但是、当我调试程序时、程序从不会退出 while 循环。
下面是使用温度传感器和 board.c 中 ADC 部分设置的函数
我忽视了什么吗?

提前感谢您的帮助。

函数↓

int getThermalE (SSCMGParametar* aPara){
易失性 uint16_t Tempe_ADCResult = 0;

ADC_forceMultipleSOC (ADC_2_base、ADC_FORCE_SOC0);

while (ADC_getInterruptStatus (ADC_2_base、ADC_INT_Number3)=false){
}
ADC_clearInterruptStatus (ADC_2_base、ADC_INT_Number3);

Tempe_ADCResult = ADC_readResult (ADC_2_Result_BASE、ADC_SOC_NUMBER0);
int16_t Tempe = ADC_getTemperatureC (Tempe_ADCResult、3.3f);

if (TRUE =ADC_getInterruptOverflowStatus (ADC_2_base、ADC_INT_Number3))

ADC_clearInterruptOverflowStatus (ADC_2_base、ADC_INT_Number3);
ADC_clearInterruptStatus (ADC_2_base、ADC_INT_Number3);
}

返回温度;
}

board.c↓

void adc_2_init (){
//
// ADC 初始化:写入 ADC 配置并为 ADC 加电
//
//设置模拟电压基准选择和 ADC 模块的失调电压修整。
//此功能将模拟电压基准设置为内部(基准电压为1.65V 或2.5V)或外部(对于 ADC)
//它与 ASysCtl API 相同。
//
ADC_setVREF (ADC_2_base、ADC_reference_internal、ADC_reference_3_3V);
//
//配置模数转换器模块预分频器。
//
ADC_setPrescaler (ADC_2_base、ADC_CLK_DIV_2_0);
//
//设置转换结束脉冲的时序
//
ADC_setInterruptPulseMode (ADC_2_base、ADC_PULSE_END_OF_CONV);
//
//为模数转换器内核加电。
//
ADC_enableConverter (ADC_2_BASE);
//
//延迟1ms 以允许 ADC 有时间上电
//
DEVICE_DELAY_US (5000);
//
// SOC 配置:设置 ADC ePWM 通道和触发设置
//
//禁用 SOC 突发模式。
//
ADC_disableBurstMode (ADC_2_base);
//
//设置 SOC 的优先级模式。
//
ADC_setSOCPriPriority (ADC_2_base、ADC_PRI_ALL_ROUND_Robin);
//
//开始转换0配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:0
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN12
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_NUMBER0、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN12、8u);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_NUMBER0、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换1配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:1.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN2.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_number1、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN2、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number1、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换2配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:2.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN4.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_number2、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN4、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number2、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换3配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:3
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN6
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_Number3、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN6、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number3、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换4配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:4
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN7.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_Number4、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN7、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number4、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换5配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:5.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN8
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_Number5、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN8、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_Number5、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换6配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号:6
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN14.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_NUMBER6、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN14、8U);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_NUMBER6、ADC_INT_SOC_TRIGGER_NONE);
//
//开始转换7配置
//
//
//配置 ADC 中的转换启动(SOC)及其中断 SOC 触发器。
// SOC 编号: 7.
// Trigger:adc_trigger_sw_only
// Channel:ADC_CH_ADCIN15.
//示例窗口:8个 SYSCLK 周期
// Interrupt Trigger:ADC_INT_SOC_TRIGGER_NONE
//
ADC_setupSOC (ADC_2_base、ADC_SOC_NUMBER7、ADC_TRIGGER_SW_ONLY、ADC_CH_ADCIN15、8u);
ADC_setInterruptSOCTrigger (ADC_2_base、ADC_SOC_NUMBER7、ADC_INT_SOC_TRIGGER_NONE);
//
// ADC 中断1配置
// Source:adc_soc_NUMBER0
//中断源:已启用
//连续模式:禁用
//
//
ADC_setInterruptSource (ADC_2_base、ADC_INT_number1、ADC_SOC_NUMBER0);
ADC_clearInterruptStatus (ADC_2_base、ADC_INT_number1);
ADC_disableContinuousMode (ADC_2_base、ADC_INT_number1);
ADC_enableInterrupt (ADC_2_base、ADC_INT_number1);
}

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

    我很抱歉。
    正确的功能如下。

    int getThermalE (SSCMGParametar* aPara){
    易失性 uint16_t Tempe_ADCResult = 0;

    ADC_forceMultipleSOC (ADC_2_base、ADC_FORCE_SOC0);

    while (ADC_getInterruptStatus (ADC_2_base、ADC_INT_number1)= false){
    }
    ADC_clearInterruptStatus (ADC_2_base、ADC_INT_number1);

    Tempe_ADCResult = ADC_readResult (ADC_2_Result_BASE、ADC_SOC_NUMBER0);
    int16_t Tempe = ADC_getTemperatureC (Tempe_ADCResult、3.3f);

    if (TRUE =ADC_getInterruptOverflowStatus (ADC_2_base、ADC_INT_number1))

    ADC_clearInterruptOverflowStatus (ADC_2_base、ADC_INT_number1);
    ADC_clearInterruptStatus (ADC_2_base、ADC_INT_number1);
    }

    返回温度;
    }

    INT 编号设置为1。

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

    尊敬的 Hiroki:

    C2000ware 中有一个读取温度的示例 ex3。 请参考它。

    路径如下:

    [安装路径]\C2000Ware_5_03_00_00\driverlib\f28002x\examples\adc\ex3

    谢谢!

    Susmitha

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

    尊敬的 Susmitha:

    我已经审查了提供的样本方案、并打算相应地设立这些方案。
    我认为此示例的唯一区别是除了 ADCC 之外、使用 ADCA。
    使用两个通道是否会产生任何可能的影响?

    谢谢。

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

    两个通道都在内部连接。 您可以使用其中任何一个。 您可以快速更改项目中 SysConfig 文件上的通道。

    在表达式窗口中观察变量来读取温度吗?

    您还可以检查 Launchpad 是否 在代码上对 ADC 使用相同的 Vref? 内部还是外部?

    最后、最好在 Launchpad 上运行示例、查看它是否正常工作。

    谢谢!
    Susmitha