Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
vadyschka01
2026-05-27 16:10:40 +03:00
parent 29749c6212
commit babc5a24e3
12 changed files with 1436 additions and 230 deletions
+34 -23
View File
@@ -2,14 +2,15 @@
#include "imu.h"
#include "motors.h"
#include "dsp_manager.h"
#include "dshot2.h"
// 1. ПЕРЕМЕННЫЕ
volatile uint8_t imu_flag = 0;
volatile uint32_t m1_speed = 900;
volatile uint32_t m2_speed = 900;
volatile uint32_t m3_speed = 900;
volatile uint32_t m4_speed = 900;
uint32_t m1_speed = 0;
uint32_t m2_speed = 0;
uint32_t m3_speed = 0;
uint32_t m4_speed = 0;
#pragma pack(push, 1)
typedef struct {
@@ -22,10 +23,10 @@ typedef struct {
} Telemetry_t;
#pragma pack(pop)
// 2. ПРОТОТИПЫ (Чтобы компилятор не ругался)
// 2. ПРОТОТИПЫ
void SystemClock_Config_160MHz(void);
void UART2_Init_921600(void);
void TIM6_Init_1000Hz(void);
void TIM7_Init_1000Hz(void);
void UART_SendPacket(Telemetry_t *p);
// 3. ОСНОВНОЙ ЦИКЛ
@@ -42,7 +43,7 @@ int main(void) {
DSP_Init(); // Инициализация нашего анализатора Фурье
TIM6_Init_1000Hz();
TIM7_Init_1000Hz();
__enable_irq();
Telemetry_t pkt;
@@ -51,31 +52,41 @@ int main(void) {
while (1) {
if (imu_flag) {
imu_flag = 0;
static unsigned short dshot_erpm[4];
DSHOT_GetERPM(dshot_erpm, 0);
DSP_SetMotorErpm(dshot_erpm, 7);
IMU_ReadRawData();
//Motors_PollTelemetry();
//сохраняем во временную переменную
int16_t gx_val = raw_gx;
DSP_AddSample((float32_t)gx_val);
if (dsp_buffer_ready) {
if (fft_ready) {
DSP_Process();
}
float32_t filt_gx_value = filt_gx;
pkt.gx = gx_val;
pkt.filt_gx = (int16_t)filt_gx_value;
pkt.notch1_hz = dsp_notch_freqs[0];
pkt.notch2_hz = dsp_notch_freqs[1];
pkt.notch3_hz = dsp_notch_freqs[2];
pkt.notch1_hz = notch_report_hz[0];
pkt.notch2_hz = notch_report_hz[1];
pkt.notch3_hz = notch_report_hz[2];
UART_SendPacket(&pkt);
Set_Motor_Individual(m1_speed, m2_speed, m3_speed, m4_speed);
uint32_t m1 = m1_speed;
uint32_t m2 = m2_speed;
uint32_t m3 = m3_speed;
uint32_t m4 = m4_speed;
Set_Motor_Individual(m1, m2, m3, m4);
}
}
}
// 4. РЕАЛИЗАЦИЯ ФУНКЦИЙ (Тут был провал - их не хватало!)
// 4. РЕАЛИЗАЦИЯ ФУНКЦИЙ
void SystemClock_Config_160MHz(void) {
RCC->CR |= RCC_CR_HSION;
@@ -111,18 +122,18 @@ void UART_SendPacket(Telemetry_t *p) {
}
}
void TIM6_Init_1000Hz(void) {
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM6EN;
TIM6->PSC = 16000 - 1;
TIM6->ARR = 10 - 1;
TIM6->DIER |= TIM_DIER_UIE;
NVIC_EnableIRQ(TIM6_DAC_IRQn);
TIM6->CR1 |= TIM_CR1_CEN;
void TIM7_Init_1000Hz(void) {
RCC->APB1ENR1 |= RCC_APB1ENR1_TIM7EN;
TIM7->PSC = 16000 - 1;
TIM7->ARR = 10 - 1;
TIM7->DIER |= TIM_DIER_UIE;
NVIC_EnableIRQ(TIM7_DAC_IRQn);
TIM7->CR1 |= TIM_CR1_CEN;
}
void TIM6_DAC_IRQHandler(void) {
if (TIM6->SR & TIM_SR_UIF) {
TIM6->SR = 0;
extern "C" void TIM7_DAC_IRQHandler(void) {
if (TIM7->SR & TIM_SR_UIF) {
TIM7->SR = 0;
imu_flag = 1;
}
}