PID regulator v 1.0
 
Loading...
Searching...
No Matches
main.c File Reference

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
 

Detailed Description

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:

  1. Timer Interrupt (100 ms) - uaktualnienie odczytu z DMA, sterowanie silnikiem oraz wystawianie flagi do komunikacji.
  2. ADC w trybie DMA - pobieranie danych z czujników w sposób bezpośredni, bez angażowania procesora, co pozwala na asynchroniczne zbieranie próbek.
  3. Pętla główna - analizowanie flagi z przerwania, obsługa komunikacji.
  4. EXTI Interrupt - przerwanie działania programu, wyłączenie silnika

    Created on: Dec 1, 2024 Author: Igor

Function Documentation

◆ Error_Handler()

void Error_Handler ( void )

This function is executed in case of error occurrence.

Return values
None
Here is the caller graph for this function:

◆ HAL_GPIO_EXTI_Callback()

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.

Parameters
GPIO_PinNumer pinu, który wywołał przerwanie.
Here is the call graph for this function:

◆ HAL_TIM_PeriodElapsedCallback()

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.

Parameters
htimPointer do struktury TIM_HandleTypeDef zawierającej informacje o timerze.
Here is the call graph for this function:

◆ main()

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

Return values
intZwraca 0 w przypadku poprawnego zakończenia.
Here is the call graph for this function:

◆ SystemClock_Config()

void SystemClock_Config ( void )

System Clock Configuration.

Return values
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

Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ flag_refresh_LCD

volatile int flag_refresh_LCD = 0

Flaga do odświeżania wyświetlacza LCD

◆ flag_send_data

volatile int flag_send_data = 0

Flaga wskazująca na konieczność wysłania danych przez UART

◆ flag_turn_on_off

volatile int flag_turn_on_off = 0

Flaga do włączania/wyłączania silnika

◆ last_EXTI_interrupt_time

volatile uint32_t last_EXTI_interrupt_time

Zmienna do cyfrowego debouncingu przycisku

◆ lcd_refresh_counter

int lcd_refresh_counter = 0

Licznik odświeżania wyświetlacza LCD

◆ motor_instance

motor_struct motor_instance

Instancja silnika DC

◆ new_speed

int new_speed = 0

Obliczona prędkość silnika na podstawie odczytu z ADC.

◆ uart_buffer

char uart_buffer[100]

Bufor do komunikacji UART