主题:controlSUITE中讨论的其他部件
工具/软件:Code Composer Studio
大家好,
我正在编程F2.8335万以感应和显示电压。 为此,我正在配置ADC,但得到的结果不准确。 输入电压通过分压器网络以限制0-3 V内的电压。然后将其作为输入提供给ADC。 因此,实际输入信号为0.9097 *数字值。 (基于分压器网络和Asig=D*(3/4095)。
我正在按如下所示配置ADC:(SoC由ePWM生成,然后ADC的完成将导致ADC中断。
// ADC的时钟频率设置为12.5 MHz,以防止转换结果中出现非线性
// ADC控制寄存器3.
AdcRegs.ADCTRL3.bit.ADCCLKPS = 1;//ADCCLK=HSPCLK/ (2*ADCCLKPS)=25/(2*1)= 12.5 MHz
//ADC控制寄存器1
AdcRegs.ADCTRL1.bit.cps = 0x0; //ADCCLK=Fclk/1
//ADC控制寄存器1
AdcRegs.ADCTRL1.bit.con_run =0; //序列发生器在启动停止模式下启动,等待SOC开始转换
AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /*0x0双序列发生器模式,0x1级联模式*/
AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //禁用序列覆盖。 转换结束后环绕
AdcRegs.ADCTRL1.bit.ACQ_PS =0; //采集窗口大小=(1+ACQ_PS)*(1/ADC)
AdcRegs.ADCTRL1.bit.SUSMOD = 0; //忽略仿真模式
// ADC控制寄存器2.
AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; //SEQ1由SOCA从ePWM模块启动
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; //为EOS启用SEQ1的中断请求
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 0x1; //将SEQ1重置为初始预热状态
AdcRegs.ADCTRL2.bit.ePWM_SOCA_SEQ1=1; //从SEQ1的EPWMA触发器启用SOC
// ADC控制寄存器3.
AdcRegs.ADCTRL3.bit.SMODE_SEL =1; // 1:同步,0:顺序采样
//最大转换信道寄存器
AdcRegs.ADCMAXCONV.ALL =1; //2转换
//ADC输入通道选择定序控制寄存器
AdcRegs.ADCCHSELSEQ1.bit.CONV00 =0; //从ADCINA0和ADCINB0设置conv
//ADC偏移微调寄存器
AdcRegs.ADCOFFTRIM.bit.offset_trim = 0; //设置偏移误差校正值
AdcRegs.ADCREFsel.bit.REF_SEL =0;
// ADC状态和标志寄存器
AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1; //清除中断标志位INT_SEQ1
AdcRegs.ADCST.Bit.INT_SEQ2_CLR = 1; //清除中断标志位INT_SEQ2
在ADC中断中,我正在转换测量的信号,如下所示:首先读取结果寄存器
__interrupt void ADC_ISR(void)
{
Vin1 =(AdcRegs.ADCRESULT0>>4);//Vin1 是UINT16类型
VIN=VIN* 0.9.0975万82121</xmt-block>8.2121万 ((浮点)(Vacin1)); //VIN为浮点型
现在,当我给出直流电压并在CCS中看到转换值时,我无法得到实际值
实际输入 VIN读数 RESULT0
0V 44V 7700 (应用程序)
5V 47 V 8350 (应用程序)
10v 50 V 8850
15V 53V 9300
我不知道为什么我在CCS上看到的实际输入和输出有如此大的差异。
当我有交流输入时,我看到的输出也会向上偏移并缩放。
您能否建议这里可能会出现什么问题?
非常感谢您的支持。
此致
