86 lines
3.3 KiB
Markdown
86 lines
3.3 KiB
Markdown
# Asservissement de Position
|
||
|
||
## Intro
|
||
- Programmable System on Chip
|
||
- L’idé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 d’initialiser 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 d’une consigne via UART
|
||
- Récupérer une suite de caractère dans un tableau
|
||
- Le convertir via la fonction atoi (iota faisant l’inverse)
|
||
- En mode debug tout fonctionnait
|
||
- La fonction getbuffersize permet de ne récupérer qu’à un certain moment
|
||
|
||
## Affichage de l’erreur avec sortie analogique
|
||
- Au début idée d’avoir 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 d’une 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 l’erreur sur une réponse à une rampe
|
||
- Calcul de l’aire de l’erreur pour la réduire
|
||
- Réducteur Ki doit être bas à 10^-4 près
|
||
- Perturbe l’échelon car augmente très vite d’un 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 d’une fonction (bool non présent)
|
||
- Allume le quaddec quand à 0°
|
||
|