Java教程

弦,震动的琴弦

本文主要是介绍弦,震动的琴弦,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!


 

01 长与频率


1.问题来源

在昨天晚上的博文 这道题你怎么看? 介绍了同学在公众号TSINGHUAZHUOQING留下的一道他们学校给出有趣的电子制作测试题,即通过光电管传感器测量橡皮筋的长度。通过拨动皮筋使其振动从而产生类似于琴弦的震动,利用光电管获得弦震动信号,从而测量到它的基频。

然后再根据橡皮筋的长度 L L L与其震动频率 f f f之间的关系,获得橡皮筋的长度。

2.问题分解

这个工程问题就转换成一下几个基本问题:

  • 问题1: 如何利用光电信号测量一条,或者多条橡皮筋的振荡信号?
  • 问题2: 通过振荡信号如何测量震动的基本频率,如果存在多条橡皮筋的时候,则需要计算出多个基本频率;
  • 问题3: 如何确定公式【1-1】中的参数: a , b , c a,b,c a,b,c?

 

02 量橡皮筋振动信号


根据博文这道题你怎么看?中的要求, 对于弦振动信号测量要求只能使用光电传感器,而不允许使用震动传感器、磁感应传感器、压力传感器等。

1.光电传感

虽然原题目要求使用一对发射与接收光电管,不过根据在 对于来自范兵提供光电检测带模块解析 以及 开源的关于智能车竞赛光电起始点方案 中给出了直接里光敏三极管来检测附近物体通过是所引起的光线变化的方案,因此利用在 TB 购买到的 PT0603光敏电阻(三极管) 直接放置在振荡橡皮筋的附近来感知相应的光线变化信号。

(1)PT0603外形

▲ PT0603光敏电阻(三极管)

▲ PT0603光敏电阻(三极管)

为了便于测试,将焊接在100mil的插针上。如下图所示。使用数字万用表可以方便确定购买三级的极性。正向测试,可以测量电阻大约为10kΩ左右,反向则对应高阻状态。

▲ 将焊接在100mil的插针上

▲ 将焊接在100mil的插针上

(2)PT0603正向电流与光强

【Ⅰ.测量方案】

根据 LED的电流与光强之间的关系 中测量的结果,LED发送光强与流过的电流近似成正比,所以使用一个可调电压的直流电源驱动LED,发出白光,照射在PT0603上,通过一个电流采样电阻(1kΩ)或者前向电流。

▲ 测试电路简图

▲ 测试电路简图

为了防止外界光线干扰,整个电路防止在一个遮光盒内进行测试。

▲ 测试特性所使用的遮光盒

▲ 测试特性所使用的遮光盒

【Ⅱ.测量结果】

下图显示了补光LED的工作电流与PT0603的导通电流之间的关系。

▲ 补光LED的工作电流与PT0603的导通电流

▲ 补光LED的工作电流与PT0603的导通电流

这个关系看起来在前一阶段呈现非线性。具体原因上不可解释。

(3)正向电流与电压

在外界光线一定的情况下,测量正向电流与工作电压之间的关系。测量电路仍然与上面相同,只是补光的LED恒定为12V。VCC从 0V增加到5V,测量U1 的电压变化。

▲ 光电组电压与正向电流之间的关系

▲ 光电组电压与正向电流之间的关系

→ 测量结论:

通过上面测量PT0603光敏电阻,可以看到对应的正向电流与光强之间存在着一定线性关系。从工作电压的关系来看,它具有三极管基极电流在放大区内的恒流特性。

2.分压电路

由于PT0603光敏三极管的正向导通电流在mA级别,所以可以通过分压电阻来获得它的电流变化情况。

为了适应不同的环境光强,使用一个 电阻箱 作为可调的分压电阻。

在当前的实验环境下,设置电阻箱为82k欧姆,使得分压电压在工作电压(+5V)中的中点附近即可。

下面是示波器观察到的分压电阻与光敏三极管分压后的电压信号。其中的波动反映了当前 实验桌上方的电灯光强的波动情况 ,可以看到波动中100Hz成分。

▲ 电阻与光敏三极管的分压电压信号

▲ 电阻与光敏三极管的分压电压信号

3.实验布局

(1)橡皮筋支架

使用两个固定钳夹住两个碳纤维棒,上面使用文件夹扯紧待检测长度的橡皮筋。由于需要靠橡皮筋的反射光来反映它的震动情况,所以选取了反光效果好的黄色橡皮筋。

将光敏三极管固定在橡皮筋的一侧,正对着它。

▲ 将光敏三极管放置在橡皮筋的附近

▲ 将光敏三极管放置在橡皮筋的附近

为了提高橡皮筋反射光线的强度,在光电管的同一侧还是用了光源进行照射橡皮筋。下图所示则使用了显微摄像头内部的补光LED对橡皮筋进行照射。

▲ 在橡皮筋的一侧进行补光

▲ 在橡皮筋的一侧进行补光

手波动橡皮筋,可以看到示波器中检测到的橡皮筋振动的情况。振动大约持续了5秒钟。

▲ 测量得到的橡皮筋振荡的信号

▲ 测量得到的橡皮筋振荡的信号

 

03 据处理


1.数据采集

使用DS6104示波器观察光电信号,并通过网络结构读取采集到的数据。

设置示波器扫描参数,使得采集数据的参数为:

数据采集参数:
采集数据频率:1000Hz
采集数据个数:1400

下图是对其中一次振荡信号的采集。

▲ 光电信号波形

▲ 光电信号波形

2.对数据进行FFT

对采集到的信号进行傅里叶分析,可以看到数据中存在的震动频率。主要的两个频率:一个是67.5Hz, 一个是100Hz。

其中100Hz的频率是周围灯光的频率。对应的67.5Hz则是橡皮筋震动的频率。

▲ 采集信号的FFT结果

▲ 采集信号的FFT结果

3.不同长度橡皮筋频率

下面处理不同长度的橡皮筋的震动频率。

(1)长度22.5厘米

▲ 震动橡皮筋信号波形

▲ 震动橡皮筋信号波形

▲ 采集数据的频谱

▲ 采集数据的频谱

振荡频率: 76.3Hz

(1)长度29.5 厘米

▲ 震动橡皮筋信号波形

▲ 震动橡皮筋信号波形

▲ 震动橡皮筋信号频谱

▲ 震动橡皮筋信号频谱

震动频率:69.9Hz

▲ 橡皮筋震动波形

▲ 橡皮筋震动波形

▲ 振动波形的频谱

▲ 振动波形的频谱

振动频率为:51.5Hz

 

震动实验总结


1.基本结论

前面针对通过光电传感器检测橡皮筋振动频率来测量橡皮筋的长度,进行了初步实验。给出了基于一个光敏三极管来检测橡皮筋震动的方案。为了增加检测信号的强度,需要在光敏三极管同侧对橡皮筋进行补光。

利用DS6108数字示波器观察并采集到1400个震动信号数据,采集频率为1000Hz,利用FFT可以测量出信号中橡皮筋震动的频率。

2.遗留的问题

(1)建立长度与频率之间的数学模型

根据 这道题你怎么看?长春理工大学2021电子竞赛 博文中的分析,需要对于不同长度的橡皮筋所对应的频率进行测量,然后完成对长度与频率之间的数学模型参数的估计;

为了降低模型估计误差,需要对于每一长度进行多次频率测量,来获得更加可靠的测量数据。

(2)优化采集方案

由于是利用了DS6108示波器的数据采集功能,所以设定了1000Hz的采样频率和1.4秒的采集数据长度。但为了能够获得更多的振动数据,提升信号的检测精度,需要在采集时间和采样率方面都进行进一步的提高;

 


■ 相关文献链接:

  • 这道题你怎么看?长春理工大学2021电子竞赛
  • 对于来自范兵提供光电检测带模块解析
  • 开源的关于智能车竞赛光电起始点方案
  • TB 购买到的 PT0603光敏电阻(三极管)
  • LED的电流与光强之间的关系
  • 低价电阻箱-阻值测试
  • 电灯泡内通有交流电,为什么看不到灯泡在闪烁?

 

件程序


1.读取DS6104示波器数据

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# TEST3.PY                     -- by Dr. ZhuoQing 2021-05-02
#
# Note:
#============================================================

from headm import *
from tsmodule.tsvisa        import *

ds6104open()

x,y=ds6104readcal(1)

tspsave('xydata1', x=x, y=y)

plt.plot(x, y)
plt.xlabel("Time(s)")
plt.ylabel("Voltage(V)")
plt.grid(True)
plt.tight_layout()
plt.show()

#------------------------------------------------------------
#        END OF FILE : TEST3.PY
#============================================================

2.对信号进行频谱分析

#!/usr/local/bin/python
# -*- coding: gbk -*-
#============================================================
# FFTDATA.PY                   -- by Dr. ZhuoQing 2021-05-02
#
# Note:
#============================================================

from headm import *

 - [ ] List item

x, y = tspload('xydata1', 'x', 'y')

fftx = abs(fft.fft(y))

xspan = x[-1]-x[0]
ts = xspan / (len(x) - 1)
freq = linspace(0, 1/ts, len(x))

plt.plot(freq[1:300], fftx[1:300])
plt.xlabel("Frequejcy")
plt.ylabel("Spectrum")
plt.grid(True)
plt.tight_layout()
plt.show()

#------------------------------------------------------------
#        END OF FILE : FFTDATA.PY
#============================================================
这篇关于弦,震动的琴弦的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!