Bonjour à tous,
Je cherche à commander 6axes d'un bras robot de manière indépendante pour le moment puis de manière synchronisés(suivi de trajectoire, interpolations, etc…) par l'intermédiaire d'un µContrôleur PIC (16F877 ou 18F252).
Je programme mes PIC sous mikroC et j'utilise une platine de développement EasyPIC5.
En guise de présentation, j'explique le contexte :
Pour info, les axes sont les suivants: rotation horizontale, épaule, coude, poignet, rotation axiale pince, ouverture/fermeture pince.
Des moteurs pas à pas sont utilisés pour mouvoir les axes.
La commande des moteurs pas à pas est réalisée à base de L297 et L6203 et nécessite les signaux suivants:
- ToutOuRien CW/CCW (sens de rotation)
- TOR HALF/FULL (pas complet/demi-pas)
- TOR ENABLE
- Entrée CLK (horloge)
- TOR RESET
- TOR CONTROL
De plus, deux sortie HOME (que je n'utiliserais pas) et SYNC(synchronisation des 6 cartes de commande moteurs) sont disponibles
ENABLE, HALF/FULL et CONTROL seront gérés par une carte de commande (hors PIC) et RESET ne sera pas utilisé
Les signaux CW/CCW, CLK seront donc les seuls à être générés par le PIC :
- CW/CCW étant à 0 ou 1 pour le choix du sens de rotation
- CLK permettant à chaque front montant de faire avancer le moteur d'un pas.
Ma problématique :
Je souhaite commander les six carte de commande moteur par l'intermédiaire d'un seul µC PIC. J'ai donc besoin que mon PIC génère les 6 signaux d'horloge indépendamment et à des fréquences données (0 à 1,5KHz environ).
Pour un seul moteur, ma méthode fonctionne, mais n'est à mon avis pas la plus adaptée : au passage à 1 d'une entrée commandant un sens de rotation, je mets la sortie CW/CCW à la valeur voulue puis je génère mon horloge et faisant passer à 1 puis 0 puis 1... la sortie reliée à l'horloge :
le délai de 1ms entre la mise chaque changement d'état de la sortie CLK me permet de générer théoriquement une fréquence de 500Hz.Code:char CW1; void main() { if button(!CW1 && PORTA,1,1) then CW1=1 //appuis sur bouton if button(PORTA,1,1) then CW1=0 //relâchement bouton while(CW1) { PORTA=0x01; Delay_ms(1); PORTA=0x00; Delay_ms(1) } }
Ma problématique est que je ne sais pas comment faire pour générer plusieurs signaux en parallèle, tout en pouvant garantir la fréquence de ces signaux.
La seule idée dont je dispose est d'utiliser les sorties PWM (que je ne maitrise pas encore), multiplier le nombre de PICs (un pour deux axes ou un par axe) et utiliser un autre PIC pour synchroniser et commander l'ensemble.
Si vous avez des pistes à me fournir pour:
- générer mes signaux horloge (à terme, j'aurais besoin de régler ma fréquence pour obtenir une rampe de montée au démarrage, vitesse maxi constante puis rampe de descente avant l'arrêt)
- générer plusieurs signaux sans que la génération de l'un soit impactée par celle d'un autre
- me fournir tout conseil pouvant m'aider.
Merci d'avance à tous,
Mikaël.
-----