filetage avec microcontrolleur

  • Auteur de la discussion vibram
  • Date de début
V

vibram

Compagnon
Je voulais essayer de me passer de cubeMX pour eviter d'avoir une couche en plus a savoir les librairies HAL

En revanche je viens de penser à quelque chose:
Je me demande si je ne demande pas trop à mon Timer, à savoir compter ET renvoyer la valeur toutes les X Ms
Ne devrais je pas faire un simple timer comme j'ai présenté au debut du post et un second interrupt timer qui vient lire la valeur toutes les X Ms ?
C'est peut etre ce que tu me dis de faire depuis le debut et que je n'ai pas compris. Cela me semble beaucoup plus logique non ?
Il y aura donc 2 timers
 
V

vres

Compagnon
Non, a mon avis il manque quelque chose.
Je n'ai hélas pas le temps de faire des tests.
Tu n'a pas encore ta discovery pour faire du débogage en temps réel ?
 
V

vibram

Compagnon
Je ne suis pas allé la chercher
Je vais commencer avec la semaine prochaine.
Donc tu penses qu'on peut tout faire avec un seul timer ?
Je ne peux pas avancer ce weekend mais je m'y remets lundi mais j'aimais bien la solution avec un built in timer et un interrupt timer qui vient chercher la valeur du built in. Je pense que c'est pas trop complexe en plus
Pas de souci pour les tests, tu m'aides deja bien assez !
 
V

vres

Compagnon
bien sur, En revanche tout ce qui est affichage tu le laisse dans main ou alors tu gardes une timer rapide pour le codeur ( 100 kHz) et le moteur et un timer lent pour l'affichage (20Hz)
 
L

LETARTARE

Compagnon
Bonjour,
@vibram : pourriez-vous précisez en définitive, quels sont les outils de développement que vous utilisez pour ce projet ?
Bonne journée.
 
V

vibram

Compagnon
Depuis le début je n'utilise que Keil et un MCU STM32F103C8T6
CubeMx a l'air d'etre assez apprécié mais il rajoute une couche de librairies (HAL) et je trouve celles ci peu parlantes au premier abord. Keil est un peu plus lourd mais au moins on doit tout faire, ce qui me permet de comprendre un peu ce qu'il se passe, ce que je trouve important
 
V

vres

Compagnon
C'est plutôt une tempo pas un timer avec une interruption.
Ce n'est pas forcement régulier car ça ne prend pas en compte le nombre de cycles pour effectuer la routine. Ce qui est interressant avec les timers c'est d'avoir un fonctionnement quasi multi-taches
Pour générer des step pour un moteur pas à pas ça peut avoir des inconvénients.



Je pense que LETARTARE veut connaitre l'outil de programmation: ST-Link ?
 
L

LETARTARE

Compagnon
Merci pour le renseignement sur les outils logiciels utilisés.
 
V

vibram

Compagnon
Alors en debug normalement tu dois pouvoir suivre les variables en temps réel sans avoir à les afficher sur ton afficheur
Justement je n'ai pas réussi à faire fonctionner le debug, il faut que je me repenche dessus. Je my remets lundi :wink:

Envoyé de mon Redmi 3 en utilisant Tapatalk
 
V

vibram

Compagnon
Les avancées du jour:
J'ai recu et un peu testé le STM32F411 nucleo, rien ne fonctionne pour le moment :D
pas meme les exemples type blinky
Donc je n'ai pas envie de m'éparpiller car le STM32F103 devrait pouvoir repondre à mes besoins.

J'ai modifié le code comme j'avais pensé le faire dessus à savoir un built in timer + un interrupt timer qui vient lire la valeur du timer
Et cela fonctionne !
Maintenant je dois peaufiner:
Les valeurs de l'interrupt timer, il y a pas mal de lecture sur les prescaler etc mais cela reste assez theorique, je vais regarder demain tranquillement
L'histoire du cycle mentionné par CNCserv à savoir que les step envoyées ne doivent pas dépasser 1/2 du nombre d'interruption, sachant que le nombre d'interruption doit être défini par le timer (ce que je viens de dire juste avant pour ceux qui suivent !! :wink: )

Une fois cela réglé, je vais me remettre dans les ratios (à savoir un tour de codeur + X tour de PAP etc)
J'ai commandé un petit clavier 4x4 pour rentrer les données et j'ai réfléchi à la routine de l'ensemble. Faut patienter 2 ou 3 semaines que le keypad arrive. Ca me laisse le temps pour avancer la commande du moteur

Voici le sketch pour les curieux
 
V

vibram

Compagnon
Bonjour à tous,
les questions du jour ... :wink:

1. Suite au poste de saci ici: https://www.usinages.com/threads/filetage-avec-microcontrolleur.101117/page-7#post-1170879
J'ai fait quelques tests sur la boucle qui pilote les moteurs.
je ne me fais pas de souci pour l'inversement du sens de roation car il n'aura pas lieu de maniere brutale et encore moins frequement. En revanche, la période entre chaque pulse est beaucoup plus importante.
Dans les dernieres versions du sketch:
Pour rappel: Pin 3 est le sens de roation, le Pin 2 les pulses
Là le moteur tourne bien et ne semble pas perdre de pas. En revanche en dessous, il ne démarre pas. Je pense que cela est du à la courbe d'acceleration que je n'ai pas mise en place car l'alim que j'ai est largement suffisant et le moteur a assez de courant.
A raison de 500 pulse/tour et un pas de 2mm, je mets 0.375sec pour faire un tour (cela me semble faible lorsque je vois la vitesse de rotation à vue d'oeil...). je peux diminuer le Delay apres le pin 3 en revanche pour le Pin 2 je suis dubitatif. Quid de ce probleme d'acceleration ?

2. Dans la derniere version du sketch (voir ci bas), le moteur ne tourne pas lorsque je change la position du codeur. Lorsque j'enleve toute la partie du code relative à la commande du moteur, le compteur s'affiche correctement sur le LCD, pas de souci. Lorsque je laisse cette partie, le compteur reste bloqué à 0
J'ai donc modifié les parametres de mon interrupt mais j'aimerais confirmation de votre part
upload_2017-7-5_16-53-21.png


Si mes recherches sont exactes, Timerclock pour le ST32F103 APB1 est à 36MHz
J'ai fixé arbitrairement la période entre chaque interrupt à 0.1 seconde
Et la variable Period à 499
J’obtiens un prescaler de 7199. cela vous parait juste ?
Je pense que c'est important que je regle d'abord le timer interrupt et ensuite je vois comment faire pour que mon moteur suive le rythme, qu'en pensez-vous ?

J'ai aussi écrit le bout de code pour le keypad que je laisse en commentaire pour le moment car je n'ai pas le keypad pour essayer

merci de votre aide :wink:

NB: pour le moment je n'arrive pas à faire fonctionner le debugguer sur le STm32F103
C'est vraiment pas pratique mais comme le debug a l'air assez indigeste pour un neophyte, pas sur que cela me handicape tant que ca ! mais je vais bosser dessus, au moins pour avoir un serial monitor je pense

 
V

vres

Compagnon
les run_ccw et Run_cw c'est un peu lourd et en plus c'est bloquant et rien ne garanti que les pulse vont être régulier, ça va dépendre du temps de traitement du programme.
En plus les flottants sur le F1 ça risque de faire beaucoup de cycles:roll:
 
V

vibram

Compagnon
Que preconiserais tu ? Tu mettrais cela directement dans l'interruption ?

Le timer interrupt te semble bon comme ça ?
 
V

vres

Compagnon
Oui, mais c'est déjà le cas, on ne mets jamais de tempo dans une interruption
Sur le code que je t'ai suggéré les pulses sont remis à zéro sur une interruption intermédiaires.
 
V

vibram

Compagnon
ah ok c'est la seule partie que je n'avais pas enlevé car je ne comprenais pas.
J'ai modifié en fonction et j'ai simplifier le code mais toujours sans succes. J'ai vraiment un probleme d'interruption. Le timer codeur fonctionne bien mais l'interruption ne fait pas varier les variables ni bouger le moteur

Je vais donc serieusement me pencher sur le debug pour comprendre ce qu'il se passe mais pour l'instant je n'arrive pas à faire ce que je veux avec. Il faut que j'arrive d'abord à afficher les printf puis je mettrai un printf dans l'interruption pour voir

 
S

saico

Apprenti
Salut,

Une méthode simple pour faire du débogage consiste à utiliser la LED verte présente sur la carte ( connectée sur la broche PC13 ).

Dans la routine d'interruption du timer2, tu peux insérer un appel à une fonction qui fait allumer, éteindre ou basculer la led pour suivre le déroulement de ton programme.

n'oublies pas de "un-commenter" la commande " init_timer() " dans la fonction main().

voici quelques routines :


 
V

vibram

Compagnon
Ah oui forcément sans init timer ça va être compliqué.
Je ne sais pas comment font les gens du métier mais c'est un peu mon problème je commente et de commente dans tous les sens et à la fin je trouve des erreurs qui n'en sont pas...
Je bricole sur mon four de trempe ce week-end, la suite lundi :wink:
 
V

vibram

Compagnon
Je ne suis pas mort, le projet non plus mais ca avance difficilement
Suite au bon coup d'oeil de saci, j'ai decommenté la ligne et maintenant le moteur réagit en fonction du codeur. Seulement, il tourne tres lentement et step par step, du style 1 step toutes les secondes ou quelque chose de la sorte.
Comme c'est impossible, enfin surtout chronophage de procéder par tatillon sans debug, j'ai arreté de passer du temps sur le code pour me concentrer sur le debug, chose que je n'arrive pas à faire pour le moment.

J'ai mis un message sur le forum Keil mais c'est pour le moment toujours bloqué.
Je bloque sur le branchement du petit module ST link v2
https://fr.aliexpress.com/item/1PCS...lgo_pvid=95e8437b-347c-4841-ad7f-298d1690d2fa

sur le microcontroller STm32F103
Je l'ai branché correctement pour envoyer les sketch mais visiblement c'est un autre branchement qu'il faut pour le debug et je ne le trouve pas. Il s'agirait du SWO sur le port PB3. J'ai tenté de le mettre sur le port 5 du ST LINK (nommé SWIM) mais j'ai toujours cette erreur de synchro
Si vous avez des infos je suis preneur...
merci :wink:
 
N

nopxor

Compagnon
Bonjour,

3 connections sont nécessaires pour le ST-link:

Programmer -> Target

Ground -> GND

SWDIO -> PA13

SWCLK -> PA14

The-Generic-STM32F103-Pinout-Diagram.png
 
V

vibram

Compagnon
salut @nopxor
J'ai un 4eme fil : le 3.3v sinon rien n'est reconnu
Ce que tu me decris là est pour envoyer le sketch sur le MCU mais à premiere vue il y a aussi le PB3 qui entre en jeu
Mais à l'origine, j'ai fait comme tu as indiqué et j'ai toujours ce souci de "no synchronization"
 
N

nopxor

Compagnon
Dans Keil, vérifie (dans debug settings) que le port SW est choisi et pas JTAG.
 
N

nopxor

Compagnon
ST-link semble bien reconnu mais:
SWDIO -> No target connected
c'est pas normal
 
V

vibram

Compagnon
oui pardon javais testé sans mettre le 3.3v

upload_2017-7-11_14-55-51.png


je me demande s'il n'y a pas une histoire de Sysclock pourtant normalement elle est à 72Mhz mais je n'ai rien touché dans le code à ce sujet
 

Sujets similaires

Père-Pendiculaire
Réponses
23
Affichages
635
Père-Pendiculaire
Père-Pendiculaire
N
Réponses
27
Affichages
710
Jean 47
J
2
Réponses
27
Affichages
1 246
jean-jacques
J
C
Réponses
0
Affichages
3 480
caramel
C
B
Réponses
19
Affichages
2 025
boumboauto
B
tournele
Réponses
106
Affichages
14 462
tournele
tournele
Haut