remostat
This commit is contained in:
@@ -53,7 +53,7 @@ INCLUDE = -I$(PRJ_SRC_DIR) -I$(LIB_INC_DIR) -I$(SPL_INC_DIR)
|
|||||||
# collect all source directories
|
# collect all source directories
|
||||||
VPATH=$(PRJ_SRC_DIR):$(SPL_SRC_DIR)
|
VPATH=$(PRJ_SRC_DIR):$(SPL_SRC_DIR)
|
||||||
|
|
||||||
.PHONY: clean
|
.PHONY: clean unlock flash all
|
||||||
|
|
||||||
all: $(TARGET)
|
all: $(TARGET)
|
||||||
|
|
||||||
@@ -70,5 +70,8 @@ $(TARGET): $(PRJ_OBJECTS)
|
|||||||
flash: $(TARGET)
|
flash: $(TARGET)
|
||||||
stm8flash -c stlinkv2 -p $(DEVICE_FLASH) -s flash -w $(TARGET)
|
stm8flash -c stlinkv2 -p $(DEVICE_FLASH) -s flash -w $(TARGET)
|
||||||
|
|
||||||
|
unlock:
|
||||||
|
stm8flash -c stlinkv2 -p stm8s103f3 -u
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm $(OUTPUT_DIR)/*
|
rm $(OUTPUT_DIR)/*
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
# Regulátor pro remosku
|
||||||
|
|
||||||
|
Umožňuje omezení výkonu remosky pomocí SSR relé. Napájení je přes čínský zdroj Hi-Link.
|
||||||
|
|
||||||
|
Používám čínský modul STM8S103F, protože to bylo to nejlevnější co jsem ho našel v šuplíku. Na tohle je Bluepill STM32F103 škoda. Tohle je můj první reálný projekt s STM8, na takhle jednoduché věci úplně stačí.
|
||||||
|
|
||||||
|
Nemá to teplotní čidlo, řízení je přímovazební. Pro remosku to stačí. Perioda PWM je cca 1s, jde nastavit v kódu.
|
||||||
|
|
||||||
|
Zapojení:
|
||||||
|
|
||||||
|
- D2 = AIN, jezdec potenciometru
|
||||||
|
- C7 = bypass přepínač, výstup bude na 100%, pokud je spojen se zemí
|
||||||
|
- C4 = výstup pro SSR
|
||||||
|
|
||||||
+2
-1
@@ -12,10 +12,11 @@ volatile uint16_t time_ms;
|
|||||||
* Putchar for printf
|
* Putchar for printf
|
||||||
* @param c - char to print
|
* @param c - char to print
|
||||||
*/
|
*/
|
||||||
void putchar(char c)
|
int putchar(int c)
|
||||||
{
|
{
|
||||||
while ((UART1->SR & UART1_SR_TXE) == 0);
|
while ((UART1->SR & UART1_SR_TXE) == 0);
|
||||||
UART1->DR = (u8)c;
|
UART1->DR = (u8)c;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
+1
-1
@@ -15,7 +15,7 @@ void UART1_RX_IRQHandler(void) INTERRUPT(18);
|
|||||||
void TIM4_UPD_OVF_IRQHandler(void) INTERRUPT(23);
|
void TIM4_UPD_OVF_IRQHandler(void) INTERRUPT(23);
|
||||||
|
|
||||||
/** putchar, used by the SDCC stdlib */
|
/** putchar, used by the SDCC stdlib */
|
||||||
void putchar(char c);
|
int putchar(int c);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simple init (UART, LED, timebase)
|
* Simple init (UART, LED, timebase)
|
||||||
|
|||||||
+22
-5
@@ -2,10 +2,12 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "bootstrap.h"
|
#include "bootstrap.h"
|
||||||
|
|
||||||
#define LEVEL_TOP 400
|
#define LEVEL_TOP 1024
|
||||||
#define LEVEL_MAX 370
|
#define LEVEL_MAX 1000
|
||||||
|
|
||||||
volatile uint16_t level = 200;
|
volatile uint16_t level = 0;
|
||||||
|
|
||||||
|
#define BYPASSBTN_PIN (1 << 7)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set PWM level
|
* Set PWM level
|
||||||
@@ -13,7 +15,8 @@ volatile uint16_t level = 200;
|
|||||||
void PWM_Write(void)
|
void PWM_Write(void)
|
||||||
{
|
{
|
||||||
uint16_t tmp = level;
|
uint16_t tmp = level;
|
||||||
if (tmp > LEVEL_MAX) tmp = LEVEL_MAX;
|
//if (tmp > LEVEL_MAX) tmp = LEVEL_MAX;
|
||||||
|
if (tmp >= LEVEL_MAX) tmp = LEVEL_TOP;
|
||||||
TIM1_SetCompare4(tmp);
|
TIM1_SetCompare4(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -22,6 +25,13 @@ void PWM_Cmd(FunctionalState fs)
|
|||||||
TIM1_CtrlPWMOutputs(fs);
|
TIM1_CtrlPWMOutputs(fs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BYPASSBTN_Setup()
|
||||||
|
{
|
||||||
|
GPIO_Init(GPIOC,GPIO_PIN_7,GPIO_MODE_IN_PU_NO_IT);
|
||||||
|
//GPIOC->DDR &= ~BYPASSBTN_PIN;
|
||||||
|
//GPIOC->CR1 |= BYPASSBTN_PIN;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up the PWM generation
|
* Set up the PWM generation
|
||||||
*/
|
*/
|
||||||
@@ -32,7 +42,7 @@ void PWM_Setup()
|
|||||||
//GPIOC->CR1 &= ~GPIO_PIN_4; // open drain
|
//GPIOC->CR1 &= ~GPIO_PIN_4; // open drain
|
||||||
GPIOC->CR2 |= GPIO_PIN_4; // fast
|
GPIOC->CR2 |= GPIO_PIN_4; // fast
|
||||||
|
|
||||||
TIM1_TimeBaseInit(0, TIM1_COUNTERMODE_UP, LEVEL_TOP, 0);
|
TIM1_TimeBaseInit(1 << 14, TIM1_COUNTERMODE_UP, LEVEL_TOP, 0);
|
||||||
|
|
||||||
TIM1_OC4Init(TIM1_OCMODE_PWM1,
|
TIM1_OC4Init(TIM1_OCMODE_PWM1,
|
||||||
TIM1_OUTPUTSTATE_ENABLE,
|
TIM1_OUTPUTSTATE_ENABLE,
|
||||||
@@ -63,6 +73,7 @@ void main(void)
|
|||||||
SimpleInit();
|
SimpleInit();
|
||||||
PWM_Setup();
|
PWM_Setup();
|
||||||
AIN_Setup();
|
AIN_Setup();
|
||||||
|
BYPASSBTN_Setup();
|
||||||
|
|
||||||
// Go
|
// Go
|
||||||
PWM_Cmd(ENABLE);
|
PWM_Cmd(ENABLE);
|
||||||
@@ -76,7 +87,13 @@ void main(void)
|
|||||||
// adjust level
|
// adjust level
|
||||||
if (ADC1_GetFlagStatus(ADC1_FLAG_EOC)) {
|
if (ADC1_GetFlagStatus(ADC1_FLAG_EOC)) {
|
||||||
conv = ADC1_GetConversionValue();
|
conv = ADC1_GetConversionValue();
|
||||||
|
|
||||||
|
if (0 == (GPIOC->IDR & BYPASSBTN_PIN)) {
|
||||||
|
conv = LEVEL_TOP;
|
||||||
|
}
|
||||||
|
|
||||||
level = conv;
|
level = conv;
|
||||||
|
|
||||||
PWM_Write();
|
PWM_Write();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user