position_feedback_loop/README.md
2022-01-20 19:53:59 +01:00

86 lines
3.3 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Asservissement de Position
## Intro
- Programmable System on Chip
- Lidée de remplacer par du numérique
- Blocs VHDL et du code en C
## Matériel Utilisé
- Différence entre Kitprog et PSoC 5LP
- Différence avec un FPGA classique -> mémoire flash/blocs analogiques
- PSoC 5LP CY8C5888LTI-LP097
- Choix des Pins -> mode lock
- Topdesign.cysch -> blocs VHDL, pins
- main.c -> utiliser les fonctions des blocs
## Prise en main PSoC
- pins 12.7 et 12.6 pour TX et RX
- LCD en mode 4 bits + diff des pins
- Utilisation de la datasheet
- UART 57.6 Kbauds + COM26
## Signal PWM
- Différence entre 5-0 = 5, 2.5 - 2.5 = 0, 0-5 = -5
- Valeur moyenne captée par le moteur car alimenté à 3 MHz
- Compare mode less(-128) et mode greater(+128) -> Période de 255
- Start permet dinitialiser comme ATMega16
- WriteCompare1&2 -> change la valeur de comparaison sur 8 bits
- Alpha (0-1) converti avec la période (0-256)
- Ne pose aucun problème si alpha > 1 ou alpha < 1
## Acquisition de la position
- Deux trous décalés et avec une certaine résolution
- B en avance sur A -> incrémente, sinon décrémente
- Résolution 16 bits mais peut être mise à 32 bits
- Voir la valeur sur le mode debug pour convertir en angle
## Calcul Erreur pour asservir
- Pour 27.7° nous augmentons de 0.1 alpha
- Il faut ajouter 0.5 car alpha ne peut pas être négatif
- 0.00461 paraît mieux
## Envoi dune consigne via UART
- Récupérer une suite de caractère dans un tableau
- Le convertir via la fonction atoi (iota faisant linverse)
- En mode debug tout fonctionnait
- La fonction getbuffersize permet de ne récupérer quà un certain moment
## Affichage de lerreur avec sortie analogique
- Au début idée davoir 360° = 4V et 0° = 0V -> abs
- 4V avec résolution de 16 mV/bit
- 255/360 bits/degrés
- Maintenant avec ampli + entre 180 et -180° -> ajout de +127 (comme +0.5)
## Cadencement à 10ms sous interruption
- Avoir un Te plus bas pour faire un échantillonnage adapté
- Bloc timer qui interrupt toutes les 10ms
- Sortie isr_3 convertie en int grâce à PROTO
- Quand int_3 = 1 -> va dans la fonction, flag à 1
- ReadStatusRegister remet certains bits à 0 quand appelée
- UART reste dans le while(1)
- Création dune variable flagTemp pour compter 1s
## Création déchelon/rampe
- On commence avec une consigne de 50
- Toutes les secondes on inverse la consigne
- On commence avec une consigne de 0
- On incrémente jusquà 0.5s, on décrémente par la suite -> boucle
## Erreur de traînage
- Permet de réduire lerreur sur une réponse à une rampe
- Calcul de laire de lerreur pour la réduire
- Réducteur Ki doit être bas à 10^-4 près
- Perturbe léchelon car augmente très vite dun coup -> dépassement
- Ki = 0.00002
## Passage par 0
- Utilisation du capteur de position
- 12 bits -> résolution précise avec CAN à 18 KHz
- Mode free-running, mode Vdda = Vref*2 = 2.5 *2 = 5V
- Alimenté en 5V/0V
- 5V à 0V pour 360° à 0°
- On prend getresult16 car au-dessus de 12
- 0° est obtenu a 1854 via le debug
- Création dune fonction (bool non présent)
- Allume le quaddec quand à 0°