Page 1 of 1
Une Lib de régulation PID en micropython ?
Posted: Mon 19 Apr 2021 15:07
by sensor56
Salut,
est-ce que vous connaissez une bonne lib' de régulation PID en micropython ?
Pour l'instant, j'ai çà :
Première chose, l'existant en Micropython :
* pour la Pyboard : <
https://github.com/jibonaronno/uPy-PID_Class>
Mais à priori, on devrait pouvoir utiliser du pur Python ici finalement :
* <
https://pypi.org/project/simple-pid/>
* ou même ici encore plus simple : <
https://github.com/ivmech/ivPID/blob/master/PID.py>
Toute suggestion bienvenue.
Re: Une Lib de régulation PID en micropython ?
Posted: Mon 19 Apr 2021 17:54
by Dominique
@Sensor56
Il y a aussi
Control dc motor speed - PID controller.
J'aime assez bien la simplicité... il est aussi basé sur un article de Wikipedia.
Je dirais que tout le fil de discussion est assez intéressant
Dominique
Re: Une Lib de régulation PID en micropython ?
Posted: Tue 20 Apr 2021 12:45
by sensor56
@Dominique
OK, j'avais vu çà. Bon du coup, je copie la classe en question ici à des fins de mémo :
Code: Select all
class PID:
def __init__(self, Kp, Ki, Kd, dt, setpoint, measure_func, output_func, output_min, output_max):
self.Kp = Kp
self.Ki = Ki
self.Kd = Kd
self.dt = int(round(dt / 1000)) # Convert from ms
self.setpoint = setpoint
self.measure_func = measure_func
self.output_func = output_func
self.output_min = output_min
self.output_max = output_max
self.error = setpoint - measure_func()
self.integral = 0
self.timer = Timer(-1) # Virtual timer
self.timer.init(mode=Timer.PERIODIC, period=dt, callback=self.control)
def control(self, timer):
error = self.setpoint - self.measure_func()
proportional = self.Kp * error
self.integral = self.integral + error * self.dt
# Prevent integral windup
if (proportional > self.output_max) or (proportional < self.output_min):
self.integral = 0
self.derivative = (error - self.error) / self.dt
output = proportional + self.Ki * self.integral + self.Kd * self.derivative
self.error = error
output = max(self.output_min, output)
output = min(self.output_max, output)
self.output_func(output)
def setpoint(value):
self.setpoint = value
def stop(self):
self.timer.deinit()
Re: Une Lib de régulation PID en micropython ?
Posted: Mon 31 May 2021 12:41
by Dominique
As tu eu l'occasion de tester la classe ?
Re: Une Lib de régulation PID en micropython ?
Posted: Tue 1 Jun 2021 07:20
by sensor56
Non, mais elle a l'air à peu près propre.
Re: Une Lib de régulation PID en micropython ?
Posted: Fri 3 Dec 2021 15:33
by Dominique
J'ai eu l'occasion de tester la bibliothèque sur le projet
Plancha-CMS.
Elle fonctionne bien.... le plus compliqué reste de trouver la valeur des paramètres Proportionnel, Derivé, Integrale