工具与软件:
大家好!
需要大家的支持、我曾尝试为我的 DSP 板收集 AC 数据。 信号为230VAC 50Hz、由霍尔传感器 LV-25P 进行测量。
我希望获得稳定的 rms 电压、而不是表达式中的0到300VAC。 以便我可以配置 GPIO 何时因低电压而跳闸。 我试图调整延迟时间、但没有效果。
请帮助我的代码出了什么问题? 以下是我的交流测量代码、
#define ADC_MODCLK 0x0;
中断失效 ADC_ISR (void);
UINT16 LoopCount;
UINT16 ConversionCount;
UINT16电压1;
UINT16电压2;
UINT16 Vab;
UINT16 VBC;
void main (void)
{
InitSysCtrl();
EALLOW;
EDIS;
EALLOW;
SysCtrlRegs.HISPC.all = ADC_MODCLK;
EDIS;
颜色;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
EALLOW;//要写入 EALLOW 保护寄存器、需要执行此操作
PieVectTable.ADCINT =&ADC_ISR;
EDIS;//这是禁用对 EALLOW 保护寄存器的写入所必需的
InitAdc ();//在本例中、初始化 ADC
PieCtrlRegs.PIEIER1.bit.INTx6 = 1;
IER |= M_INT1;//启用 CPU 中断1
EINT;//启用全局中断 INTM
erTM;//启用全局实时中断 DBGM
LoopCount = 0;
AdcRegs.ADCMAXCONV.all = 0x0006;//设置 SEQ1上的2转换
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x6;//将 ADCINA6设置为1st SEQ1 Conv.
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x7;//将 ADCINA7设置为第二个 SEQ1转换
AdcRegs.ADCREFSEL.bit.REF_SEL = 2;// External Reference、0:Default3.3、1:2.04V、2:1.5V、3:1.024V
AdcRegs.ADCTRL1.bit.ACQ_PS = 0x1;// Acquisition Window Size
AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;// 1:级联序列发生器模式0:双序列模式
AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;// Enable SEQ1 interrupt (every EOS)(启用 SEQ1中断(每个 EOS))
AdcRegs.ADCTRL2.bit.EPWM_SOCB_SEQ2 = 1;// Enable SOCB from ePWM to start SEQ1
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ2 = 1;// Enable SEQ2 interrupt (every EOS)(启用 SEQ2中断(每次 EOS))
AdcRegs.ADCTRL3.bit.ADCCLKPS = 0;// ADC 模块时钟= HSPCLK/2* ADC_CKPS = 10.0MHz
AdcRegs.ADCTRL3.bit.SMODE_SEL = 0;// 1:synchronous、0:Sequential Sampling
EPwm1Regs.ETSEL.bit.SOCAEN = 1;// Enable SOC on a group (启用组上的 SOC)
EPwm1Regs.ETSEL.bit.SOCASEL = 2;//在向上计数时从 CPMA 选择 SOC
EPwm1Regs.ETPS.bit.SOCAPRD = 1;//在发生第1个事件时生成脉冲
EPwm1Regs.CMPA.half.CMPA = 5000;//设置比较一个值
EPwm1Regs.TBPRD = 20000;//设置 ePWM1的周期
EPwm1Regs.TBCTL.bit.CTRMODE = 2;// Count up and start
for (;;)
{
LoopCount++;
}
}
//
// ADC_ISR -
//
中断失效 ADC_ISR (void)
{
电压1 = AdcRegs.ADCRESULT3 >>4;
电压2 = AdcRegs.ADCRESULT4 >>4;
Vab =电压1;
VBC =电压2;
//
//重新初始化下一个 ADC 序列
//
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;// Reset SEQ1 (复位 SEQ1)
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;// Clear INT SEQ1 bit (清除 INT SEQ1位)
PieCtrlRegs.PIEACK.all = PIEACK_Group1;//确认对 PIE 的中断
返回;
}