Thread 中讨论的其他器件: controlSUITE、 SFRA
工具/软件:Code Composer Studio
你好。
我尝试使用 LAUNCHXL-F28379D 和 BoosterPack DRB8305EVM 旋转电机。
控制算法应在由 ADC EOC 调用的 ADC ISR 中计算。 所有 ADC 的 SoC 均由 ePWM 模块启动。 我从 controlSUITE 示例中获取了用于配置 ePWM 模块和 ADC 的代码:1)\ti\controlSUITE\libs\app_libs\motor_control\libs\fcl_SFRA\v01_00_00\examples\fcl_SFRA_379DXL_kits 和2)\ti\controlSUxs\00_00_00_00_00_mcostor_mv1\TIMCUTI_00_mv1\TIMCUTIMCUST_00_00_MCUTIMCUST_00_00_MCUTIM1_MCUST_
一切都按预期工作:通过 CTR_OD_epwm4 = PRD、ADC 转换开始、然后在转换结束后调用中断。 但是、大多数通道(IA =0、IB=0、IC=0和 UDC=22)的转换结果 为4095、而对于 UA、Ub、UC 通道、信号浮动约 2000、与实际电压无关。
为了定位问题、我尝试读取电位计电压、并通过0V 以上的电压获得2118和4095。ADC 参数的更改- ADC_Clock、窗口大小、选择不同的通道/SoC/模块-不会改变实现的结果。 我不知道会出现什么问题、我真的很困在这里。 请帮帮我:)
以下是我的 ADC 代码:
//用于 ADC 配置的函数: //写入 ADC 配置(控制寄存器1和2)并为 ADC A、ADC B 和 ADC C void ConfigureADC (void)加电 { EALLOW; //写入配置 AdcRegs.ADCCTL2.bit.prescale = 6;//将 ADCCLK 分频器设置为/4 AdcSetMode (ADC_ADCC、ADC_Resolution_12位、ADC_SIGNALMODE_SINGLE); //将脉冲位置设置为延迟(在电压转换结束时而不是采集窗口结束时生成 EOC 脉冲) AdcRegs.ADCCTL1.bit.INTPULSEPOS = 1; //为 ADCCTL1.ADCC1ms 加电时间 延迟;ADCCTL1.ADCC1000 (ADCCTL1.bit.ADCCES1.ADCC1ms) EDIS; } // ADC_setup 的宏: #define ADC_CH_ASSIGN (AdcRegs、CH_NUM、ADCSOCxCTL、CH_ACQPS、CH_ADCTRIGSEL) \ AdcRegs.ADCSOCxCTL.bit.CHSEL = CH_NUM; /* SOCx 连接到信号@ CH_NUM */\ AdcRegs.ADCSOCxCTL.bit.ACQPS = CH_ACQPS; SYSCLK 周期中的//\ AdcRegs.ADCSOCxCTL.bit.TRIGSEL = CH_ADCTRIGSEL; ePWM1 SOCA/C 上的/*触发 //主函数中的//代码: //配置 ADC 并为其加电 ConfigureADC(); // adc_setup: EALLOW; adc_ch_assign (AdcRegs、3、ADCSOC12CTL、17、 ADCTRIGSEL);// poti// ADC 中断设置(使用 ADCINT1) AdccRegs.ADCINTSEL1N2.bit.INT1SEL = 12;// ADC C EOC of SOC12被用来触发电机控制中断 AdccRegs.ADCINT1N2.bit.INT1CONT = 0;// ADCnitelt1或 ADCtine.nuct1 (ADCnitr.INT1) //确保 INT1标志被清除 EDIS;
此致、
帕夫洛