Thread 中讨论的其他器件: MSPM0G3507、 SysConfig
工具/软件:
你(们)好
目前、我正在使用 采用 MSP430微控制器的 PMP7647_RevC 设计解决方案。 我计划迁移到 MSPM0G1507、
对于所面临的问题、我需要一些帮助。
ADC 相关:
我们没有使用 DMA。 对64个样本求平均值以进行计算。
PWM:
TIMA_TIMER_MODE_PWM_DEAD_Band_LP_MSPM0G3507_nortos_ticlang 经过修改以适合充电应用。
我 面临着电池充电电流中一些不均匀的干扰。 是否错过任何计时器设置?
我正在使用"DL_TimerA_setCaptureCompareValue (PWM_0_INST、Duty_Buck、DL_TIMER_CC_2_INDEX);"修改 PWM 占空比。 如果占空比保持恒定、则电池充电电流无噪声。
对于 MSP430、电池充电电流非常干净。
此致、
Yogesh
PWM 频率为100kHz
/* Defines for PWM_0 */ #define PWM_0_INST TIMA0 #define PWM_0_INST_IRQHandler TIMA0_IRQHandler #define PWM_0_INST_INT_IRQN (TIMA0_INT_IRQn) #define PWM_0_INST_CLK_FREQ 32000000 /* GPIO defines for channel 2 */ #define GPIO_PWM_0_C2_PORT GPIOA #define GPIO_PWM_0_C2_PIN DL_GPIO_PIN_10 #define GPIO_PWM_0_C2_IOMUX (IOMUX_PINCM21) #define GPIO_PWM_0_C2_IOMUX_FUNC IOMUX_PINCM21_PF_TIMA0_CCP2 #define GPIO_PWM_0_C2_IDX DL_TIMER_CC_2_INDEX /* GPIO defines for channel 2 */ #define GPIO_PWM_0_C2_CMPL_PORT GPIOA #define GPIO_PWM_0_C2_CMPL_PIN DL_GPIO_PIN_6 #define GPIO_PWM_0_C2_CMPL_IOMUX (IOMUX_PINCM11) #define GPIO_PWM_0_C2_CMPL_IOMUX_FUNC IOMUX_PINCM11_PF_TIMA0_CCP2_CMPL /* ########################################################################################################## * Timer clock configuration to be sourced by / 1 (32000000 Hz) * timerClkFreq = (timerClkSrc / (timerClkDivRatio * (timerClkPrescale + 1))) * 32000000 Hz = 32000000 Hz / (1 * (0 + 1)) ########################################################################################################## */ static const DL_TimerA_ClockConfig gPWM_0ClockConfig = { .clockSel = DL_TIMER_CLOCK_BUSCLK, .divideRatio = DL_TIMER_CLOCK_DIVIDE_1, .prescale = 0U }; static const DL_TimerA_PWMConfig gPWM_0Config = { .pwmMode = DL_TIMER_PWM_MODE_EDGE_ALIGN_UP, .period = PERIOD_BUCK, .isTimerWithFourCC = true, .startTimer = DL_TIMER_STOP, }; SYSCONFIG_WEAK void SYSCFG_DL_PWM_0_init(void) { DL_TimerA_setClockConfig(PWM_0_INST, (DL_TimerA_ClockConfig *) &gPWM_0ClockConfig); DL_TimerA_initPWMMode(PWM_0_INST, (DL_TimerA_PWMConfig *) &gPWM_0Config); // Set Counter control to the smallest CC index being used DL_TimerA_setCounterControl(PWM_0_INST,DL_TIMER_CZC_CCCTL2_ZCOND,DL_TIMER_CAC_CCCTL2_ACOND,DL_TIMER_CLC_CCCTL2_LCOND); DL_TimerA_setCaptureCompareOutCtl(PWM_0_INST, DL_TIMER_CC_OCTL_INIT_VAL_LOW,DL_TIMER_CC_OCTL_INV_OUT_DISABLED, DL_TIMER_CC_OCTL_SRC_DEAD_BAND,DL_TIMERA_CAPTURE_COMPARE_2_INDEX); DL_TimerA_setCaptCompUpdateMethod(PWM_0_INST, DL_TIMER_CC_UPDATE_METHOD_IMMEDIATE, DL_TIMERA_CAPTURE_COMPARE_2_INDEX); DL_TimerA_setCaptureCompareValue(PWM_0_INST, 20, DL_TIMER_CC_2_INDEX); DL_TimerA_setDeadBand(PWM_0_INST, DEAD_TIME_BUCK, DEAD_TIME_BUCK, DL_TIMER_DEAD_BAND_MODE_0); DL_TimerA_enableClock(PWM_0_INST); DL_TimerA_setCCPDirection(PWM_0_INST , DL_TIMER_CC2_OUTPUT ); } PWM update: DL_TimerA_setCaptureCompareValue(PWM_0_INST, Duty_Buck, DL_TIMER_CC_2_INDEX);