Files
@ 6cc8fa5ae0f6
Branch filter:
Location: therm-ng/src/pwmout.c - annotation
6cc8fa5ae0f6
1.3 KiB
text/plain
Temp reading finally working!
2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 953c718ee4cf 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 953c718ee4cf 2b4eb31dd8da 2b4eb31dd8da 2b4eb31dd8da | //
// PWM Out: generate PWM waveform to control factory
//
#include "pwmout.h"
#include "gpio.h"
#include "flash.h"
static uint32_t last_ssr_on = 0;
void pwmout_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
// Configure LED GPIO pins
GPIO_InitStruct.Pin = SSR_PIN;
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
HAL_GPIO_Init(SSR_GPIO_Port, &GPIO_InitStruct);
}
// freaking integral term isn't compatible with both heating and cooling... due to the discard
// functionality. this is a problem.
// also duty cycling isn't working correctly...
void pwmout_process(float duty)
{
uint32_t ssr_output = duty; // meh
// Kill SSR once the desired on-time has elapsed
if(flash_getsettings()->val.control_mode == MODE_PID && ((HAL_GetTick() - last_ssr_on > ssr_output) || ssr_output <= 0))
{
HAL_GPIO_WritePin(SSR, 0);
HAL_GPIO_WritePin(LED, 0);
}
// Every 200ms, set the SSR on unless output is 0
if(flash_getsettings()->val.control_mode == MODE_PID && HAL_GetTick() - last_ssr_on > SSR_PERIOD)
{
// Heat or cool, if we need to
if(ssr_output > 0)
{
HAL_GPIO_WritePin(SSR, 1);
HAL_GPIO_WritePin(LED, 1);
last_ssr_on = HAL_GetTick();
}
else {
// Make sure everything is off
HAL_GPIO_WritePin(SSR, 0);
HAL_GPIO_WritePin(LED, 0);
}
}
}
|