Initialisation depot

This commit is contained in:
2025-11-30 09:58:00 +01:00
commit 56d8cd96c8
28 changed files with 3154 additions and 0 deletions

101
include/MotorController.h Normal file
View File

@@ -0,0 +1,101 @@
/**
* @file MotorController.h
* @brief DC motor control using LM18200 H-Bridge driver
*
* Provides bidirectional PWM motor control with brake functionality.
* Suitable for DC analog model locomotive control.
*
* @author Locomotive Test Bench Project
* @date 2025
*/
#ifndef MOTOR_CONTROLLER_H
#define MOTOR_CONTROLLER_H
#include <Arduino.h>
// Pin definitions for LM18200
// These can be adjusted based on your D1 Mini ESP32 wiring
#define MOTOR_PWM_PIN 25 ///< PWM signal output pin
#define MOTOR_DIR_PIN 26 ///< Direction control pin
#define MOTOR_BRAKE_PIN 27 ///< Brake control pin (active low)
/**
* @class MotorController
* @brief Controls DC motor via LM18200 H-Bridge
*
* Features:
* - Variable speed control (0-100%)
* - Bidirectional operation (forward/reverse)
* - Electronic braking
* - 20kHz PWM frequency for silent operation
* - 8-bit resolution (256 speed steps)
*/
class MotorController {
public:
/**
* @brief Constructor
*/
MotorController();
/**
* @brief Initialize motor controller hardware
*
* Configures GPIO pins and PWM channels.
* Sets motor to safe stopped state.
*/
void begin();
/**
* @brief Set motor speed and direction
* @param speed Speed value (0-100%)
* @param direction Direction: 0 = reverse, 1 = forward
*/
void setSpeed(uint8_t speed, uint8_t direction);
/**
* @brief Stop motor (coast to stop)
*
* Sets speed to zero and releases brake.
* Motor will coast to a stop.
*/
void stop();
/**
* @brief Apply electronic brake
*
* Activates LM18200 brake function for quick stop.
* More aggressive than stop().
*/
void brake();
/**
* @brief Update motor controller state
*
* Called from main loop for safety checks.
* Currently placeholder for future features.
*/
void update();
/**
* @brief Get current speed setting
* @return Speed (0-100%)
*/
uint8_t getCurrentSpeed() { return currentSpeed; }
/**
* @brief Get current direction
* @return Direction: 0 = reverse, 1 = forward
*/
uint8_t getCurrentDirection() { return currentDirection; }
private:
uint8_t currentSpeed; ///< Current speed setting (0-100)
uint8_t currentDirection; ///< Current direction (0=rev, 1=fwd)
static const int PWM_CHANNEL = 0; ///< ESP32 PWM channel
static const int PWM_FREQUENCY = 20000; ///< PWM frequency in Hz
static const int PWM_RESOLUTION = 8; ///< PWM resolution in bits
};
#endif