RTOS / Bare-metal

FreeRTOS ve STM32H7 ile Endüstriyel Sensör Füzyonu

STM32H7 + FreeRTOS: 4kHz DMA örnekleme, 72 saat önceden arıza tespiti

Spikedge MühendislikMarch 24, 20268 dk okuma
FreeRTOS ve STM32H7 ile Endüstriyel Sensör Füzyonu
oscilloscope-verified

What Was Solved

Üretim hattındaki motor arızalarını önceden tespit etmek için STM32H7B3 üzerinde FreeRTOS tabanlı gerçek zamanlı titreşim analizi, FFT pipeline ve anomali tespiti implementasyonu.

This article was prepared based on field experiences and technical evaluations of the Spikedge engineering team.

FreeRTOS + STM32H7 ile Endüstriyel Sensör Füzyonu: Kestirimci Bakım

Sistem Donanımı

Bileşen Seçim Açıklama
MCU STM32H7B3I (480MHz, Cortex-M7) Çift FPU + DMA2D
İvmeölçer ADXL357 × 3 (3-eksen) ±40g, SPI 10MHz, 4000 Hz örnekleme
OS FreeRTOS v10.5.1 Preemptive, tickless mode
Haberleşme RS-485 Modbus RTU Endüstriyel ortam
Güç 24V DC → 3.3V LDO ADC referans gürültüsü minimize

FreeRTOS Görev Mimarisi

// FreeRTOSConfig.h kritik ayarlar
#define configTICK_RATE_HZ              1000
#define configMAX_SYSCALL_INTERRUPT_PRIORITY  (5 << 4)
#define configUSE_TICKLESS_IDLE         1

// Görev öncelikleri
#define SENSOR_TASK_PRIORITY    5   // SPI DMA ISR
#define FFT_TASK_PRIORITY       4   // 1024-pt FFT, 250ms
#define ANOMALY_TASK_PRIORITY   3   // Eşik karşılaştırma
#define COMMS_TASK_PRIORITY     2   // Modbus RTU

Kritik tasarım: SensorTask NVIC priority 4 ile çalışır — configMAX_SYSCALL_INTERRUPT_PRIORITY (5) eşiğinin altında. taskENTER_CRITICAL() bloklarından etkilenmez.

IRQ yapılandırma detayları: STM32'de IRQ Gecikme Ölçümü

DMA ile Kesintisiz 4kHz Örnekleme

void SensorTask_Init(void) {
    // Circular DMA — CPU müdahalesi yok
    HAL_SPI_Receive_DMA(&hspi1, (uint8_t*)sensorBuffer, BUFFER_SIZE);
}

void HAL_SPI_RxCpltCallback(SPI_HandleTypeDef *hspi) {
    BaseType_t xHigherPriorityTaskWoken = pdFALSE;
    xSemaphoreGiveFromISR(xSensorDataReady, &xHigherPriorityTaskWoken);
    portYIELD_FROM_ISR(xHigherPriorityTaskWoken);
}

FFT Tabanlı Anomali Tespiti

ARM CMSIS-DSP ile 1024 noktalı FFT (250ms periyot):

void FFTTask(void *pvParameters) {
    arm_rfft_fast_instance_f32 fftInstance;
    arm_rfft_fast_init_f32(&fftInstance, 1024);

    for (;;) {
        xSemaphoreTake(xSensorDataReady, portMAX_DELAY);
        arm_rfft_fast_f32(&fftInstance, inputBuf, outputBuf, 0);
        arm_cmplx_mag_f32(outputBuf, magnitudeBuf, 512);

        // Rulman karakteristik frekansları
        float bpfi_energy = magnitudeBuf[BPFI_BIN];  // 147.3 Hz
        if (bpfi_energy > ALARM_THRESHOLD)
            xQueueSend(xAnomalyQueue, &bpfi_energy, 0);
    }
}

Normal spektrumdan %15 sapma → sarı alarm; %35 sapma → acil durdurma.

Doğrulama Sonuçları (90 Gün)

Metrik Değer
Tespit edilen kritik arıza 3 (önceden)
Ortalama uyarı öncülüğü 72 saat
Yanlış alarm oranı 0.4/gün
Sensor görev zamanlaması jitter <50µs
Downtime tasarrufu ~180 saat

İlgili Kaynaklar

Continue Exploring

FreeRTOSSTM32H7Sensor FusionFFTPredictive MaintenanceRTOSDMA

Spikedge Engineering

Using this technology in your own system?

Schedule a 1:1 technical analysis with Spikedge engineers.

Schedule Architecture Audit