Bonjour,
L'inscription sur ce forum et les premiers messages sont modérés par un Administrateur.
Ce n'est pas très convivial mais malheureusement nécessaire suite au spam intensif de nos amis russes.
Cordialement,
Dominique

Une Lib de régulation PID en micropython ?

A la recherche d'un pilote pour supporter un périphérique matériel? Ou une bibliothèques spécialisée (ex: FFT).
Peut être développez-vous des pilotes MicroPython?
Cette section est le bon endroit pour en parler?
Règles du forum
Vous aimez MicroPython? Nous aussi! Ces forums sont destinés aux amoureux de Python sur MicroContrôleur.
Le support se fait sur base volontaire et uniquement pour des produits officiels (pas de copie SVP).
Le forum de MicroPython.org sera une excellente référence documentaire (en anglais).

Merci de suivre les recommandations suivantes.
Pensez à:
  • Titre claire: permettant d'identifier le produit et le problème
  • Contenu complet: schéma, message d'erreur, etc (tout ce qui permet d'aider à distance).
  • Fichier joint: Max 300 Ko
  • Courtoisie et précision
sensor56
Messages : 43
Inscription : jeu. 1 avr. 2021 07:14

Une Lib de régulation PID en micropython ?

Message par 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.
Avatar de l’utilisateur
Dominique
Administrateur du site
Messages : 115
Inscription : dim. 17 mai 2020 22:43

Re: Une Lib de régulation PID en micropython ?

Message par 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
Dominique, MC Hobby.
sensor56
Messages : 43
Inscription : jeu. 1 avr. 2021 07:14

Re: Une Lib de régulation PID en micropython ?

Message par sensor56 »

@Dominique

OK, j'avais vu çà. Bon du coup, je copie la classe en question ici à des fins de mémo :

Code : Tout sélectionner

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()
Avatar de l’utilisateur
Dominique
Administrateur du site
Messages : 115
Inscription : dim. 17 mai 2020 22:43

Re: Une Lib de régulation PID en micropython ?

Message par Dominique »

As tu eu l'occasion de tester la classe ?
Dominique, MC Hobby.
sensor56
Messages : 43
Inscription : jeu. 1 avr. 2021 07:14

Re: Une Lib de régulation PID en micropython ?

Message par sensor56 »

Non, mais elle a l'air à peu près propre.
Répondre