@@ -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;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user