debug speed control algorithm #2

This commit is contained in:
Jan Beníček 2025-01-15 08:53:54 +01:00
parent 7bf1cd5b79
commit ebda5844ef
6 changed files with 14 additions and 46 deletions

View file

@ -1 +0,0 @@
/home/jbenicek/Programovani/SequentMicrosystems_API/.venv/bin/python

View file

@ -1,33 +0,0 @@
import datetime, megaind, asyncio
from src.variables.service import set_variable
async def run():
impuls_count_per_rpm: int = 4
last1: bool = False
last1_time: datetime.datetime = datetime.datetime.now()
lock = asyncio.Lock()
average = []
while True:
puls = megaind.getOptoCh(0, 1)
if puls == 1 and last1 == False:
last1 = True
pulse_time = datetime.datetime.now()
delay = pulse_time - last1_time
last1_time = pulse_time
rising_per_second = 1 / (delay.microseconds / 1000000)
average.append((rising_per_second / impuls_count_per_rpm) * 60)
if len(average) > 4:
average.remove(average[0])
averaged = 0
for i in average:
averaged += i
async with lock:
set_variable("actual_rpm", round(averaged / len(average), 1), False)
elif puls == 0:
last1 = False

View file

@ -83,6 +83,7 @@ def rpm_control():
if requested_rpm == 0:
set_output(0)
return
#algorithm for RPM control
if ((requested_rpm - float(get_variable(variable_control_step_rpm))) < actual_rpm) or (actual_rpm < (requested_rpm + float(get_variable(variable_control_step_rpm)))):

View file

@ -2,10 +2,13 @@ from src.variables.service import get_variable, set_variable
from gpiozero import Button
import datetime
from scripts.speed_controller import rpm_control
pulses_per_rotation = 1
reader = Button(4, pull_up=False, bounce_time=0.0005)
set_variable("speed_reader_last_impulse_time", datetime.datetime.now(), False)
rpm_last = 0
def event():
actual = datetime.datetime.now()
@ -13,12 +16,16 @@ def event():
difference = (actual - last).total_seconds()
set_variable("speed_reader_last_impulse_time", actual, False)
rpm = (60 / difference) / pulses_per_rotation
rpm = (60 / difference) / pulses_per_rotation
actual_rpm = (rpm_last + rpm) / 2
rpm_last = rpm
set_variable("actual_rpm", round(actual_rpm, 1), False)
rpm_control()
set_variable("actual_rpm", round(rpm, 1), False)
reader.when_pressed = event
reader.when_activated
reader.when_pressed = event

View file

@ -11,8 +11,8 @@ if bool(os.getenv("BACKGROUND_SCRIPTS_RUN", 0)):
#control speed
from scripts.speed_controller import rpm_control
scheduler.add_job(rpm_control, trigger=IntervalTrigger(seconds=0.2))
#from scripts.speed_controller import rpm_control
#scheduler.add_job(rpm_control, trigger=IntervalTrigger(seconds=0.5))
#control fans
from scripts.fan_controller import fan_control
@ -20,5 +20,3 @@ scheduler.add_job(fan_control, trigger=IntervalTrigger(minutes=1))
#speed_reader
import scripts.speed_reader

View file

@ -12,10 +12,6 @@ import scripts.timer
app = FastAPI(root_path="/api")
@app.on_event("startup")
async def startup():
from scripts.read_rpm import run
asyncio.create_task(run())
app.include_router(router=modulesrouter)