内容介绍
内容介绍
项目描述(包含项目介绍、设计思路)
本项目旨在利用dsPIC33CK64MC105开发板搭配DFR0052压力传感器,实现对扬声器振动的检测与分析。项目通过将压力传感器贴附于扬声器表面,将扬声器的振动信号转换为电信号,并由dsPIC33CK64MC105开发板上的ADC模块采集这些信号。采集到的振动数据通过串口传输至电脑,使用Rust语言编写的上位机程序进行解析,判断扬声器是否在振动并提取其振动的基频。为优化数据质量,项目设计了一个50Hz陷波滤波器,以消除电源频率干扰。
设计思路分为硬件和软件两部分。硬件方面,DFR0052压力传感器通过其压电特性捕捉扬声器振动,输出模拟电压信号,该信号接入dsPIC33CK64MC105开发板的ADC引脚进行数字化转换。软件方面,ADC模块配置为连续采样模式,定时器用于控制采样频率,串口模块实现数据传输。上位机程序接收数据后,应用50Hz陷波滤波器进行处理,并通过快速傅里叶变换(FFT)分析提取振动基频。
简短的硬件介绍
- dsPIC33CK64MC105开发板:搭载Microchip的dsPIC33CK64MC105数字信号控制器(DSC),采用16位RISC架构,工作频率可达100MHz,配备64KB闪存和8KB RAM。其12位ADC模块支持多通道采样,丰富的定时器和串口资源使其非常适合信号处理和数据采集应用。
- DFR0052压力传感器:一种压电振动传感器,能够将机械振动转换为电压信号,输出与振动强度成正比的模拟信号,适用于振动检测场景。
软件流程图
主要代码片段:
单片机:
int main(void)
{
SYSTEM_Initialize();
DELAY_milliseconds(2000);
adc->adcMulticoreInterface->ChannelCallbackRegister(ADC_ConversionDone);
timer->TimeoutCallbackRegister(ADC_StartConversionOnChannel);
while (1)
{
if (adcOk)
{
timer->Stop();
for (int i = 0; i < ADC_BUFFER_SIZE; i++) //打印3200个采样点
{
sprintf(buffer, "%u\n", adcBuffer[i]);
printf("%s", buffer);
}
adcOk = false;
g_adcBufferIndex = 0;
timer->Start();
}
}
}
上位机:
let mut reader = BufReader::new(port);
loop {
match collect_and_analyze(&mut reader) {
Ok((frequency, amplitude)) => {
if amplitude < 2800.0 {
print!("无 \r");
} else {
print!("{}Hz\r", frequency);
}
std::io::Write::flush(&mut std::io::stdout()).unwrap();
},
Err(e) => {
eprintln!("错误: {}", e);
// 短暂等待后继续尝试
std::thread::sleep(Duration::from_millis(500));
}
}
}
......
// 调整样本数量
samples.truncate(fft_size);
// 应用50Hz陷波滤波器
apply_notch_filter(&mut samples);
// 计算基频
let (fundamental_freq, amplitude) = calculate_fundamental_frequency(&samples, fft_size)?;
功能展示图片
连接图:

上位机显示:

项目中遇到的难题和解决方法
难题:设计50Hz陷波滤波器以消除电源干扰。
解决方法:采用陷波滤波器,过滤50Hz成分。
对本活动的心得体会(包括意见或建议)
通过本项目,我深入理解了嵌入式系统与信号处理的结合。dsPIC33CK64MC105开发板的强大性能和DFR0052传感器的高灵敏度为项目提供了硬件支持,而C语言与Rust的协同开发提升了软件实现效率。解决技术难题的过程让我掌握了滤波器设计和频谱分析的技能,同时Rust的学习拓展了我的编程视野。
期待未来参与更多类似项目,继续探索嵌入式的潜力。
软硬件
附件下载
mcu.X.zip
fft.zip
团队介绍
评论
0 / 100
查看更多
猜你喜欢
Funpack4-2 - 基于高速ADC采样的物体振动频率测量方案设计该项目使用了dsPIC33CK64MC105 Curiosity Nano和振动传感器,实现了物体振动频率测量方案的设计,它的主要功能为:物体振动频率测量。
TetraPak
9
Funpack4-2 - dsPIC33CK64MC105 Curiosity Nano 实现测量物体振动的固有频率该项目使用了dsPIC33CK64MC105 Curiosity Nano,实现了测量物体振动固有频率的设计,它的主要功能为:通过高速adc采集电压计算物体的振动频率。
Hotmilk
8
Funpack4-2 - 用dsPIC33CK64MC105 Curiosity Nano 实现24V稳压电路。该项目使用了dsPIC33CK64MC105 Curiosity Nano,实现了BOOST电路的设计,它的主要功能为:12V输入 24V稳压输出。。
sll
31