Sobre o projeto
Este projeto é um firmware para um carro autoequilibrante de duas rodas baseado no microcontrolador STM32F103C8T6. Ele utiliza a biblioteca HAL e o sistema operacional em tempo real FreeRTOS, empregando o sensor de atitude MPU6050 e três malhas de controle PID em cascata (malha de ângulo, malha de velocidade e malha de direção) para manter o equilíbrio do corpo, além de suportar controle remoto e ajuste de parâmetros via módulo Bluetooth.
**Características principais:**
* **Esquema de controle:** Adota controle PID em cascata de três malhas, com todas as malhas executadas na interrupção do temporizador TIM1, garantindo tempo real rígido de 1kHz, não afetado pelo escalonamento de tarefas do FreeRTOS.
* **Arquitetura de software:** Baseada no FreeRTOS, a lógica da aplicação é dividida em três tarefas: tarefa de botão (keyTask), tarefa de comunicação Bluetooth (commTask) e tarefa de exibição OLED (displayTask), com prioridades decrescentes nessa ordem.
* **Cálculo de atitude:** Utiliza o algoritmo de filtro complementar para fundir os dados do acelerômetro e do giroscópio do MPU6050, calculando o ângulo de inclinação do corpo.
* **Comunicação e controle:** Comunica-se com o módulo Bluetooth via USART2, suportando um protocolo personalizado (formato `[tag,dados]`) para controle remoto em tempo real (joystick) e ajuste de parâmetros (slider). Os parâmetros PID ajustados precisam ser confirmados pressionando o botão K2 para entrar em vigor, evitando operações acidentais.
* **Plataforma de hardware:** Baseada em uma placa de controle específica para carro autoequilibrante (esquema elétrico em `docs/`), com o microcontrolador STM32F103C8T6, acionamento do motor DC com redução via TB6612FNG e display OLED.
* **Ambiente de desenvolvimento:** Código de inicialização gerado pelo STM32CubeMX, CLion como IDE de desenvolvimento e cadeia de ferramentas de compilação arm-none-eabi-gcc.
**Detalhes técnicos:**
* **Controle PID:** Malha de ângulo (Kp=5, Ki=0.1, Kd=5), malha de velocidade (Kp=2, Ki=0.05, Kd=0), malha de direção (Kp=4, Ki=3, Kd=0). Parâmetros ajustados manualmente.
* **Proteção de dados compartilhados:** Adota design sem bloqueio, utilizando a característica de leitura/escrita atômica de 32 bits do Cortex-M3 e usando flags de requisição (`StartReq`/`ApplyReq`) para que a tarefa de interrupção processe mudanças de estado, evitando problemas de seção crítica.
* **Ocupação de recursos:** Na compilação Debug, a ocupação de Flash é de aproximadamente 94,6% (61956 bytes) e a de RAM é de aproximadamente 78,0% (15976 bytes).
* **Origem do projeto:** Este projeto é uma migração e reestruturação do projeto de carro autoequilibrante baseado na biblioteca padrão STM32 do UP "Jiang Xie Ke Ji (Jiang Ke Da)" do Bilibili, alterando a biblioteca padrão para HAL+FreeRTOS e ajustando a estrutura do projeto. Todos os direitos de originalidade do hardware, esquema de controle e lógica de código pertencem à Jiang Xie Ke Ji.
**Instruções de uso:**
* **Operação:** Após ligar, é necessário pressionar o botão K1 para iniciar o controle PID. O botão K2 é usado para confirmar os parâmetros PID recebidos via Bluetooth.
* **Ajuste de parâmetros:** É possível ajustar os parâmetros PID enviando pacotes de dados no formato `[slider,nome_parâmetro,valor]` via Bluetooth do celular. Após o ajuste, pressione o botão K2 para que os parâmetros entrem em vigor.
* **Compilação e gravação:** Abra o diretório raiz do projeto com o CLion, configure a cadeia de ferramentas e o gravador, e então compile e grave.
**Avisos importantes:**
* O projeto é apenas para referência de aprendizado, sendo proibido o uso em qualquer projeto comercial.
* Os direitos autorais do esquema elétrico pertencem à Jiang Xie Ke Ji.
* A deriva zero do giroscópio e o deslocamento do ângulo central precisam ser calibrados de acordo com o hardware real.
* A taxa de transmissão da comunicação Bluetooth é 9600.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.