mirror of
https://github.com/eddyem/IR-controller.git
synced 2025-12-06 10:45:15 +03:00
Shutter module tested
This commit is contained in:
parent
f600aa9e8e
commit
37b7d5cb16
@ -1,4 +1,4 @@
|
||||
Cmp-Mod V01 Created by CvPcb (2013-feb-26)-stable date = Вс 30 ноя 2014 15:38:41
|
||||
Cmp-Mod V01 Created by CvPcb (2013-feb-26)-stable date = Ср 04 фев 2015 15:00:52
|
||||
|
||||
BeginCmp
|
||||
TimeStamp = /53A910B8/50AF1E60;
|
||||
@ -115,14 +115,14 @@ EndCmp
|
||||
BeginCmp
|
||||
TimeStamp = /53973803/53997111;
|
||||
Reference = C5;
|
||||
ValeurCmp = 10u;
|
||||
ValeurCmp = 100u;
|
||||
IdModule = CP_5x11mm;
|
||||
EndCmp
|
||||
|
||||
BeginCmp
|
||||
TimeStamp = /53973803/53997130;
|
||||
Reference = C6;
|
||||
ValeurCmp = 100u;
|
||||
ValeurCmp = 470u;
|
||||
IdModule = CP_5x11mm;
|
||||
EndCmp
|
||||
|
||||
@ -217,6 +217,13 @@ ValeurCmp = 1u;
|
||||
IdModule = SM0805;
|
||||
EndCmp
|
||||
|
||||
BeginCmp
|
||||
TimeStamp = /54D32A5B;
|
||||
Reference = C20;
|
||||
ValeurCmp = 2200u, 40V;
|
||||
IdModule = CP_16x25mm;
|
||||
EndCmp
|
||||
|
||||
BeginCmp
|
||||
TimeStamp = /53973803/53976CAB/53BE6988;
|
||||
Reference = CON1;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
(export (version D)
|
||||
(design
|
||||
(source /home/eddy/Docs/SAO/ELECTRONICS/STM32/kicad/alltogether/ALL.sch)
|
||||
(date "Вс 30 ноя 2014 15:38:48")
|
||||
(date "Ср 04 фев 2015 15:06:52")
|
||||
(tool "eeschema (2013-feb-26)-stable"))
|
||||
(components
|
||||
(comp (ref XP2)
|
||||
@ -219,13 +219,13 @@
|
||||
(sheetpath (names "/STM32F103 module/") (tstamps /53973803/))
|
||||
(tstamp 53996A85))
|
||||
(comp (ref C5)
|
||||
(value 10u)
|
||||
(value 100u)
|
||||
(footprint C2)
|
||||
(libsource (lib device) (part C))
|
||||
(sheetpath (names "/STM32F103 module/") (tstamps /53973803/))
|
||||
(tstamp 53997111))
|
||||
(comp (ref C6)
|
||||
(value 100u)
|
||||
(value 470u)
|
||||
(footprint C2)
|
||||
(libsource (lib device) (part C))
|
||||
(sheetpath (names "/STM32F103 module/") (tstamps /53973803/))
|
||||
@ -1445,10 +1445,10 @@
|
||||
(uri /usr/share/kicad/library/conn.lib))
|
||||
(library (logical regul)
|
||||
(uri /usr/share/kicad/library/regul.lib))
|
||||
(library (logical STM32f103)
|
||||
(uri /home/eddy/kicad/STM32f103.lib))
|
||||
(library (logical my_elements)
|
||||
(uri my_elements.lib)))
|
||||
(uri my_elements.lib))
|
||||
(library (logical STM32f103)
|
||||
(uri /home/eddy/kicad/STM32f103.lib)))
|
||||
(nets
|
||||
(net (code 1) (name "/Power MOSFET module 2/GND_OUT")
|
||||
(node (ref XP7) (pin 19))
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A3 16535 11693
|
||||
encoding utf-8
|
||||
Sheet 1 12
|
||||
Title "IR-spectrometer Control System"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A3 16535 11693
|
||||
encoding utf-8
|
||||
Sheet 3 12
|
||||
Title "MCU module on STM32F103"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
@ -296,7 +296,7 @@ L C C5
|
||||
U 1 1 53997111
|
||||
P 4400 1100
|
||||
F 0 "C5" H 4400 1200 40 0000 L CNN
|
||||
F 1 "10u" H 4406 1015 40 0000 L CNN
|
||||
F 1 "100u" H 4406 1015 40 0000 L CNN
|
||||
F 2 "C2" H 4438 950 30 0001 C CNN
|
||||
F 3 "~" H 4400 1100 60 0000 C CNN
|
||||
1 4400 1100
|
||||
@ -307,7 +307,7 @@ L C C6
|
||||
U 1 1 53997130
|
||||
P 5350 1100
|
||||
F 0 "C6" H 5350 1200 40 0000 L CNN
|
||||
F 1 "100u" H 5356 1015 40 0000 L CNN
|
||||
F 1 "470u" H 5356 1015 40 0000 L CNN
|
||||
F 2 "C2" H 5388 950 30 0001 C CNN
|
||||
F 3 "~" H 5350 1100 60 0000 C CNN
|
||||
1 5350 1100
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 5 12
|
||||
Title "RS-232 level converter"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 12 12
|
||||
Title "Power load module"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 4 12
|
||||
Title "USB input circuit"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 8 12
|
||||
Title "Stepper motor module"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
@ -152,7 +152,7 @@ AR Path="/53A910B7/50CECA5D" Ref="C3.2" Part="1"
|
||||
AR Path="/5391724D/50CECA5D" Ref="C3.3" Part="1"
|
||||
AR Path="/53A910BA/50CECA5D" Ref="C3.4" Part="1"
|
||||
AR Path="/53A910B9/50CECA5D" Ref="C3.5" Part="1"
|
||||
F 0 "C3.5" H 5550 3350 50 0000 L CNN
|
||||
F 0 "C3.1" H 5550 3350 50 0000 L CNN
|
||||
F 1 "1n" H 5550 3150 50 0000 L CNN
|
||||
F 2 "SM0805" H 5500 3250 60 0001 C CNN
|
||||
F 3 "" H 5500 3250 60 0001 C CNN
|
||||
@ -168,7 +168,7 @@ AR Path="/53A910B7/50CECA5C" Ref="R6.2" Part="1"
|
||||
AR Path="/5391724D/50CECA5C" Ref="R6.3" Part="1"
|
||||
AR Path="/53A910BA/50CECA5C" Ref="R6.4" Part="1"
|
||||
AR Path="/53A910B9/50CECA5C" Ref="R6.5" Part="1"
|
||||
F 0 "R6.5" V 5580 3000 50 0000 C CNN
|
||||
F 0 "R6.1" V 5580 3000 50 0000 C CNN
|
||||
F 1 "51k" V 5500 3000 50 0000 C CNN
|
||||
F 2 "SM0603" H 5500 3000 60 0001 C CNN
|
||||
F 3 "" H 5500 3000 60 0001 C CNN
|
||||
@ -232,7 +232,7 @@ AR Path="/53A910B7/50CEC791" Ref="R5.2" Part="1"
|
||||
AR Path="/5391724D/50CEC791" Ref="R5.3" Part="1"
|
||||
AR Path="/53A910BA/50CEC791" Ref="R5.4" Part="1"
|
||||
AR Path="/53A910B9/50CEC791" Ref="R5.5" Part="1"
|
||||
F 0 "R5.5" V 5580 2500 50 0000 C CNN
|
||||
F 0 "R5.1" V 5580 2500 50 0000 C CNN
|
||||
F 1 "51k" V 5500 2500 50 0000 C CNN
|
||||
F 2 "SM0603" H 5500 2500 60 0001 C CNN
|
||||
F 3 "" H 5500 2500 60 0001 C CNN
|
||||
@ -248,7 +248,7 @@ AR Path="/53A910B7/50CEC790" Ref="C2.2" Part="1"
|
||||
AR Path="/5391724D/50CEC790" Ref="C2.3" Part="1"
|
||||
AR Path="/53A910BA/50CEC790" Ref="C2.4" Part="1"
|
||||
AR Path="/53A910B9/50CEC790" Ref="C2.5" Part="1"
|
||||
F 0 "C2.5" H 5550 2850 50 0000 L CNN
|
||||
F 0 "C2.1" H 5550 2850 50 0000 L CNN
|
||||
F 1 "1n" H 5550 2650 50 0000 L CNN
|
||||
F 2 "SM0805" H 5500 2750 60 0001 C CNN
|
||||
F 3 "" H 5500 2750 60 0001 C CNN
|
||||
@ -264,7 +264,7 @@ AR Path="/53A910B7/50CEB99A" Ref="R2.2" Part="1"
|
||||
AR Path="/5391724D/50CEB99A" Ref="R2.3" Part="1"
|
||||
AR Path="/53A910BA/50CEB99A" Ref="R2.4" Part="1"
|
||||
AR Path="/53A910B9/50CEB99A" Ref="R2.5" Part="1"
|
||||
F 0 "R2.5" V 4280 2650 50 0000 C CNN
|
||||
F 0 "R2.1" V 4280 2650 50 0000 C CNN
|
||||
F 1 "0.33" V 4200 2650 50 0000 C CNN
|
||||
F 2 "SM2010" H 4200 2650 60 0001 C CNN
|
||||
F 3 "" H 4200 2650 60 0001 C CNN
|
||||
@ -280,7 +280,7 @@ AR Path="/53A910B7/50CEB97A" Ref="R1.2" Part="1"
|
||||
AR Path="/5391724D/50CEB97A" Ref="R1.3" Part="1"
|
||||
AR Path="/53A910BA/50CEB97A" Ref="R1.4" Part="1"
|
||||
AR Path="/53A910B9/50CEB97A" Ref="R1.5" Part="1"
|
||||
F 0 "R1.5" V 4280 2450 50 0000 C CNN
|
||||
F 0 "R1.1" V 4280 2450 50 0000 C CNN
|
||||
F 1 "0.33" V 4200 2450 50 0000 C CNN
|
||||
F 2 "SM2010" H 4200 2450 60 0001 C CNN
|
||||
F 3 "" H 4200 2450 60 0001 C CNN
|
||||
@ -328,7 +328,7 @@ AR Path="/53A910B7/50AF1E60" Ref="C1.2" Part="1"
|
||||
AR Path="/5391724D/50AF1E60" Ref="C1.3" Part="1"
|
||||
AR Path="/53A910BA/50AF1E60" Ref="C1.4" Part="1"
|
||||
AR Path="/53A910B9/50AF1E60" Ref="C1.5" Part="1"
|
||||
F 0 "C1.5" H 5100 5100 50 0000 L CNN
|
||||
F 0 "C1.1" H 5100 5100 50 0000 L CNN
|
||||
F 1 "68n" H 5100 4900 50 0000 L CNN
|
||||
F 2 "SM0805" H 5050 5000 60 0001 C CNN
|
||||
F 3 "" H 5050 5000 60 0001 C CNN
|
||||
@ -376,7 +376,7 @@ AR Path="/53A910B7/50AF1C25" Ref="R3.2" Part="1"
|
||||
AR Path="/5391724D/50AF1C25" Ref="R3.3" Part="1"
|
||||
AR Path="/53A910BA/50AF1C25" Ref="R3.4" Part="1"
|
||||
AR Path="/53A910B9/50AF1C25" Ref="R3.5" Part="1"
|
||||
F 0 "R3.5" V 4480 5050 50 0000 C CNN
|
||||
F 0 "R3.1" V 4480 5050 50 0000 C CNN
|
||||
F 1 "22k" V 4400 5050 50 0000 C CNN
|
||||
F 2 "SM0603" H 4400 5050 60 0001 C CNN
|
||||
F 3 "" H 4400 5050 60 0001 C CNN
|
||||
@ -392,7 +392,7 @@ AR Path="/53A910B7/50AE2A4D" Ref="DD2.2" Part="1"
|
||||
AR Path="/5391724D/50AE2A4D" Ref="DD2.3" Part="1"
|
||||
AR Path="/53A910BA/50AE2A4D" Ref="DD2.4" Part="1"
|
||||
AR Path="/53A910B9/50AE2A4D" Ref="DD2.5" Part="1"
|
||||
F 0 "DD2.5" H 3800 4600 50 0000 L BNN
|
||||
F 0 "DD2.1" H 3800 4600 50 0000 L BNN
|
||||
F 1 "L6208N" H 4300 2850 50 0000 L BNN
|
||||
F 2 "DIP-24__300_ELL" H 4300 3900 50 0001 C CNN
|
||||
F 3 "" H 4300 3750 60 0001 C CNN
|
||||
@ -436,7 +436,7 @@ AR Path="/53A910B7/534BB108" Ref="R4.2" Part="1"
|
||||
AR Path="/5391724D/534BB108" Ref="R4.3" Part="1"
|
||||
AR Path="/53A910BA/534BB108" Ref="R4.4" Part="1"
|
||||
AR Path="/53A910B9/534BB108" Ref="R4.5" Part="1"
|
||||
F 0 "R4.5" V 4780 5050 40 0000 C CNN
|
||||
F 0 "R4.1" V 4780 5050 40 0000 C CNN
|
||||
F 1 "1.8k" V 4707 5051 40 0000 C CNN
|
||||
F 2 "SM0603" V 4630 5050 30 0001 C CNN
|
||||
F 3 "~" H 4700 5050 30 0000 C CNN
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
EESchema Schematic File Version 2 date Ср 28 янв 2015 08:47:22
|
||||
EESchema Schematic File Version 2 date Ср 04 фев 2015 15:06:53
|
||||
LIBS:power
|
||||
LIBS:device
|
||||
LIBS:transistors
|
||||
@ -41,7 +41,7 @@ $Descr A4 11693 8268
|
||||
encoding utf-8
|
||||
Sheet 11 12
|
||||
Title "Power load module"
|
||||
Date "28 jan 2015"
|
||||
Date "4 feb 2015"
|
||||
Rev ""
|
||||
Comp "SAO RAS"
|
||||
Comment1 ""
|
||||
|
||||
@ -118,11 +118,14 @@ void ADC_calibrate_and_start();
|
||||
#define SHUTTER_ON_PIN (GPIO2)
|
||||
#define SHUTTER_POLARITY_PIN (GPIO0)
|
||||
#define SHUTTER_FB_PIN (GPIO1)
|
||||
// voltage (*100) threshold to run shutter
|
||||
#define SHUTTER_VOLTAGE_THRES (1000)
|
||||
#define SHUTTER_UNDERVOLTAGE_THRES (500)
|
||||
// delay in operations in us
|
||||
#define SHUTTER_DELAY (10000)
|
||||
// voltage (*100) threshold to run shutter - 20V
|
||||
#define SHUTTER_VOLTAGE_THRES (2000)
|
||||
// minimum voltage that should be on capasitor if power source is on
|
||||
#define SHUTTER_UNDERVOLTAGE_THRES (700)
|
||||
// delay in operations (open/close) in us (according to shutter's datasheet it's about 12ms)
|
||||
#define SHUTTER_DELAY (12500)
|
||||
// delay for error test
|
||||
#define SHUTTER_OP_DELAY (200)
|
||||
|
||||
// ADC_value[8] is U36, ADC_value[9] is U10
|
||||
#define SHUTTER_SENSE_VALUE (ADC_value[8])
|
||||
|
||||
@ -200,6 +200,8 @@ int main(){
|
||||
|
||||
if(Timer - Old_timer > 999){ // one-second cycle
|
||||
Old_timer += 1000;
|
||||
if(Shutter_State == SHUTTER_NOTREADY)
|
||||
shutter_init();
|
||||
//OW_fill_ID(0);
|
||||
//gpio_toggle(GPIOC, GPIO12); // toggle LED
|
||||
//gpio_toggle(GPIO_BANK_SPI2_MOSI, GPIO_SPI2_MOSI);
|
||||
|
||||
@ -22,6 +22,7 @@
|
||||
#include "main.h"
|
||||
// state of shutter - global variable to omit interface functions
|
||||
shutter_state Shutter_State = SHUTTER_NOTREADY;
|
||||
uint16_t Shutter_delay = SHUTTER_DELAY;
|
||||
|
||||
// function to be runned from timer irq
|
||||
void (*shutter_timer_fn)() = NULL;
|
||||
@ -33,13 +34,16 @@ void (*shutter_timer_fn)() = NULL;
|
||||
*/
|
||||
void shutter_wait(int us, void(*fn_ready)()){
|
||||
if(!fn_ready) return;
|
||||
//DBG("wait for previous .. ");
|
||||
while(shutter_timer_fn); // wait for ending of previous operation
|
||||
//DBG("ok\n");
|
||||
shutter_timer_fn = fn_ready;
|
||||
timer_set_period(SHUTTER_TIM, us);
|
||||
timer_enable_counter(SHUTTER_TIM);
|
||||
}
|
||||
|
||||
// macro to open/close/set default state
|
||||
// open shutter is 0:0 -> when MCU power is off, shutter "automatically" opens
|
||||
#define shutter_open() do{gpio_clear(SHUTTER_PORT, SHUTTER_ON_PIN | SHUTTER_POLARITY_PIN);}while(0)
|
||||
#define shutter_close() do{gpio_clear(SHUTTER_PORT, SHUTTER_ON_PIN); \
|
||||
gpio_set(SHUTTER_PORT, SHUTTER_POLARITY_PIN);}while(0)
|
||||
@ -48,16 +52,62 @@ void shutter_wait(int us, void(*fn_ready)()){
|
||||
gpio_clear(SHUTTER_PORT, SHUTTER_POLARITY_PIN);}while(0)
|
||||
#define shutter_error() ((gpio_get(SHUTTER_PORT, SHUTTER_FB_PIN) == 0))
|
||||
|
||||
/**
|
||||
* Make tests for undervoltage & wire breakage
|
||||
* this function calls in 2 stages:
|
||||
* 1) check undervoltage & set hiZ
|
||||
* 2) repeat checking undervoltage & check wire breakage
|
||||
* if shutter was uninitialized we open it
|
||||
*/
|
||||
void shutter_test(){
|
||||
static shutter_state old_State = SHUTTER_NOTREADY;
|
||||
// test for undervoltage
|
||||
if(shutter_voltage() < SHUTTER_UNDERVOLTAGE_THRES){
|
||||
ERR("shutter undervoltage\n");
|
||||
Shutter_State = SHUTTER_NOTREADY;
|
||||
shutter_off();
|
||||
return;
|
||||
}
|
||||
if(Shutter_State != SHUTTER_INITIALIZED){ // first call of this function
|
||||
old_State = Shutter_State;
|
||||
Shutter_State = SHUTTER_INITIALIZED;
|
||||
// test for wire breakage
|
||||
DBG("breakage test\n");
|
||||
shutter_hiZ(); // 1,1: breakage test
|
||||
shutter_wait(SHUTTER_OP_DELAY, shutter_test);
|
||||
}else{ // check breakage
|
||||
if(shutter_error()){ // ERR==0 -> wire breakage
|
||||
ERR("shutter wire breakage\n");
|
||||
Shutter_State = SHUTTER_NOTREADY;
|
||||
}else{
|
||||
if(old_State == SHUTTER_NOTREADY){
|
||||
Shutter_State = SHUTTER_OPENING;
|
||||
DBG("ready!\n");
|
||||
}else{
|
||||
Shutter_State = old_State;
|
||||
DBG("no errors\n");
|
||||
}
|
||||
}
|
||||
shutter_off();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* after open/close pulse we should return bridge to default state
|
||||
* 3 stages:
|
||||
* 1) check for short-circuit & turn off power of the shutter
|
||||
* 2) check for overtemperature or undervoltage
|
||||
* 3) common test for undervoltage/breakage
|
||||
*/
|
||||
void shutter_ready(){
|
||||
uint8_t test_err = 0;
|
||||
//DBG("shtr ready\n");
|
||||
switch (Shutter_State){
|
||||
case SHUTTER_CLOSED: // repeated pulse to check errors
|
||||
case SHUTTER_OPENED:
|
||||
if(shutter_error()){
|
||||
ERR("shutter vertemperature or undervoltage\n");
|
||||
ERR("shutter overtemperature or undervoltage\n");
|
||||
Shutter_State = SHUTTER_NOTREADY;
|
||||
}
|
||||
break;
|
||||
@ -66,7 +116,6 @@ void shutter_ready(){
|
||||
if(shutter_error()){
|
||||
ERR("shutter short-circuit\n");
|
||||
Shutter_State = SHUTTER_NOTREADY;
|
||||
shutter_off();
|
||||
}else{
|
||||
test_err = 1;
|
||||
if(Shutter_State == SHUTTER_PROC_CLOSING)
|
||||
@ -77,9 +126,17 @@ void shutter_ready(){
|
||||
break;
|
||||
default:
|
||||
ERR("wrong shutter state\n");
|
||||
print_shutter_state(lastsendfun);
|
||||
}
|
||||
shutter_off();
|
||||
if(test_err) shutter_wait(SHUTTER_DELAY, shutter_ready); // test for overtemp or undervoltage
|
||||
if(Shutter_State == SHUTTER_NOTREADY) return;
|
||||
if(test_err){
|
||||
//DBG("now test for err\n");
|
||||
shutter_wait(SHUTTER_OP_DELAY, shutter_ready); // test for overtemp or undervoltage
|
||||
}else{
|
||||
// wait a lot of time to prevent false detections
|
||||
shutter_wait(SHUTTER_DELAY, shutter_test);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -98,7 +155,8 @@ shutter_state shutter_init(){
|
||||
// 72MHz div 72 = 1MHz
|
||||
timer_set_prescaler(SHUTTER_TIM, 71);
|
||||
timer_one_shot_mode(SHUTTER_TIM); // single pulse mode
|
||||
timer_enable_preload(SHUTTER_TIM); // force changing period
|
||||
timer_disable_preload(SHUTTER_TIM); // force changing period
|
||||
timer_update_on_overflow(SHUTTER_TIM); // generate UEV only on overflow
|
||||
timer_enable_update_event(SHUTTER_TIM);
|
||||
timer_enable_irq(SHUTTER_TIM, TIM_DIER_UIE); // update IRQ enable
|
||||
//DBG("shutter timer ready\n");
|
||||
@ -109,20 +167,9 @@ shutter_state shutter_init(){
|
||||
// feedback: floating input
|
||||
gpio_set_mode(SHUTTER_PORT, GPIO_MODE_INPUT,
|
||||
GPIO_CNF_INPUT_FLOAT, SHUTTER_FB_PIN);
|
||||
// test for wire breakage
|
||||
shutter_hiZ(); // 1,1: breakage test
|
||||
Delay(1); // wait for 1ms
|
||||
if(shutter_error()){ // ERR==0 -> wire breakage
|
||||
if(shutter_voltage() < SHUTTER_UNDERVOLTAGE_THRES)
|
||||
ERR("shutter undervoltage\n");
|
||||
else
|
||||
ERR("shutter wire breakage\n");
|
||||
}else{
|
||||
// Shutter_State = SHUTTER_CLOSING; // now try to close shutter
|
||||
Shutter_State = SHUTTER_READY;
|
||||
}
|
||||
shutter_off();
|
||||
return Shutter_State;
|
||||
shutter_wait(SHUTTER_OP_DELAY, shutter_test);
|
||||
return SHUTTER_INITIALIZED; // we return this state in spite of the shutter isn't really initialized yet
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,14 +178,21 @@ shutter_state shutter_init(){
|
||||
*/
|
||||
void process_shutter(){
|
||||
if(Shutter_State == SHUTTER_NOTREADY) return;
|
||||
if(shutter_error()){
|
||||
ERR("shutter some error\n");
|
||||
|
||||
if(Shutter_State != SHUTTER_OPENING && Shutter_State != SHUTTER_CLOSING)
|
||||
return;
|
||||
if(shutter_voltage() < SHUTTER_UNDERVOLTAGE_THRES){
|
||||
ERR("no shutter power source\n");
|
||||
Shutter_State = SHUTTER_NOTREADY;
|
||||
shutter_off();
|
||||
return;
|
||||
}
|
||||
if(Shutter_State != SHUTTER_OPENING && Shutter_State != SHUTTER_CLOSING)
|
||||
if(shutter_error()){
|
||||
ERR("some shutter error\n");
|
||||
Shutter_State = SHUTTER_NOTREADY;
|
||||
shutter_off();
|
||||
return;
|
||||
}
|
||||
if(shutter_voltage() < SHUTTER_VOLTAGE_THRES) return; // capasitor isn't charged
|
||||
switch (Shutter_State){
|
||||
case SHUTTER_OPENING:
|
||||
@ -152,30 +206,32 @@ void process_shutter(){
|
||||
default:
|
||||
return;
|
||||
}
|
||||
shutter_wait(SHUTTER_DELAY, shutter_ready);
|
||||
shutter_wait(Shutter_delay, shutter_ready);
|
||||
}
|
||||
|
||||
void Shutter_tim_isr(){
|
||||
//DBG("shutter timer\n");
|
||||
void (*fn)() = shutter_timer_fn;
|
||||
if(timer_get_flag(SHUTTER_TIM, TIM_SR_UIF)){
|
||||
// Clear compare interrupt flag
|
||||
timer_clear_flag(SHUTTER_TIM, TIM_SR_UIF);
|
||||
shutter_timer_fn = NULL;
|
||||
// and run needed function
|
||||
if(shutter_timer_fn){
|
||||
shutter_timer_fn();
|
||||
shutter_timer_fn = NULL;
|
||||
if(fn){
|
||||
fn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* printout shutter state
|
||||
*/
|
||||
void print_shutter_state(sendfun s){
|
||||
P("shutter ", s);
|
||||
if(shutter_error()){ // ERR==0 -> wire breakage
|
||||
P("(error) ", s);
|
||||
}
|
||||
switch (Shutter_State){
|
||||
case SHUTTER_INITIALIZED:
|
||||
P("testing", s);
|
||||
break;
|
||||
case SHUTTER_READY:
|
||||
P("ready", s);
|
||||
break;
|
||||
@ -196,26 +252,40 @@ if(shutter_error()){ // ERR==0 -> wire breakage
|
||||
P("in process", s);
|
||||
break;
|
||||
default: // not ready or error
|
||||
P("not initialised or broken", s);
|
||||
if(shutter_error()){ // ERR==0 -> wire breakage or something else
|
||||
P("error", s);
|
||||
}else
|
||||
P("not initialised or broken", s);
|
||||
}
|
||||
newline(s);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
switch (Shutter_State){
|
||||
/**
|
||||
* Try to open/close shutter depending on argument:
|
||||
* state == SHUTTER_CLOSING - try to close
|
||||
* state == SHUTTER_OPENING - try to open
|
||||
*/
|
||||
void shutter_try(shutter_state state){
|
||||
switch (Shutter_State){ // right states are only OPENED, CLOSED & READY
|
||||
case SHUTTER_OPENED:
|
||||
if(state == SHUTTER_OPENING){ // try to open opened shutter?
|
||||
P("alerady opened\n", lastsendfun);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case SHUTTER_CLOSED:
|
||||
if(state == SHUTTER_CLOSING){ // try to close closed?
|
||||
P("alerady closed\n", lastsendfun);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case SHUTTER_OPENING:
|
||||
break;
|
||||
case SHUTTER_CLOSING:
|
||||
break;
|
||||
case SHUTTER_PROC_OPENING:
|
||||
break;
|
||||
case SHUTTER_PROC_CLOSING:
|
||||
case SHUTTER_READY:
|
||||
; // All OK
|
||||
break;
|
||||
default:
|
||||
print_shutter_state(lastsendfun);
|
||||
return;
|
||||
}
|
||||
*/
|
||||
Shutter_State = state; // all OK, now we can change current state of shutter
|
||||
}
|
||||
|
||||
|
||||
@ -27,8 +27,9 @@
|
||||
|
||||
// Shutter finite-state machine states
|
||||
typedef enum{
|
||||
SHUTTER_NOTREADY = 0, // initialisation - not ready, or error in work
|
||||
SHUTTER_READY,
|
||||
SHUTTER_NOTREADY = 0, // not ready, or error in work
|
||||
SHUTTER_INITIALIZED, // initialisation in process
|
||||
SHUTTER_READY, // ready for operation
|
||||
SHUTTER_OPENED, // shutter is in opened state
|
||||
SHUTTER_CLOSED, // shutter is in closed state
|
||||
SHUTTER_OPENING, // user is waiting for opening
|
||||
@ -38,9 +39,15 @@ typedef enum{
|
||||
} shutter_state;
|
||||
|
||||
extern shutter_state Shutter_State;
|
||||
extern uint16_t Shutter_delay;
|
||||
|
||||
shutter_state shutter_init();
|
||||
void process_shutter();
|
||||
void print_shutter_state(sendfun s);
|
||||
|
||||
void shutter_try(shutter_state state);
|
||||
|
||||
#define try_to_close_shutter() shutter_try(SHUTTER_CLOSING)
|
||||
#define try_to_open_shutter() shutter_try(SHUTTER_OPENING)
|
||||
|
||||
#endif // __POWERHW_H__
|
||||
|
||||
@ -64,6 +64,13 @@ void print_ad_vals(sendfun s){
|
||||
}
|
||||
}
|
||||
|
||||
void set_shtr_delay(int32_t v, sendfun s){
|
||||
uint16_t d = (uint16_t) v;
|
||||
Shutter_delay = d;
|
||||
P("Change delay to ", s);
|
||||
print_int(d, s);
|
||||
}
|
||||
|
||||
void parce_incoming_buf(char *buf, int len, sendfun s){
|
||||
uint8_t command;
|
||||
int i = 0, j, m;
|
||||
@ -185,14 +192,14 @@ void parce_incoming_buf(char *buf, int len, sendfun s){
|
||||
print_shutter_state(s);
|
||||
break;
|
||||
case 'c': // close shutter
|
||||
if(Shutter_State != SHUTTER_CLOSED)
|
||||
Shutter_State = SHUTTER_CLOSING;
|
||||
else P("alerady closed\n", s);
|
||||
try_to_close_shutter();
|
||||
break;
|
||||
case 'o': // open shutter
|
||||
if(Shutter_State != SHUTTER_OPENED)
|
||||
Shutter_State = SHUTTER_OPENING;
|
||||
else P("alerady opened\n", s);
|
||||
try_to_open_shutter();
|
||||
break;
|
||||
case 'z': // temporary: change delay
|
||||
I = set_shtr_delay;
|
||||
READINT();
|
||||
break;
|
||||
case '\n': // show newline as is
|
||||
break;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user