请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:LAUNCHXL-F28379D 工具/软件:Code Composer Studio
我的目标是生成50kHz 频率、60%占空比的方波。 我尝试配置引脚以生成输出。 但我无法在示波器上获得输出。 我提到了这些例子,但仍然有问题。 请帮我处理该代码。
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.
工具/软件:Code Composer Studio
我的目标是生成50kHz 频率、60%占空比的方波。 我尝试配置引脚以生成输出。 但我无法在示波器上获得输出。 我提到了这些例子,但仍然有问题。 请帮我处理该代码。
我不能完全理解您遇到的问题... 您只需设置 TBPRD 和 CMPA 即可生成波形、
这是适用于您的应用的最简单的 PWM 代码。 针对周期和占空比对其进行修改。
//########################################################################################################################
//
/// Nima Eskandari
//
////##########################################################################################################
//
//包含的文件
//
#include "driverlib.h"
#include "device.h"
#define ePWM_TIMER_TBPRD 2000
//
函数原型
//
void initEPWM (uint32_t ePWM_base);
__interrupt void epwm1ISR (void);
//
Main
//
main (void)
{void)
//
//初始化设备时钟和外设
//
device_init();
//
//禁用引脚锁定并启用内部上拉。
//
DEVICE_initGPIO();
//
//初始化 PIE 并清除 PIE 寄存器。 禁用 CPU 中断。
//
interrupt_initModule();
//
//使用指向 shell 中断的指针初始化 PIE 矢量表
//服务例程(ISR)。
//
interrupt_initVectorTable();
//
//将中断服务例程分配给 ePWM 中断
//
INTERRUPT_REGISTER (INT_EPWM1、epwm1ISR);
//
//将 GPIO0/1配置为
// ePWM1A/1B 引脚
//
GPIO_setPadConfig (0、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_0_EPWM1A);
GPIO_setPadConfig (1、GPIO_PIN_TYPE_STD);
GPIO_setPinConfig (GPIO_1_EPWM1B);
//将 XBAR 输入从使用 GPIO0更改为使用 GPIO0
//如果启用了 ePWM SYNCIN,EXTSYNCIN1和 EXTSYNCIN2将使用
// GPIO0 (即 EPWM1的输出)。
//选择和未使用的 GPIO
Xbar_setInputPin (XBAR_INPUT5、50);
Xbar_setInputPin (XBAR_INPUT6、50);
//
//禁用同步(也冻结 PWM 的时钟)
//
SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_GTBCLKSYNC);
SYSCTL_DisablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
//
//初始化没有相移的 PWM1作为主器件
//
initEPWM (EPWM1_base);
//
//启用到 PWM 的同步和时钟
//
SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
//启用 ePWM 中断
//
INTERRUPT_ENABLE (INT_EPWM1);
//
//启用全局中断(INTM)和实时中断(DBGM)
//
EINT;
ERTM;
//
//空闲循环。 只需坐下来循环(可选):
//
for (;;)
{
}
}
//
// epwm1ISR - ePWM 1 ISR
//
__interrupt void epwm1ISR (void)
{
//
//清除此计时器的 INT 标志
//
ePWM_clearEventTriggerInterruptFlag (EPWM1_BASE);
//
//确认中断组
//
interrupt_clearACKGroup (interrupt_ACK_Group3);
}
void initEPWM (uint32_t ePWM_base)
{
//
//设置 TBCLK
//
ePWM_setTimeBasePeriod (ePWM_base、ePWM_TIMER_TBPRD);
ePWM_setPhaseShift (ePWM_base、0U);
ePWM_setTimeBaseCounter (ePWM_base、0U);
//
//设置比较值
//
ePWM_setCounterCompareValue (ePWM_base、
ePWM_COUNTER_COMPARE_A、
ePWM_TIMER_TBPRD*3/5);
ePWM_setCounterCompareValue (ePWM_base、
ePWM_COUNTER_COMPARE_B、
ePWM_TIMER_TBPRD*3/5);
//
//设置计数器模式
//
ePWM_setTimeBaseCounterMode (ePWM_base、ePWM_COUNTER_MODE_UP);
ePWM_DisablePhaseShiftLoad (ePWM_base);
ePWM_setClockPrescaler (ePWM_base、
ePWM_CLOCK 分频器_8、
ePWM_HSCLOCK_DEVIDER_1);
//
//设置隐藏
//
ePWM_setCounterCompareShadowImage LoadMode (ePWM_base、
ePWM_COUNTER_COMPARE_A、
ePWM_COMP_LOAD_ON_CNTR_ZERO);
ePWM_setCounterCompareShadowImage LoadMode (ePWM_base、
ePWM_COUNTER_COMPARE_B、
ePWM_COMP_LOAD_ON_CNTR_ZERO);
//
//设置操作
//
ePWM_setActionQualifierAction (ePWM_base、
ePWM_AQ_OUTPUT A、
ePWM_AQ_OUTPUT 高电平、
ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (ePWM_base、
ePWM_AQ_OUTPUT _B、
ePWM_AQ_OUTPUT 高电平、
ePWM_AQ_output_on_timebase_zero);
ePWM_setActionQualifierAction (ePWM_base、
ePWM_AQ_OUTPUT A、
ePWM_AQ_OUTPUT 低电平、
ePWM_AQ_output_on_timebase_up_CMPA);
ePWM_setActionQualifierAction (ePWM_base、
ePWM_AQ_OUTPUT _B、
ePWM_AQ_OUTPUT 低电平、
ePWM_AQ_output_on_timebase_up_CMPB);
//
//中断,我们将在其中更改比较值
//选择 INT on 时基计数器零事件,
//启用 INT,在发生第1个事件时生成 INT
//
ePWM_setInterruptSource (ePWM_base、ePWM_INT_TBCTR_ZERO);
ePWM_enableInterrupt (ePWM_base);
ePWM_setInterruptEventCount (ePWM_base、1U);
}