内容介绍
内容介绍
一.项目介绍
dsPIC33CK64MC105 Curiosity Nano 评估套件(EV88G73A)是一个经济高效的硬件平台,面向高性能数字电源与电机控制而生!搭载100MHz高性能数字信号控制器,配备64KB ECC Flash和8KB RAM,集成12位/3.5Msps ADC、12位DAC、4x2高速PWM(2ns分辨率)及核心独立外设(CIP),针对高性能电机控制与数字电源设计,支持高精度PWM、快速ADC及硬件加速功能。板载调试器和可调电压功能便于实时调试,适用于工业自动化、电机驱动等高实时性场景。
项目任务:
使用片内的ADC和高速比较器配合振动传感器,将探头贴在物体外部,敲击后测出振动的固有频率。
二 硬件准备
dsPIC33CK64MC105 Curiosity Nano
三、软件准备
MPLAB X IDE v6.25
四、项目步骤
- 硬件连接 将DFRobot 振动传感器的信号引脚连接到开发板的PA0引脚 这样可以使用adc1 的第0个通道
- 软件配置 使用MCC进行可视化配置 配置ADC的初始化 并且将adc的触发改为软件触发并且设置比较器的值
- 通过合理的设置比较器的阈值对其进行滤波
- 在第一次触发比较器的值的时候记录一个时间值
- 在第二次触发比较器时记录一个时间值
- 通过两个时间值的差进行计算得出震动的频率
- 流程图
、
主要代码
/*
? [2025] Microchip Technology Inc. and its subsidiaries.
Subject to your compliance with these terms, you may use Microchip
software and any derivatives exclusively with Microchip products.
You are responsible for complying with 3rd party license terms
applicable to your use of 3rd party software (including open source
software) that may accompany Microchip software. SOFTWARE IS ?AS IS.?
NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, APPLY TO THIS
SOFTWARE, INCLUDING ANY IMPLIED WARRANTIES OF NON-INFRINGEMENT,
MERCHANTABILITY, OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT
WILL MICROCHIP BE LIABLE FOR ANY INDIRECT, SPECIAL, PUNITIVE,
INCIDENTAL OR CONSEQUENTIAL LOSS, DAMAGE, COST OR EXPENSE OF ANY
KIND WHATSOEVER RELATED TO THE SOFTWARE, HOWEVER CAUSED, EVEN IF
MICROCHIP HAS BEEN ADVISED OF THE POSSIBILITY OR THE DAMAGES ARE
FORESEEABLE. TO THE FULLEST EXTENT ALLOWED BY LAW, MICROCHIP?S
TOTAL LIABILITY ON ALL CLAIMS RELATED TO THE SOFTWARE WILL NOT
EXCEED AMOUNT OF FEES, IF ANY, YOU PAID DIRECTLY TO MICROCHIP FOR
THIS SOFTWARE.
*/
#include "mcc_generated_files/system/system.h"
#include "mcc_generated_files/data_streamer/data_streamer.h"
#include "mcc_generated_files/system/pins.h"
#include "mcc_generated_files/adc/adc1.h" // TODO: Replace {adc_header} with the corresponding ADC header file for your project (ex: adc1.h)
#include "mcc_generated_files/timer/tmr1.h" // TODO: Replace {timer_header} with the corresponding timer header file for your project (ex: tmr1.h)
static const struct ADC_INTERFACE *adc = &ADC1; // TODO: Replace with the ADC instance in your project
static volatile bool sendDataStreamerFrame = false;
static volatile uint32_t timer1s=0;
static uint16_t state_value =0;
static uint16_t state2_value =0;
static uint32_t ttt=0;
static void ADC_Compare(enum ADC_CMP comparator)
{
static enum ADC_CHANNEL selectedChannel = Channel_AN0; // TODO: Replace with the ADC Channel you selected in the Pin Grid View
if(adc->IsConversionComplete(selectedChannel))
{
DataStreamer.adcResult = adc->ConversionResultGet(selectedChannel);
if(DataStreamer.adcResult<200)
{
state_value=0;
}
switch(comparator)
{
case ADC_CMP_0:
DataStreamer.cmp0Result = DataStreamer.adcResult;
if(state_value==0)
{
ttt=timer1s;
}else if(state_value==2)
{
DataStreamer.freq =1000 /(timer1s-ttt )*2;
}
state_value=1;
break;
case ADC_CMP_1:
state_value=2;
DataStreamer.cmp1Result = DataStreamer.adcResult;
break;
default:
break;
}
}
sendDataStreamerFrame = true;
}
static void Timer_Callback_100ms(void)
{
timer1s++;
}
int main(void)
{
const struct TIMER_INTERFACE *timer = &Timer1; // TODO: Replace with the timer instance in your project
SYSTEM_Initialize();
DataStreamer.adcResult = 0;
DataStreamer.cmp0Result = 0;
DataStreamer.cmp1Result = 0;
DataStreamer.cmp2Result = 0;
DataStreamer.freq=0;
adc->adcMulticoreInterface->ComparatorCallbackRegister(ADC_Compare);
timer->TimeoutCallbackRegister(Timer_Callback_100ms);
while(1)
{
adc->SoftwareTriggerEnable();
if(sendDataStreamerFrame)
{
WriteFrame();
DataStreamer.cmp1Result=0;
DataStreamer.cmp0Result =0;
DataStreamer.freq=0;
sendDataStreamerFrame = false;
}
}
}
活动总结
通过该项目学习,我已掌握dsPIC33CK64MC105片内ADC与高速比较器的配置及协同运作,能够准确设置ADC的采样频率与分辨率,合理配置高速比较器的阈值触发逻辑,并实现两者联动,如利用比较器触发ADC采样。在硬件实践上,我熟练完成振动传感器的硬件连接,从电源滤波、信号放大电路设计,到与微控制器引脚精准对接,同时学会使用示波器观察信号完整性。
在算法应用方面,我运用FFT或过零检测法提取振动信号主频,通过均值滤波、带通滤波等方法应对噪声干扰,优化频谱分析结果。通过模块化开发,我将项目拆解为传感器驱动、ADC采样等独立模块,封装接口函数提升代码复用性,理解模块间时序关系与资源调度策略。最终,我打通了“传感器-硬件-算法-应用”链路,具备嵌入式系统融合设计的实践能力。
软硬件
元器件
电路图
附件下载
222.X.rar
团队介绍
个人
评论
0 / 100
查看更多
猜你喜欢
Funpack4-2 - 基于高速ADC采样的物体振动频率测量方案设计该项目使用了dsPIC33CK64MC105 Curiosity Nano和振动传感器,实现了物体振动频率测量方案的设计,它的主要功能为:物体振动频率测量。
TetraPak
9
Funpack4-2 - 基于dsPIC33CK64MC105 Curiosity Nano实现测出振动的固有频率的功能该项目使用了dsPIC33CK64MC105 Curiosity Nano,实现了测出振动的固有频率的设计,它的主要功能为:使用片内的ADC和高速比较器配合振动传感器,将探头贴在物体外部,敲击后测出振动的固有频率。。
magmadimsum
6
Funpack4-2 - 用dsPIC33CK64MC105 Curiosity Nano 实现24V稳压电路。该项目使用了dsPIC33CK64MC105 Curiosity Nano,实现了BOOST电路的设计,它的主要功能为:12V输入 24V稳压输出。。
sll
31