AD的采样频率为100HZ,去采样一个20HZ的正弦信号,一个周期内按说可以采集100个点,但是采集然后采集一个输出一个你就会发现一个周期内才采样了16个点,这是为什么呢?
我的串口也不慢了,波特率为256000,我的AD采集快,而我串口并不能及时发送,如何解决这个问题,请给出解决程序。串口发送程序如下所示,将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);
}
有一个问题:为什么100Hz采样频率,采样20Hz信号,每个周期能有100个点? 看起来是5个点? ——好吧这个是我理解有问题,意思是1s 100个点。。
还有一些问题:
你这个串口中的结果应该是在一个循环里面执行了,因为一个周期里面的16个值是一样的,如果采的是正弦信号这是不可能的,我猜应该是在函数里面调用了串口发送程序,并且循环执行了16次,跳出循环以后才能再采集新值,所以相邻周期之间的值是不同的,所以这个问题应该不是硬件问题,应该是代码有问题
用缓存啊,采集完的数据不要直接串口发送,先放到一个环型的内存缓冲区中,缓冲区设置两个指针,一个写,ad采集控制,采集一次写入一次,指针加一,读取指针由串口发送程序控制,发走一个数据指针加一,读取指针追上写入指针,所有ad采样数据发送完毕;写入指针如果追上了读出指针,就要考虑是覆盖数据还是等待发送的处理了,
蓝牙调试器之DSP串口蓝牙发送数据
https://blog.csdn.net/zhangdh147/article/details/121284572
右移四位是原来选择的左对齐还是想略去后四位的不稳定数据?如果是后者,发出来的数据想同也是有可能的。
你可以用个直流可调电源作为输入电压,调一下输入电压的大小,测试一下单片机AD口的电压是否有变化,再看串口输出电压的大小。来确定是不是程序的问题。