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.

[参考译文] LAUNCHXL-F2800137:LAUNCHXL-F2800137

Guru**** 2538955 points
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1330096/launchxl-f2800137-launchxl-f2800137

器件型号:LAUNCHXL-F2800137
主题中讨论的其他器件:SysConfigC2000WARE

#include "F2806x_Device.h"
#include "F2806x_Examples.h"

// Define ADC and PWM settings
#define ADC_CHANNEL     ADC_SOC_Number0   // ADC channel to use
#define PWM_PERIOD      1000              // PWM period in SysClk cycles (change as needed)

// Function prototypes
void ConfigureADC(void);
void ConfigurePWM(void);

void main(void)
{
    // Initialize system
    InitSysCtrl();

    // Initialize peripherals
    ConfigureADC();
    ConfigurePWM();

    // Main loop
    while(1)
    {
        // Start ADC conversion
        AdcRegs.ADCSOCFRC1.bit.SOC0 = 1;
        while(AdcRegs.ADCINTFLG.bit.ADCINT1 == 0); // Wait for ADC conversion
        AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;      // Clear ADC interrupt flag

        // Read ADC result
        Uint16 adcResult = AdcResult.ADCRESULT0;

        // Map ADC result to PWM duty cycle (0-1000)
        Uint16 dutyCycle = (adcResult * PWM_PERIOD) / 4095; // Assuming 12-bit ADC

        // Set PWM duty cycle
        EPwm1Regs.CMPA.half.CMPA = dutyCycle;

        // Add delay or other processing as needed
    }
}

// Configure ADC settings
void ConfigureADC(void)
{
    // Enable ADC clock
    AdcRegs.ADCTRL3.all = 0x00;

    // Initialize ADC settings
    AdcRegs.ADCMAXCONV.all = 0x0000; // Set maximum conversion
    AdcRegs.ADCCHSELSEQ1.all = 0x0000; // Disable all ADC channels
    AdcRegs.ADCCHSELSEQ1.bit.CONV00 = ADC_CHANNEL; // Enable selected ADC channel
    AdcRegs.ADCSOC0CTL.bit.CHSEL = ADC_CHANNEL; // Select ADC channel for SOC0

    // Configure ADC trigger
    AdcRegs.ADCTRL1.bit.CONT_RUN = 0; // Single conversion mode
    AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; // Enable ADCINT1
    AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 1; // Enable ADC SOC0
    AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; // Enable SOCA from ePWM to start SOC conversion

    // ADC Calibration
    AdcRegs.ADCCTL1.bit.ADCBGPWD = 1; // Power up bandgap reference circuit
    AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; // Power up reference buffer circuit
    AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power up rest of ADC circuits
    AdcRegs.ADCCTL1.bit.ADCENABLE = 1; // Enable ADC

    // Delay for ADC calibration
    DELAY_US(1000); // Adjust delay as needed
    AdcRegs.ADCSOC0CTL.bit.TRIGSEL = 5; // Select ePWM1 as SOC trigger
}

// Configure PWM settings
void ConfigurePWM(void)
{
    // Enable PWM clocks
    CpuSysRegs.PCLKCR2.bit.EPWM1 = 1; // Enable ePWM1 clock

    // Initialize ePWM settings
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Up-down count mode
    EPwm1Regs.TBPRD = PWM_PERIOD - 1; // Set PWM period
    EPwm1Regs.CMPA.half.CMPA = PWM_PERIOD / 2; // Set initial duty cycle (50%)
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear PWM output on CMPA up-count
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set PWM output on zero

    // Enable PWM outputs
    EPwm1Regs.TBCTL.bit.PHSEN = 0; // Disable phase sync
    EPwm1Regs.TBCTL.bit.PHSDIR = 1; // Set phase direction to count up after sync
    EPwm1Regs.TBCTL.bit.SYNCOSEL = 0; // Pass through EPWMxSYNC
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = 0; // High-speed clock divider
    EPwm1Regs.TBCTL.bit.CLKDIV = 0; // Clock divider
    EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Load TBPRD immediately

    // Start PWM counter
    EPwm1Regs.TBCTL.bit.SWFSYNC = 1; // Force immediate synchronization
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Up-down count mode
}

我在尝试构建程序时遇到错误  

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

    您好、Gangadhar、

    您是否正在尝试将代码从 F2806x 器件移植到 F280013x 器件? 如果是这样、最好切换到使用 driverlib/SysConfig、因为位字段对迁移不是很友好。 我将帮助解决此问题、但我强烈建议不要在将来使用位域、因为它们可能会引入这样的问题。 此外、将来请包含针对您的错误的控制台输出。  指出您遇到的错误不能帮助确定这些错误是什么或如何得到它们(提供此信息比尝试复制问题要快)。

    #include "F2806x_Device.h"
    #include "F2806x_Examples.h"

    这些似乎是针对不正确的器件的、我将它们替换为: #include "F28x_project.h"

            // Start ADC conversion
            AdcRegs.ADCSOCFRC1.bit.SOC0 = 1;

    位域表示法中的 ADC 由 ADC 实例表示、例如 AdcaRegs、AdcbRegs 等。

    这里存在许多类似的错误、您需要查看器件参考手册或 device_support 文件夹中的某个 F280013x 位字段示例、以找到什么是正确的命名约定。 只复制/粘贴旧示例是不够的。 请仔细检查您的代码、确保您具有正确的寄存器名称、如果您仍然有其他问题、我们可以从这里开始进行工作。

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

    先生、实际问题是、我想使用其中一个 ADC 引脚提供输入、并根据该输入生成 PWM 占空比、您能在 f2800137中为如何实现该操作提供一些建议吗?

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

    您好、Gangadhar、

    如果您看看 C2000 Academy 中的 ePWM 和 eCAP 实验、该实验中有一个可根据变量配置 ePWM 占空比的变量。 您可以将该项目导入 CCS 并将其用作模板、对其进行修改以使 Duty 变量由 ADC 控制。 相关示例可在 C2000Ware_5_01_00_00\training\devices\f280013x\control_peripheral\lab_EPWM_ECAP 下找到。 有关实验工作原理的说明、请参阅 Academy 实验说明页面。

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

    先生、我已经这么做了、但现在我要根据我将通过 ADC 输入引脚提供的模拟电压来更改占空比、您能告诉我如何操作

    遗憾

    甘加达尔

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

    尊敬的 Gangadhar:

    我想根据我要通过 ADC 输入引脚提供的模拟电压更改占空比您能否告诉我如何操作

    这将由您实现、您需要决定希望 ADC 如何通过 ADC 中断或 ePWM 中断或仅通过轮询 ADC 寄存器来控制 EPWM 的占空比。 提供了有关如何设置 ADC、创建 ADC 中断等的示例。 请参考这些示例并 决定下一步操作。 对于 有关参考手册或外设本身的任何问题、我都会提供帮助支持、但具体实施需要根据您自己的应用来确定。

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

    e2e.ti.com/.../WhatsApp-Video-2024_2D00_03_2D00_05-at-13.06.07.mp4

    早上好、先生、

    我得到的是如上所示的 PWM 为什么我在通过 ADC 引脚更改电压时会看到这样的情况,请帮助我在这方面  

    遗憾

    甘加达尔

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

    我不确定您在这里做的 是什么、ADC 引脚读取是如何配置 ePWM 的? 假设在 转换电压后 ADC 引脚上得到数字值1024、它如何转换为 ePWM 周期?

    此外、该 示波器是直接从 ePWM 引脚还是从您的设置中连接到 ePWM 引脚的其他引脚拍摄? ePWM 只能是0V 或3.3V 左右、不能提供1/2值。

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

    早上好、先生、

    实际上、我将使用 C2000 Academy 中提供的系统集成实验室、但我无法获取系统集成实验室中所示的 PWM 占空比。

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

    尊敬的 Gangadhar:

    请通过一些问题了解此处的背景:

    1. 您是按照 Academy 说明开发代码、还是直接从 C2000Ware 导入解决方案? 这是 F280013x LaunchPad 的系统集成、对吗?
    2. 您的代码是否存在任何其他问题? 或者、看起来该软件是否正常运行、但您只是无法在示波器上查看 PWM 信号(另外、您仔细观察的是哪个引脚?)?
    3.  您是否还能够adcAResult" CMPA_result" EPwm1Regs.TZFLG.OST"  duty" 在运行时在表达式窗口中查看"、"、"和"(如 C2000 Academy–System Integration Lab 的说明末尾所述)?

    此致、

    艾里森

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

    下午好!

    1.我直接从 C2000Ware 导入解决方案、是的

    I 示波器引脚编号为9

    3.是的,但我无法 在代码中看到 EPwm1Regs.TZFLG.OST  

    主要问题是我无法根据模拟电压改变 PWM 的占空比。

    请参阅任何根据 ADC 值更改 PWM 占空比的参考示例

    遗憾

    甘加达尔

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

    尊敬的 Gangadhar:

    您能否描述一下您的测试过程?

    1. 您是否能够运行软件?您最初看到"adcAResult"、"CMPA_Result"和"Duty"的值是什么?
    2. 如何改变模拟电压(您正在使用什么连接、当您尝试改变 PWM 占空比时要改变什么?)?
    3. 当您说无法根据模拟电压更改占空比时、您是说您要更改模拟电压并且占空比没有发生变化吗? 或者您发现 PWM 是否发生了其他一些问题或行为?
    4. 您能否分享您在测试用例中拥有的任何示波器截图?

    此致、

    艾里森

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

    早上好、

    1.是的,我能够运行软件,值分别为2,060,494,0.504882812

    2.我正在使用 ADCINA2引脚25、并使用电位器将3.3V 电压连接到该引脚。我正在改变电压、我正指向9号引脚、通过改变引脚25的电压来检查 PWM。

    是的、我要改变模拟电压、并且使用的示波器为 below.e2e.ti.com/.../4353.WhatsApp-Video-2024_2D00_03_2D00_05-at-13.06.07.mp4

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

    尊敬的 Gangadhar:

    我能不能问您为什么要对引脚9的范围进行界定?  F280013x Launchpad 的 GPIO0 ( 引脚40 的其余部分 )。 请尝试在该引脚处仔细查看 PWM 信号。

    此致、

    艾里森