m0_57531254 2022-11-21 16:57 采纳率: 16.7%
浏览 8

DSP电压采集与串口发送

AD的采样频率为100HZ,去采样一个20HZ的正弦信号,一个周期内按说可以采集100个点,但是采集然后采集一个输出一个你就会发现一个周期内才采样了16个点,这是为什么呢?
我的串口也不慢了,波特率为256000,我的AD采集快,而我串口并不能及时发送,如何解决这个问题,请给出解决方案。发送程序如下所示, while(1)
{
while (AdcRegs.ADCST.bit.INT_SEQ1== 0){}
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

adc_vol=((AdcRegs.ADCRESULT0)>>4)*3.0/4095;
LED4_TOGGLE;
adc_temp=adc_vol*100000;
adcbuf[0]=adc_temp/100000+0x30;
adcbuf[1]='.';
adcbuf[2]=adc_temp%100000/10000+0x30;
adcbuf[3]=adc_temp%100000%10000/1000+0x30;
adcbuf[4]=adc_temp%100000%10000%1000/100+0x30;
adcbuf[5]=adc_temp%100000%10000%1000%100/10+0x30;
adcbuf[6]=adc_temp%100000%10000%1000%100%10+0x30;
adcbuf[7]='\0';
UARTa_SendString("\r\nVOLT=");
UARTa_SendString(adcbuf);
}
  • 写回答

1条回答

  • dceacho 2022-11-21 18:32
    关注
    1. 你把ADC采样频率算错了,16,20都是整数像是内置滤波或者时钟分频你算错了
    2. 计算过程过于繁琐耗时太长,提高优化级别,优化速度,或者手动优化,%运算太多了没必要
    adcbuf[2]=dac_temp/10000%10+'0';
    adcbuf[3]=adc_temp/1000%10+'0';
    adcbuf[4]=adc_temp/100%10+'0';
    adcbuf[5]=adc_temp/10%10+'0';
    adcbuf[6]=adc_temp%10+'0';
    
    1. 串口速度不够快这个可能性很小
    评论

报告相同问题?

问题事件

  • 创建了问题 11月21日