# Autres langages > Autres langages > VHDL >  Correcteur PID VHDL

## cedd70

Bonjour,

Ci-joint le code VHDL d'un correcteur PID en VHDL.
Il est plus ou moins fonctionnelle, je suis ouvert  tout critique afin de l'amliorer. 





```

```

----------


## sgievounet

Salut 

T'as essay de placer router?


```

```

A 50MHz, je dirais qu'il va avoir du mal  boucler cette opration

----------


## cedd70

Ca marche et il compile,


Mon correcteur est implment dans une grosse structure d'asservissement pour contrler la trajectoire de deux roues ( doubles asservissements en trajectoires et vitesses ) , mais j'ai des choses bizarre qui apparaisse parfois. Pour a que je pose monde code si il peut tre amlior.

----------


## mith06

Bonjour,

a marche c'est bien!!!bravo!! :;): 

Maintenant cela ne respecte pas tout  fait les rgles de l'art...



```

```

Tu gnre une signal de donne (mme pas carr) que tu utilise comme horloge...
A ne pas faire en gnrale.Tu as de la chance que a marche, tu dois tre bas en frquence non?

Pour diviser une horloge il faut utiliser des primitives du FPGA: PLL,MCMM, BUFR (Xilinx)
sinon
Oriente ton code (des if bien placs) pour que l'outil synthtise des Clock Enale.




```
commande	<= (( (ecart * Kp) + (cpt_int * Ki)+ ((ecart - ecart_precedent) * Kd) ))/4;	--loi de commande PID
```

Comme l'a fait remarqu sgievounet ca doit tre chaud au placement routage...encore une fois tu dois vraiment tre bas en frquence.
Il faut "pipeliner" le code.

Ensuite ecart,cpt_int  sont sur 32 bits Kp,Ki,Kd sont sur 16 bits, je ne connais pas de FPGA avec des multiplieurs 32*16...,les plus gros font 18*25...

@+

----------


## cedd70

Merci de cette rponse constructive, je vais amliorer mon code en prenant en compte c'est remarques.

----------

