您好!
我将 TMS320F28032用于多级反激式设计。
到目前为止、一切都是有目的的。
控制器由一个20Mhz XTAL 计时。 SYSCLOCK 为(用 GPIO18测量) 60MHz、LSPCLK 为15MHz。
我已经设置了3个相移 PWM、每个 PWM 的频率为100kHz (在先递增计数模式下周期寄存器为600)。 我在示波器上看到、这些 PWM 有目的地工作(每个 PWM 为100kHz、每个 PWM 为120°相移)
ePWM1在计数器计数值为零时立即生成 SOC 脉冲。 这会触发我的高优先级 SOC 0... 2至 ADCIN0A、ADCIN0B 和 ADCIN1A 采样
SOC2配置为抛出中断。 (到目前为止我的控制器上唯一的一个!)
EALLOW; AdcRegs.ADCCTL1.bit.INTPULSEPOS = 0; //当 ADC 开始转换时产生 INT 脉冲->早期中断 AdcRegs.INTSEL1N2.bit.INT1E = 1; //启用 ADCINT1 AdcRegs.INTSEL1N2.bit.INT1CONT = 1; // ADCINT1 AdcRegs.INTSEL1N2.bit.INT1SEL 的连续采样= 0x02; // SOC2的转换结束将触发 ADCINT1 AdcRegs.INTSEL1N2.bit.INT2E = 1; //启用 ADCINT2 AdcRegs.INTSEL1N2.bit.INT2CONT = 1; // ADCINT2 AdcRegs.INTSEL1N2.bit.INT2SEL 的连续采样= 0x07; // SOC7转换结束将触发 ADCINT2 AdcRegs.SOCPRICTL.bit.SOCPRIORITY = 0x03;// SOC0-SOC2为高优先级,SOC3-SOC15处于轮询模式 EDIS;
在 SOC2_EOC 之后、中断会定期在右侧的 MANNOR 中抛出。 但是、我们已经看到了一些愚蠢的数据移位、甚至只是在确认中断服务需要很长时间时才会看到。
typedef 结构 ADC_Sampledata ADC_Sampledata; / * UNION :ADC_Data * description: *允许将 int 直接写入_IQ 变量。 秘书长的报告 / UNION Sample_ARG { _iq15 m_IQ15; unsigned int M_Int; }; /********* *结构 :ADC_Sampledata *说明: *包含高速采样 ADC 值 / struct adc_Sampledata { SAMPLE_ARG AC_Input; SAMPLE_ARG 轨反馈; SAMPLE_ARG VIN_REECT; }; //对齐样本数据数组*/ #pragma DATA_ALIGN (Sampledata,8); ADC_Sampledata Sampledata;
//在高优先级快速 ADC 转换结束时调用的 ISR __interrupt void ADC1_EOC (void) { GpioDataRegs.GPASET.bit.GPIO10=1; //开+关需要260ns Sampledata.ac_Input.m_Int =(AdcResult.ADCRESULT0)<<3;//需要大约580ns Sampledata.Rail Feedback.m_Int =(AdcResult.ADCRESULT1)<<3;//需要大约580ns Sampledata.VIN_rect.m_Int =(AdcResult.ADCRESULT2)<<3;//需要大约580ns //GpioDataRegs.GPACLEAR.bit.GPIO10=1; AdcRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //清除 ADCINT1标志为下一个 SOC 重新初始化-需要540ns PieCtrlRegs.PIEACX.ALL = PIEACK_Group1; //确认 PIE 中断 需要240ns GpioDataRegs.GPACLEAR.bit.GPIO10=1; 返回; }
我的程序正在闪存中运行。
备注:这不是我使用此处理器的第一个项目。
我已经设置了一个多 kW 有源 PFC。 在这里、我从2个 ADC 中收集 ADC 数据、计算32位2类控制器(在汇编器中)、并在2µs μ s 内的 EOC 中断中设置新的 PWM 值。 我想我可能错过了某个地方、也许您可以给我一个正确的方向提示。
谢谢!