feat-hal-2 #4
@@ -16,8 +16,10 @@ board::Hafbridge::Hafbridge(uint8_t hs_pwm_ch, uint8_t ls_gpio_ch, uint8_t max_d
|
|||||||
this->pwm_ch = hs_pwm_ch;
|
this->pwm_ch = hs_pwm_ch;
|
||||||
this->gpio_ch = ls_gpio_ch;
|
this->gpio_ch = ls_gpio_ch;
|
||||||
|
|
||||||
if(max_dc>100) this->max_dc = 100;
|
if(max_dc>100) max_dc = 100;
|
||||||
else this->max_dc = max_dc;
|
|
||||||
|
this->max_dc = util::percent_to_16b(max_dc);
|
||||||
|
|
||||||
this->disable();
|
this->disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,18 +29,22 @@ board::Hafbridge::~Hafbridge(void)
|
|||||||
this->disable();
|
this->disable();
|
||||||
}
|
}
|
||||||
|
|
||||||
void board::Hafbridge::write(uint8_t duty)
|
void board::Hafbridge::write(uint16_t dividend)
|
||||||
{
|
{
|
||||||
// Limit duty
|
// Limit duty
|
||||||
if(duty > this->max_dc) duty = this->max_dc;
|
if(dividend > this->max_dc) dividend = this->max_dc;
|
||||||
this->last_duty = duty;
|
this->last_duty = dividend;
|
||||||
|
|
||||||
if(this->enabled == 0) return;
|
if(this->enabled == 0) return;
|
||||||
|
|
||||||
// Convert percent to 16b duty cycle
|
|
||||||
uint16_t dc = util::percent_to_16b(duty);
|
|
||||||
// Set PWM
|
// Set PWM
|
||||||
mcu::pwm_write(this->pwm_ch, dc);
|
mcu::pwm_write(this->pwm_ch, dividend);
|
||||||
|
}
|
||||||
|
|
||||||
|
void board::Hafbridge::write(uint8_t percent)
|
||||||
|
{
|
||||||
|
// Convert to dividend/0xFFFF
|
||||||
|
this->write(util::percent_to_16b(percent));
|
||||||
}
|
}
|
||||||
|
|
||||||
void board::Hafbridge::enable(void)
|
void board::Hafbridge::enable(void)
|
||||||
|
|||||||
@@ -12,15 +12,16 @@ class Hafbridge
|
|||||||
protected:
|
protected:
|
||||||
uint8_t pwm_ch;
|
uint8_t pwm_ch;
|
||||||
uint8_t gpio_ch;
|
uint8_t gpio_ch;
|
||||||
uint8_t last_duty;
|
uint16_t last_duty;
|
||||||
uint8_t enabled;
|
uint8_t enabled;
|
||||||
uint8_t max_dc;
|
uint16_t max_dc;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Hafbridge(uint8_t hs_pwm_ch, uint8_t ls_gpio_ch, uint8_t max_dc);
|
Hafbridge(uint8_t hs_pwm_ch, uint8_t ls_gpio_ch, uint8_t max_dc);
|
||||||
~Hafbridge(void);
|
~Hafbridge(void);
|
||||||
|
|
||||||
void write(uint8_t duty);
|
void write(uint16_t dividend);
|
||||||
|
void write(uint8_t percent);
|
||||||
void enable(void);
|
void enable(void);
|
||||||
void disable(void);
|
void disable(void);
|
||||||
uint8_t get_set_duty(void);
|
uint8_t get_set_duty(void);
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
/**** Includes ****/
|
|
||||||
#include "../utils/utils.h"
|
|
||||||
#include "cv_driver.h"
|
|
||||||
|
|
||||||
using namespace hw;
|
|
||||||
|
|
||||||
/**** Private definitions ****/
|
|
||||||
/**** Private constants ****/
|
|
||||||
/**** Private variables ****/
|
|
||||||
/**** Private function declarations ****/
|
|
||||||
|
|
||||||
/**** Public function definitions ****/
|
|
||||||
hw::CVdriver::CVdriver(board::AnalogIn* sup_voltage, board::AnalogIn* out_voltage, board::Hafbridge* hbridge)
|
|
||||||
{
|
|
||||||
this->sup_voltage = sup_voltage;
|
|
||||||
this->hbridge = hbridge;
|
|
||||||
this->target = 0;
|
|
||||||
this->off = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
hw::CVdriver::~CVdriver(void)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
void hw::CVdriver::update(void)
|
|
||||||
{
|
|
||||||
// Update all inputs
|
|
||||||
this->sup_voltage->read();
|
|
||||||
|
|
||||||
// Calculate ratio
|
|
||||||
uint16_t ratio = util::sat_ratio(this->target, this->sup_voltage->last_read);
|
|
||||||
|
|
||||||
// Set output
|
|
||||||
this->hbridge->write(ratio);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**** Private function definitions ****/
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
#ifndef CONST_VOLTAGE_DRIVER_H_
|
|
||||||
#define CONST_VOLTAGE_DRIVER_H_
|
|
||||||
|
|
||||||
/**** Includes ****/
|
|
||||||
#include <stdint.h>
|
|
||||||
#include "../board/ain.h"
|
|
||||||
#include "../board/halfbridge.h"
|
|
||||||
|
|
||||||
namespace hw {
|
|
||||||
|
|
||||||
/**** Public definitions ****/
|
|
||||||
|
|
||||||
class CVdriver
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
board::AnalogIn* sup_voltage;
|
|
||||||
|
|
||||||
board::Hafbridge* hbridge;
|
|
||||||
|
|
||||||
public:
|
|
||||||
CVdriver(board::AnalogIn* sup_voltage, board::Hafbridge* hbridge);
|
|
||||||
~CVdriver(void);
|
|
||||||
|
|
||||||
uint16_t target = 0;
|
|
||||||
uint8_t off = 0;
|
|
||||||
|
|
||||||
void process(void);
|
|
||||||
};
|
|
||||||
|
|
||||||
/**** Public function declarations ****/
|
|
||||||
|
|
||||||
#ifdef TESTING
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} //namespace
|
|
||||||
|
|
||||||
#endif /* CONST_VOLTAGE_DRIVER_H_ */
|
|
||||||
52
firmware/src/hw/cv_otput.cpp
Normal file
52
firmware/src/hw/cv_otput.cpp
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
/**** Includes ****/
|
||||||
|
#include "../utils/utils.h"
|
||||||
|
#include "cv_output.h"
|
||||||
|
|
||||||
|
using namespace hw;
|
||||||
|
|
||||||
|
/**** Private definitions ****/
|
||||||
|
/**** Private constants ****/
|
||||||
|
/**** Private variables ****/
|
||||||
|
/**** Private function declarations ****/
|
||||||
|
|
||||||
|
/**** Public function definitions ****/
|
||||||
|
hw::CVoutput::CVoutput(board::Hafbridge* hbridge)
|
||||||
|
{
|
||||||
|
this->hbridge = hbridge;
|
||||||
|
this->target = 0;
|
||||||
|
this->min_out = 0;
|
||||||
|
this->hbridge->disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
hw::CVoutput::~CVoutput(void)
|
||||||
|
{
|
||||||
|
this->hbridge->write((uint16_t)0);
|
||||||
|
this->hbridge->disable();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
void hw::CVoutput::update(uint16_t supply_mv)
|
||||||
|
{
|
||||||
|
// Check target
|
||||||
|
if((this->target < this->min_out)&&(this->target > 0)) this->target = this->min_out;
|
||||||
|
|
||||||
|
// Set output
|
||||||
|
this->hbridge->write(util::sat_ratio(this->target, supply_mv));
|
||||||
|
}
|
||||||
|
|
||||||
|
void hw::CVoutput::enable(void)
|
||||||
|
{
|
||||||
|
this->hbridge->enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
void hw::CVoutput::disable(void)
|
||||||
|
{
|
||||||
|
this->hbridge->disable();
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t hw::CVoutput::is_enabled(void)
|
||||||
|
{
|
||||||
|
return this->hbridge->is_enabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**** Private function definitions ****/
|
||||||
38
firmware/src/hw/cv_output.h
Normal file
38
firmware/src/hw/cv_output.h
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
#ifndef CONST_VOLTAGE_OUTPUT_H_
|
||||||
|
#define CONST_VOLTAGE_OUTPUT_H_
|
||||||
|
|
||||||
|
/**** Includes ****/
|
||||||
|
#include <stdint.h>
|
||||||
|
#include "../board/ain.h"
|
||||||
|
#include "../board/halfbridge.h"
|
||||||
|
|
||||||
|
namespace hw {
|
||||||
|
|
||||||
|
/**** Public definitions ****/
|
||||||
|
|
||||||
|
class CVoutput
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
board::Hafbridge* hbridge;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CVoutput(board::Hafbridge* hbridge);
|
||||||
|
~CVoutput(void);
|
||||||
|
|
||||||
|
uint16_t target;
|
||||||
|
uint16_t min_out;
|
||||||
|
|
||||||
|
void update(uint16_t supply_mv);
|
||||||
|
void enable(void);
|
||||||
|
void disable(void);
|
||||||
|
uint8_t is_enabled(void);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**** Public function declarations ****/
|
||||||
|
|
||||||
|
#ifdef TESTING
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} //namespace
|
||||||
|
|
||||||
|
#endif /* CONST_VOLTAGE_OUTPUT_H_ */
|
||||||
@@ -204,10 +204,10 @@
|
|||||||
<Compile Include="hw\button.h">
|
<Compile Include="hw\button.h">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="hw\cv_driver.cpp">
|
<Compile Include="hw\cv_otput.cpp">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="hw\cv_driver.h">
|
<Compile Include="hw\cv_output.h">
|
||||||
<SubType>compile</SubType>
|
<SubType>compile</SubType>
|
||||||
</Compile>
|
</Compile>
|
||||||
<Compile Include="hw\display_led.cpp">
|
<Compile Include="hw\display_led.cpp">
|
||||||
|
|||||||
Reference in New Issue
Block a user