TIM2 fires every 500ms. It has :
- routine to define input variables (oil_level, wet_state, flow_state flags)
- routine to define exact state of working cycle
- routine to define flow_mode flag
- routine to define currents of mosfets ( project)
Simple explanation of TIM2 cycle - at the random moment with flow_state = 0. There is 4 possible states :
- we are inside idle state ( curr_tick < idle_tick , do nothing, just curr_tick++)
- we are at the end of idle state ( curr_tick => idle_tick, we must open
MOSFETS anddrop to zero idle_state flag,curr_tick ) - we are inside work state ( curr_tick < work_tick, do nothing, just curr_tick++)
- we are at the end of idle state ( curr_tick => work_tick, we must close
MOSFETS ,drop to 0 curr_tick , fire ip idle_state flag to 1 )
{
//routine to define input variables
ADC_measure();
status_determ();
// on flow_state = 1 we just open mosfets, else find out where curr_tick comes - idle_tick or work_tick
switch (flow_state)
{
case 1:
PB_ODR_bit.ODR0 = 0;
PD_ODR_bit.ODR0 = 0;
curr_tick = 0;
idle_state = 1;
case 0:
if (idle_state == 1) {
PB_ODR_bit.ODR0 = 1;
PD_ODR_bit.ODR0 = 1;
}
if (idle_state == 0) {
if (curr_tick >= work_tick)
{
PB_ODR_bit.ODR0 = 1;
PD_ODR_bit.ODR0 = 1;
curr_tick = 0;
idle_state = 1;
}
else
{
curr_tick++ ;
};
}
else {
if (curr_tick >=idle_tick)
{
idle_state = 0;
curr_tick = 0;
PB_ODR_bit.ODR0 = 0;
PD_ODR_bit.ODR0 = 0;
}
else
{
curr_tick++;
}
};
}
};
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.