Plik nagłówkowy do sterowania silnikiem DC z wykorzystaniem algorytmu PID. More...
#include "main.h"
#include "cytronDriver.h"
#include "motor.h"
#include "string.h"
#include "stdio.h"
#include "./I2C_LCD_Inc/I2C_LCD.h"
Functions | |
void | SystemClock_Config (void) |
System Clock Configuration. | |
int | main (void) |
Główna funkcja programu, zawiera inicjalizację peryferiów oraz obsługę wystawionych flag. | |
void | HAL_TIM_PeriodElapsedCallback (TIM_HandleTypeDef *htim) |
Callback do obsługi przerwania timera. | |
void | HAL_GPIO_EXTI_Callback (uint16_t GPIO_Pin) |
Callback do obsługi przerwania zewnętrznego (przycisk). | |
void | Error_Handler (void) |
This function is executed in case of error occurrence. | |
Variables | |
ADC_HandleTypeDef | hadc |
DMA_HandleTypeDef | hdma_adc |
I2C_HandleTypeDef | hi2c1 |
TIM_HandleTypeDef | htim2 |
TIM_HandleTypeDef | htim3 |
TIM_HandleTypeDef | htim21 |
UART_HandleTypeDef | huart2 |
motor_struct | motor_instance |
volatile int | flag_turn_on_off = 0 |
volatile int | flag_send_data = 0 |
volatile int | flag_refresh_LCD = 0 |
char | uart_buffer [100] |
int | lcd_refresh_counter = 0 |
int | new_speed = 0 |
volatile uint32_t | last_EXTI_interrupt_time |
Plik nagłówkowy do sterowania silnikiem DC z wykorzystaniem algorytmu PID.
Plik główny projektu regulacego prędkości obrotowej silnika DC, dostosowaną do zmieniającego się obciążenia. Algorytm PID zapewnia precyzyjną kontrolę prędkości i stabilność pracy silnika w różnych warunkach.
Program obsługuje sterowanie silnikiem oraz przetwarzanie danych z ADC przy użyciu DMA. Timer generuje przerwanie co 100 ms, w którym realizowane są operacje sterujące silnikiem oraz ustawiane flagi do dalszej komunikacji (UART oraz LCD). Pętla główna odpowiedzialna jest za kontrolowanie tych flag i warunkowe obsłużenie UART oraz LCD. Nadrzędna flaga pochodząca od przycisku warunkuje wykonywanie całego programu (nie blokuje kontrolera)
Kluczowe funkcje:
EXTI Interrupt - przerwanie działania programu, wyłączenie silnika
Created on: Dec 1, 2024 Author: Igor
void Error_Handler | ( | void | ) |
This function is executed in case of error occurrence.
None |
void HAL_GPIO_EXTI_Callback | ( | uint16_t | GPIO_Pin | ) |
Callback do obsługi przerwania zewnętrznego (przycisk).
Funkcja ta jest wywoływana po naciśnięciu przycisku (GPIO_Pin == B1_Pin). Wykonuje debouncing oraz w zależności od stanu flagi włącza lub wyłącza silnik, a także zarządza podświetleniem wyświetlacza LCD.
GPIO_Pin | Numer pinu, który wywołał przerwanie. |
void HAL_TIM_PeriodElapsedCallback | ( | TIM_HandleTypeDef * | htim | ) |
Callback do obsługi przerwania timera.
Ta funkcja jest wywoływana, gdy upłynie okres timer'a htim21. Aktualizuje odczyt ADC, oblicza prędkość silnika, przygotowuje dane do wysłania przez UART oraz zarządza flagami wysłania danych i odświeżania wyświetlacza LCD. Przygotowanie danych do wysyłki w tym miejscu gwarantuje, że dane wysłane przez UART i wyświetlone na ekranie pochodzą z tego samego punktu czasowego.
htim | Pointer do struktury TIM_HandleTypeDef zawierającej informacje o timerze. |
int main | ( | void | ) |
Główna funkcja programu, zawiera inicjalizację peryferiów oraz obsługę wystawionych flag.
Funkcja inicjalizuje wszystkie peryferia, w tym ADC, PWM, enkoder, UART i LCD. Następnie w pętli głównej programu monitoruje flagi i warunkowo wysyła dane przez UART oraz aktualizuje stan ekranu LCD
int | Zwraca 0 w przypadku poprawnego zakończenia. |
void SystemClock_Config | ( | void | ) |
System Clock Configuration.
None |
Configure the main internal regulator output voltage
Initializes the RCC Oscillators according to the specified parameters in the RCC_OscInitTypeDef structure.
Initializes the CPU, AHB and APB buses clocks
volatile int flag_refresh_LCD = 0 |
Flaga do odświeżania wyświetlacza LCD
volatile int flag_send_data = 0 |
Flaga wskazująca na konieczność wysłania danych przez UART
volatile int flag_turn_on_off = 0 |
Flaga do włączania/wyłączania silnika
volatile uint32_t last_EXTI_interrupt_time |
Zmienna do cyfrowego debouncingu przycisku
int lcd_refresh_counter = 0 |
Licznik odświeżania wyświetlacza LCD
motor_struct motor_instance |
Instancja silnika DC
int new_speed = 0 |
Obliczona prędkość silnika na podstawie odczytu z ADC.
char uart_buffer[100] |
Bufor do komunikacji UART