打印
[MM32软件]

灵动微电子MM32F5330测评3.对加速度芯片进行4K采样,通过FFT和积分得到当前振动加速度、...

[复制链接]
467|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 两只袜子 于 2024-7-23 21:09 编辑

前言
准备使用ADC采集加速度值,然后使用定时器进行4K采样率采样加速度芯片,通过FFT和积分得到当前振动加速度、速度、位移和频率值。
硬件焊接
之前项目用的加速度芯片FXLN8371QR1,电压输出型,现在不知道为什么这种电压输出型都停产了,基本都是SPI输出的芯片。


使用 PA2作为ADC采集口,对应为ADC12_IN2
      PA0作为S_EN使能脚
void Device_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct;
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOC, ENABLE);
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_0;//PA2
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_1 | GPIO_Pin_2;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_Out_PP;
    GPIO_Init(GPIOC, &GPIO_InitStruct);
  f_fenbianlv= 2;
GPIO_WriteBit(GPIOC, GPIO_Pin_1, Bit_SET);
  GPIO_WriteBit(GPIOC, GPIO_Pin_2, Bit_SET);
GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);
}
ADC初始化
void ADC_Configure(void)
{
    ADC_InitTypeDef  ADC_InitStruct;
    GPIO_InitTypeDef GPIO_InitStruct;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
    ADC_CalibrationConfig(ADC1, 0x1FE);
    ADC_StructInit(&ADC_InitStruct);
    ADC_InitStruct.ADC_Resolution = ADC_Resolution_12b;
    ADC_InitStruct.ADC_Prescaler  = ADC_Prescaler_16;
    ADC_InitStruct.ADC_Mode       = ADC_Mode_Imm;
    ADC_InitStruct.ADC_DataAlign  = ADC_DataAlign_Right;
    ADC_Init(ADC1, &ADC_InitStruct);
    ADC_SampleTimeConfig(ADC1, ADC_Channel_2, ADC_SampleTime_240_5);
//   ADC_SampleTimeConfig(ADC1, ADC_Channel_4, ADC_SampleTime_240_5);
//    ADC_SampleTimeConfig(ADC1, ADC_Channel_5, ADC_SampleTime_240_5);
    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
    /* PA0 */
    GPIO_StructInit(&GPIO_InitStruct);
    GPIO_InitStruct.GPIO_Pin   = GPIO_Pin_2;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_High;
    GPIO_InitStruct.GPIO_Mode  = GPIO_Mode_AIN;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
    ADC_Cmd(ADC1, ENABLE);
}
设置定时器为4096hz
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
    TIM_TimeBaseStruct.TIM_Prescaler         = 3;//(TIM_GetTIMxClock(TIM1) / 10000 - 1);
    TIM_TimeBaseStruct.TIM_CounterMode       = TIM_CounterMode_Up;
    TIM_TimeBaseStruct.TIM_Period            = (10986 - 1);//(2500 - 1);//重装系数
    TIM_TimeBaseStruct.TIM_ClockDivision     = TIM_CKD_Div1;
    TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStruct);
    TIM_ITConfig(TIM1, TIM_IT_Update, ENABLE);
    NVIC_InitStruct.NVIC_IRQChannel = TIM1_UP_IRQn;
    NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
    NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStruct);
    TIM_Cmd(TIM1, ENABLE);
使用ADC采集数据后,进行数字滤波和FFT变换等计算后得到结果。
静止时为测试值都为0

用手摇晃传感器


测试电扇振动值:



使用特权

评论回复
沙发
guijial511| | 2024-7-24 08:02 | 只看该作者
这个看起来有点像超声波探头呢

使用特权

评论回复
板凳
shenxiaolin| | 2024-7-29 21:06 | 只看该作者
感谢分享

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1989

主题

6978

帖子

10

粉丝