board abstraction
This commit is contained in:
68
firmware/src/board/halfbridge.cpp
Normal file
68
firmware/src/board/halfbridge.cpp
Normal file
@@ -0,0 +1,68 @@
|
||||
/**** Includes ****/
|
||||
#include "../utils/utils.h"
|
||||
#include "mcu/mcu_hal.h"
|
||||
#include "halfbridge.h"
|
||||
|
||||
using namespace board;
|
||||
|
||||
/**** Private definitions ****/
|
||||
/**** Private constants ****/
|
||||
/**** Private variables ****/
|
||||
/**** Private function declarations ****/
|
||||
|
||||
/**** Public function definitions ****/
|
||||
board::Hafbridge::Hafbridge(uint8_t hs_pwm_ch, uint8_t ls_gpio_ch, uint8_t max_dc)
|
||||
{
|
||||
this->pwm_ch = hs_pwm_ch;
|
||||
this->gpio_ch = ls_gpio_ch;
|
||||
|
||||
if(max_dc>100) this->max_dc = 100;
|
||||
else this->max_dc = max_dc;
|
||||
this->disable();
|
||||
}
|
||||
|
||||
board::Hafbridge::~Hafbridge(void)
|
||||
{
|
||||
this->last_duty = 0;
|
||||
this->disable();
|
||||
}
|
||||
|
||||
void board::Hafbridge::write(uint8_t duty)
|
||||
{
|
||||
// Limit duty
|
||||
if(duty > this->max_dc) duty = this->max_dc;
|
||||
this->last_duty = duty;
|
||||
|
||||
if(this->enabled == 0) return;
|
||||
|
||||
// Convert percent to 16b duty cycle
|
||||
uint16_t dc = util::percent_to_16b(duty);
|
||||
// Set PWM
|
||||
mcu::pwm_write(this->pwm_ch, dc);
|
||||
}
|
||||
|
||||
void board::Hafbridge::enable(void)
|
||||
{
|
||||
mcu::gpio_write(this->gpio_ch, mcu::LEVEL_HIGH);
|
||||
this->enabled = 1;
|
||||
this->write(this->last_duty);
|
||||
}
|
||||
|
||||
void board::Hafbridge::disable(void)
|
||||
{
|
||||
mcu::pwm_write(this->pwm_ch, 0);
|
||||
mcu::gpio_write(this->gpio_ch, mcu::LEVEL_LOW);
|
||||
this->enabled = 0;
|
||||
}
|
||||
|
||||
uint8_t board::Hafbridge::get_set_duty(void)
|
||||
{
|
||||
return this->last_duty;
|
||||
}
|
||||
|
||||
uint8_t board::Hafbridge::is_enabled(void)
|
||||
{
|
||||
return this->enabled;
|
||||
}
|
||||
|
||||
/**** Private function definitions ****/
|
||||
Reference in New Issue
Block a user