No description
ER3_Boujon_Chaupitre | ||
PWM_test/PWM_test | ||
Roue Codeuse/Roue Codeuse | ||
test/UART_Tx01 | ||
.gitignore | ||
onsaitjamais.txt | ||
README.md | ||
tests-integrateur.txt |
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°