芯路恒电子技术论坛

 找回密码
 立即注册
热搜: 合集
查看: 2728|回复: 0

多通道数据采集图像绘制

[复制链接]

该用户从未签到

27

主题

29

帖子

218

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
218
发表于 2023-4-18 17:35:39 | 显示全部楼层 |阅读模式

多通道采集图像绘制单通道数据采集及绘制

这里我们不做讲解有兴趣的可以在其它帖子学习(http://www.corecourse.cn/forum.php?mod=viewthread&tid=29199),这里我们以AD7606数据采集为例向大家介绍多通道数据采集及绘制。
打开cypress上位机,将USB2.0芯片固件烧写成功之后,发送命令帧
  1. 55A50200004000F055A501000000FFF055A503000000F9F055A50000000000F0
复制代码

AD7606数据帧格式配置表:
寄存器名称                       数据帧数据
DataNum                55 A5 02 00 00 40 00 F0
ChannelSel              55 A5 01 00 00 00 FF F0
ADC_Speed_Set      55 A5 03 00 00 00 F9 F0
RestartReq              55 A5 00 00 00 00 00 F0

在本节中我们的通道设置为55 A5 01 00 00 00 FF F0,其中FF表示为采集8个通道的ADC数据对应二进制为(8'b1111_1111)

  1. %====================================================================%
  2. %设置ADC采集数据有效位宽
  3. ADC_DATA_WIDTH = 16;
  4. %ADC采集电压范围±VOL_RANGE (V)
  5. VOL_RANGE = 5;
  6. %采样率(Hz)
  7. SAMPLE_RATE = 200000;
  8. %ADC采集电压分辨率 LSB
  9. LSB = VOL_RANGE*2/(2^ADC_DATA_WIDTH);
  10. %====================================================================%
  11. %读取文件数据,转换成波形显示
  12. fileID = fopen('C:\Users\Administrator\Desktop\2');
  13. src_data = fread(fileID);
  14. fclose(fileID);
  15. src_data_hex = src_data;

  16. DATA_NUM = length(src_data_hex);
  17. if(DATA_NUM > 1024*64)
  18.   DATA_NUM = 1024*64;
  19. end

  20. voltage_code = 1:DATA_NUM/2;
  21. voltage_code = voltage_code';
  22. for i=1:1:DATA_NUM/2
  23.   if src_data_hex(2*i-1)+src_data_hex(i*2)*256 > 2^(ADC_DATA_WIDTH-1)
  24.     voltage_code(i) = src_data_hex(2*i-1)+src_data_hex(i*2)*256-2^ADC_DATA_WIDTH;
  25.   else
  26.     voltage_code(i) = src_data_hex(2*i-1)+src_data_hex(i*2)*256;
  27.   end
  28. end

  29. %二进制ADC数据转换为电压值
  30. voltage = voltage_code*LSB - LSB/2;

  31. %ADC采样时间
  32. data_8_1 = voltage(1:8:end,1);
  33. data_num = length(data_8_1);  %计算8组中一组的长度2048

  34. sample_t = 1:data_num;
  35. sample_t = sample_t';
  36. for i=1:1:data_num
  37.   sample_t(i) = 1000000/SAMPLE_RATE * i;
  38. end

  39. subplot(4,2,1)
  40. plot(sample_t,voltage(1:8:end,1));
  41. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  42. title('ADC采集电压显示','Fontsize',12,'position',[12000,6])
  43. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  44. ylabel('电压/(V)','Fontsize',10)
  45. legend('第一通道')
  46. grid on

  47. subplot(4,2,2)
  48. plot(sample_t,voltage(2:8:end,1));
  49. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  50. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  51. ylabel('电压/(V)','Fontsize',10)
  52. legend('第二通道')
  53. grid on

  54. subplot(4,2,3)
  55. plot(sample_t,voltage(3:8:end,1));
  56. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  57. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  58. ylabel('电压/(V)','Fontsize',10)
  59. legend('第三通道')
  60. grid on

  61. subplot(4,2,4)
  62. plot(sample_t,voltage(4:8:end,1));
  63. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  64. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  65. ylabel('电压/(V)','Fontsize',10)
  66. legend('第四通道')
  67. grid on

  68. subplot(4,2,5)
  69. plot(sample_t,voltage(5:8:end,1));
  70. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  71. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  72. ylabel('电压/(V)','Fontsize',10)
  73. legend('第五通道')
  74. grid on

  75. subplot(4,2,6)
  76. plot(sample_t,voltage(6:8:end,1));
  77. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  78. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  79. ylabel('电压/(V)','Fontsize',10)
  80. legend('第六通道')
  81. grid on

  82. subplot(4,2,7)
  83. plot(sample_t,voltage(7:8:end,1));
  84. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  85. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  86. ylabel('电压/(V)','Fontsize',10)
  87. legend('第七通道')
  88. grid on

  89. subplot(4,2,8)
  90. plot(sample_t,voltage(8:8:end,1));
  91. axis([0 1000000/SAMPLE_RATE*data_num -VOL_RANGE VOL_RANGE])
  92. xlabel('采样时间/(us)','Fontsize',10,'position',[9700,-7])
  93. ylabel('电压/(V)','Fontsize',10)
  94. legend('第八通道')
  95. grid on
  96. %双figure图形
  97. figure
  98. L = data_num/2;
  99. NFFT = 2^nextpow2(L);

  100. Y = fft(voltage(1:8:end,1),NFFT)/L;
  101. Fs = SAMPLE_RATE;
  102. f = Fs/2*linspace(0,1,NFFT/2+1);
  103. len = max(f);
  104. data = 2*abs(Y(1:NFFT/2+1));
  105. subplot(4,2,1)
  106. plot(f,data);
  107. xlabel('Frequency (Hz)')
  108. ylabel('|Y(f)|')
  109. axis([0 len 0 5])
  110. legend('第一通道')

  111. Y = fft(voltage(2:8:end,1),NFFT)/L;
  112. Fs = SAMPLE_RATE;
  113. f = Fs/2*linspace(0,1,NFFT/2+1);
  114. len = max(f);
  115. data = 2*abs(Y(1:NFFT/2+1));
  116. subplot(4,2,2)
  117. plot(f,data);
  118. xlabel('Frequency (Hz)')
  119. ylabel('|Y(f)|')
  120. axis([0 len 0 5])
  121. legend('第二通道')

  122. Y = fft(voltage(3:8:end,1),NFFT)/L;
  123. Fs = SAMPLE_RATE;
  124. f = Fs/2*linspace(0,1,NFFT/2+1);
  125. len = max(f);
  126. data = 2*abs(Y(1:NFFT/2+1));
  127. subplot(4,2,3)
  128. plot(f,data);
  129. xlabel('Frequency (Hz)')
  130. ylabel('|Y(f)|')
  131. axis([0 len 0 5])
  132. legend('第三通道')

  133. Y = fft(voltage(4:8:end,1),NFFT)/L;
  134. Fs = SAMPLE_RATE;
  135. f = Fs/2*linspace(0,1,NFFT/2+1);
  136. len = max(f);
  137. data = 2*abs(Y(1:NFFT/2+1));
  138. subplot(4,2,4)
  139. plot(f,data);
  140. xlabel('Frequency (Hz)')
  141. ylabel('|Y(f)|')
  142. axis([0 len 0 5])
  143. legend('第四通道')

  144. Y = fft(voltage(5:8:end,1),NFFT)/L;
  145. Fs = SAMPLE_RATE;
  146. f = Fs/2*linspace(0,1,NFFT/2+1);
  147. len = max(f);
  148. data = 2*abs(Y(1:NFFT/2+1));
  149. subplot(4,2,5)
  150. plot(f,data);
  151. xlabel('Frequency (Hz)')
  152. ylabel('|Y(f)|')
  153. axis([0 len 0 5])
  154. legend('第五通道')

  155. Y = fft(voltage(6:8:end,1),NFFT)/L;
  156. Fs = SAMPLE_RATE;
  157. f = Fs/2*linspace(0,1,NFFT/2+1);
  158. len = max(f);
  159. data = 2*abs(Y(1:NFFT/2+1));
  160. subplot(4,2,6)
  161. plot(f,data);
  162. xlabel('Frequency (Hz)')
  163. ylabel('|Y(f)|')
  164. axis([0 len 0 5])
  165. legend('第六通道')

  166. Y = fft(voltage(7:8:end,1),NFFT)/L;
  167. Fs = SAMPLE_RATE;
  168. f = Fs/2*linspace(0,1,NFFT/2+1);
  169. len = max(f);
  170. data = 2*abs(Y(1:NFFT/2+1));
  171. subplot(4,2,7)
  172. plot(f,data);
  173. xlabel('Frequency (Hz)')
  174. ylabel('|Y(f)|')
  175. axis([0 len 0 5])
  176. legend('第七通道')

  177. Y = fft(voltage(8:8:end,1),NFFT)/L;
  178. Fs = SAMPLE_RATE;
  179. f = Fs/2*linspace(0,1,NFFT/2+1);
  180. len = max(f);
  181. data = 2*abs(Y(1:NFFT/2+1));
  182. subplot(4,2,8)
  183. plot(f,data);
  184. xlabel('Frequency (Hz)')
  185. ylabel('|Y(f)|')
  186. axis([0 len 0 5])
  187. legend('第八通道')

复制代码

MATLAB操作如下图1-1所示:

1.png
图1-1
将方框中的路径修改为数据文件保存路径,然后点击箭头指向位置运行就可以看到采集的数据是否正确。
matlab经过分析得到的波形如图1-2,1-3所示:

4.png
图1-2

5.png
图1-3

本次实验提供的信号源为2KHz,Vpp为5V的正弦波(正负2.5V),而且只对第二通道的数据提供信号源,与MATLAB分析出来的波形一致,说明我们本次实验成功。

串口数据采集的matlab文件使用以下文件,需要注意的是,由于matlab是绘制的8个通道的数据,所以通道设置命令必须是8个通道都采集(55 A5 01 00 00 00 FF F0)

uart_wave.m (5.03 KB, 下载次数: 228)

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|芯路恒电子技术论坛 |鄂ICP备2021003648号

GMT+8, 2024-11-21 18:09 , Processed in 0.213302 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表