Thread 中讨论的其他器件:controlSUITE
工具/软件:Code Composer Studio
您好!
我喜欢以下套件: www.ti.com/.../TMDSDOCK28035。 我正在开发正弦波生成应用、并使用 controlSUITE 中的示例 SolarMicroInv_F2803x。
我按照下面的 ADC 寄存器连接了正弦波输入和基准。
ChSel[4]= 1; // A1 - IGRID ADC 结果4.
ChSel[5]= 1; // A1 - IGRID ADC 结果5.
ChSel[6]= 9; // B1 - VGRID ADC 结果6.
ChSel[7]= 7; // A7 - Ref_1.65V ADC 结果7
ChSel[8]= 5; // A5 - Ref_0.5V ADC 结果8.
我可以成功读取此 ADC 引脚上的正弦波,并可以在 Code compose studio 中给出的图表中看到->工具->图形->双时间。
我想使用以下给出的示例代码计算 Vrms 和输入频率:
//TODO 交流测量
///----------------------------------------------------------
//网格频率测量
///----------------------------------------------------------
ACFreq_SysTicks =(ECap1Regs.CAP1 + ECap1Regs.CAP2 + ECap1Regs.CAP3
+ ECap1Regs.CAP4)<< 3;
ACFreq =_IQ4div (_IQ4 (CPU_FREQ)、ACFreq_SysTicks);
IF (ECap1Regs.TSCTR > ECAP_TimerMaxVal
||(ECap1Regs.CAP1 > ECAP_TimerMaxVal)
||(ECap1Regs.CAP2 > ECAP_TimerMaxVal)
||(ECap1Regs.CAP3 > ECAP_TimerMaxVal){
ACFreq_SysTicks = 0;
ACFreq = 0;
}
IF (ACFreq <_IQ4 (grid_min_FREQ))
UF_Flag = 1;
其他
UF_Flag = 0;
IF (ACFreq >_IQ4 (grid_MAX_FREQ))
of 标志= 1;
其他
of 标志= 0;
MATH_EMAVG2_IQ_MACRO ((_IQ24abs (inV_meas _vol_insts))、inV_emav_vol、
_iq24 (0.0003));
Gui_Vavg =_IQ16mpy (((int32) inv_emavg_vol>8、_IQ16 (ac_peak_sense));
IF (Gui_Vavg <_IQ16 (grid_min_VRMS))
UV_Flag = 1;
其他
UV_Flag = 0;
IF (Gui_Vavg >_IQ16 (grid_MAX_VRMS))
OV_Flag = 1;
其他
OV_Flag = 0;
IF (UF_Flag = 0 && Gui_Vavg >_IQ16 (40.0)){
//计算 RMS 输入电压和输入频率
sine_main_iin = inV_meas _cur_inst>> 9;
sine_main_vin = inV_meas _vol_inst>> 9;
SINENALYZER_DIFF_wPWR_IQ_MACRO (SNAL_MAINS);
Vrms =(sine_main.Vrms)<< 9;// 将 sine_mains.Vrms 从 Q15转换为 Q24并另存为 VrectRMS
IRMS =(sine_main.IRMS)<< 9;// 将 sine_mains.IRMS 从 Q15转换为 Q24并另存为 IRrectRMS
PRMS =(sine_main.PRMS)<< 9;// 将 sine_mains.PRMS 从 Q15转换为 Q24并另存为 PinRMS
Gui_PRMS =(sine_main_PRMS * K_PRMS)>> 15;
Gui_IRMS =(sine_main_IRMS * K_IRMS)>> 15;
Gui_Vrms =(sine_main_Vrms * K_Vrms)>> 15;
/*if (Gui_Vrms<_IQ6 (grid_min_VRMS))
UV_Flag=1;
其他
UV_Flag=0;
if (Gui_Vrms>_IQ6 (grid_MAX_VRMS))
OV_Flag=1;
其他
OV_Flag=0;
*
}否则{
Vrms = 0;// 将 sine_mains.Vrms 从 Q15转换为 Q24并另存为 VrectRMS
IRMS = 0;// 将 sine_mains.IRMS 从 Q15转换为 Q24并另存为 IrectRMS
PRMS = 0;// 将 sine_mains.PRMS 从 Q15转换为 Q24并另存为 PinRMS
Gui_PRMS = 0;
Gui_IRMS = 0;
Gui_Vrms = 0;
SINANALYZER_DIFF_wPWR_IQ_INIT (&sine_MAINS);
sine_main_vin = 0;
sine_main_= 0;
sine_main_SampleFreq =_IQ15 (1000.0);
Sine 电源阈值=_IQ15 (0.1);
sine_main_samplesMax=1000/universal_grid_min_FREQ;
sine_main_samplesMin=1000/universal_grid_MAX_FREQ;
}
Gui_Vpv =_IQ20mpy (pv_meas _vol_avg>>4、_IQ20 (pv_VOL_SENSE_MAX));
Gui_IPV =_IQ20mpy (pv_meas _cur_avg>>4、_IQ20 (pv_CURR_SENSE_MAX));
Gui_Vbus =_IQ20mpy (VBUS_meas _avg>>4、_IQ20 (VBUS_VOL_SENSE_MAX));
和捕获初始化
/********* /
/******** ECAP 初始化 /
/********* /
void InitECapture(){
ECap1Regs.ECEINT.ALL = 0x0000; //禁用所有捕捉中断
ECap1Regs.ECCLR.ALL = 0xFFFF; //清除所有 CAP 中断标志
ECap1Regs.ECCTL1.bit.CAPLDEN = 0; //禁用 CAP1-CAP4寄存器加载
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; //确保计数器被停止
//配置外设寄存器
ECap1Regs.ECCTL2.bit.CONT_ONESHT = 0; //以连续模式运行
ECap1Regs.ECCTL2.bit.STOP_Wrap = 3; // 4个事件后换行
ECap1Regs.ECCTL1.bit.CAP1POL = 1; //下降边沿
ECap1Regs.ECCTL1.bit.CAP2POL = 0; //上升边沿
ECap1Regs.ECCTL1.bit.CAP3POL = 1; //下降边沿
ECap1Regs.ECCTL1.bit.CAP4POL = 0; //上升边沿
ECap1Regs.ECCTL1.bit.CTRRST1 = 1; //差动操作
ECap1Regs.ECCTL1.bit.CTRRST2 = 1; //差动操作
ECap1Regs.ECCTL1.bit.CTRST3 = 1; //差动操作
ECap1Regs.ECCTL1.bit.CTRRST4 = 1; //差动操作
ECap1Regs.ECCTL2.bit.SYNCI_EN = 0; //启用同步输入
ECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; //直通
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; //启用捕捉单元
ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; //起始计数器
//ECap1Regs.ECCTL2.bit.rearm = 1; // ARM 单次触发
ECap1Regs.ECCTL1.bit.CAPLDEN = 1; //启用 CAP1-CAP4寄存器加载
// ECap1Regs.ECEINT.BIT.CEVT4 = 1; // 4个事件=中断
}
我想获取 Vrms 和交流输入频率值、但不想获取以下变量的值。
ACFreq_SysTicks、
交流频率
Vrms
Gui_Vrms
请帮助我获取套件中的 AcFreq 和 VRMS 值。
我是否需要进行其他连接才能获得 AcFreq 和 VRMS 的值。
谢谢、
Jignesh Patel