This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28335:ADC 的交流电压读取问题。

Guru**** 2467750 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1484011/tms320f28335-ac-voltage-reading-issue-by-adc

器件型号:TMS320F28335

工具与软件:

大家好!

 需要大家的支持、我曾尝试为我的 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 的中断

返回;
}

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    Unknown 说:
    请帮我弄错代码了什么? 下面是我的交流测量代码[/报价]

    很抱歉、我无法调试您的代码。 我很乐意为您解答具体问题。

    此致、

    Ben Collier