请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:UCD3138 工具/软件:
void update_period(void) { Dpwm1Regs.DPWMPRD.all = iv.switching_period; //new period for new frequency Dpwm1Regs.DPWMSAMPTRIG1.all = (Dpwm1Regs.DPWMFILTERDUTYREAD.all>>1)+Dpwm1Regs.DPWMEV1.all; } void init_dpwm1(void) { Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 0; //disable everything Dpwm1Regs.DPWMCTRL1.bit.GPIO_A_EN = 1; //turn off DPWM1A for now Dpwm1Regs.DPWMCTRL1.bit.GPIO_B_EN = 1; //turn off DPWM1B for now // Enable Current Limit and Set min duty cycle to verify. Dpwm1Regs.DPWMCTRL0.bit.CBC_PWM_AB_EN = 1; // Enable cycle by cycle current limit. Dpwm1Regs.DPWMCTRL0.bit.CBC_ADV_CNT_EN=1; //normal model Dpwm1Regs.DPWMCTRL0.bit.BLANK_B_EN = 1; // Enable blanking so we can see a min pulse for curr lim, Dpwm1Regs.DPWMCTRL0.bit.BLANK_A_EN = 1; // Enable blanking so we can see a min pulse for curr lim Dpwm1Regs.DPWMBLKBBEG.all = ((SWITCH_FREQ_NUMERATOR/switching_frequency) << 4)-1280; Dpwm1Regs.DPWMBLKBEND.all = ((SWITCH_FREQ_NUMERATOR/switching_frequency) << 4); Dpwm1Regs.DPWMBLKABEG.all = 0; Dpwm1Regs.DPWMBLKAEND.all = 0x0500; Dpwm1Regs.DPWMFLTCTRL.bit.B_MAX_COUNT = 2; Dpwm1Regs.DPWMFLTCTRL.bit.A_MAX_COUNT = 2; Dpwm1Regs.DPWMFLTCTRL.bit.ALL_FAULT_EN = 1; Dpwm1Regs.DPWMCTRL2.bit.SAMPLE_TRIG_1_EN = 1; //enable sample trigger1 Dpwm1Regs.DPWMEV1.all = 290; Dpwm1Regs.DPWMEV2.all = 0; Dpwm1Regs.DPWMEV3.all = 290; Dpwm1Regs.DPWMEV4.all = ((SWITCH_FREQ_NUMERATOR/switching_frequency) << 4)-290; Dpwm1Regs.DPWMCTRL0.bit.PWM_MODE = 1; //Normal Mode Dpwm1Regs.DPWMCTRL2.bit.SAMPLE_TRIG1_OVERSAMPLE = 3; //8X oversampling. Dpwm1Regs.DPWMCTRL1.bit.EVENT_UP_SEL = 1; //update at end of period Dpwm1Regs.DPWMCTRL0.bit.CLA_EN = 1; Dpwm1Regs.DPWMCTRL0.bit.PWM_EN = 1; //enable OK here, because nothing will happen until DPWM and front end are globally enabled }
大家好、我在上面的代码中配置了 DPWM1、并希望在过滤器占空比1/2处实现触发 eADC。 我应该检查存储器调试器中的哪个寄存器、以确认 DPWM1实际上触发 eADC 进行采样。 我真诚地希望你能帮助我。