Marlin vs Repetier (+ Klipper?)

Parler de tout et de rien
Kachidoki
Messages : 1549
Enregistré le : 18 août 2017 20:22

Re: Marlin vs Repetier (+ Klipper?)

Message par Kachidoki »

Les miens ressemblent à ça :
Image
Donc j'ai le +5V câblé que les pins (+5V) et les autres pins (xxx) sur les sorties du micro.

Pour que ça marche, il faut que le STM32 envoi un 0, mais pas de 1 (d'où l'open-drain ou collecteur ouvert). Idéalement avec une pullup à 5V, mais pas obligatoire dans ce cas. Tout simplement parce que sinon l'entrée du TB6600 verra soit 5V soit 5 - 3.3 = 1.7V (au lieu de 5V et 0V).

Pense aussi à inverser la logique des pins.
Tech-raton
Messages : 92
Enregistré le : 08 mars 2018 08:31

Re: Marlin vs Repetier (+ Klipper?)

Message par Tech-raton »

Hehehe, les miens ressemblent aussi à ça...

mais j'ai du connecter ena/DIR/PUL sur la masse
et j'ai connecté DIR5v/ Pul5v sur l'arduino.

mais si je comprends bien, j'ai 2 choix...
soit j'inverse la logique du stm32. mais il me faut des pins 5v tolérants.

sinon, je convertis le signal avec des level shifters.

Je pense que je vasi faire ça, parce que je ne vois pas comment je peux inverser la logique des pins dans GRBL sans modifier beaucoup de choses.

J'ai des level shifter qui arrivent, mais d'ici là, je vais regarder comment modifier la logique
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Marlin vs Repetier (+ Klipper?)

Message par mstrens »

Concernant GRBL pour STM32, je pense qu'il est possible d'adapter la configuration.
Attention que je n'ai pas testé; j'ai juste regardé les sources.

Dans le fichier default.h , il y a les paramètres suivants:
#define DEFAULT_STEPPING_INVERT_MASK 0
#define DEFAULT_DIRECTION_INVERT_MASK 0
et
#define DEFAULT_INVERT_ST_ENABLE 0 // false


Par ailleurs, la configuration proposée prévoit que les signaux steps et dir sont sur les pins 0 à 5 du port A n'est pas certifié pour le 5 volt.
Je présume qu'il faudrait donc prévoir de mettre ces signaux sur le port B.
Cela est sans doute possible (mais je ne l'ai pas testé) en modifiant la configuration définie dans le fichier cpu_map.h

A noter encore que dans le code actuel, les pins step/dir ne sont normalement configurée en collecteur ouvert.
Dans le fichier stepper.c je trouve le code suivant

Code : Tout sélectionner

void stepper_init()
{
  // Configure step and direction interface pins
#ifdef STM32F103C8
	GPIO_InitTypeDef GPIO_InitStructure;
	RCC_APB2PeriphClockCmd(RCC_STEPPERS_DISABLE_PORT, ENABLE);
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = STEPPERS_DISABLE_MASK;
	GPIO_Init(STEPPERS_DISABLE_PORT, &GPIO_InitStructure);
Je présume qu'il faudrait changer "GPIO_Mode_Out_PP" en "GPIO_Mode_Out_OD"
Tech-raton
Messages : 92
Enregistré le : 08 mars 2018 08:31

Re: Marlin vs Repetier (+ Klipper?)

Message par Tech-raton »

j'ai changé les pins dans cpu_map.h et ça fonctionnne.
j'ai donc le stm32qui fonctionne de la même manière mais avec des pins qui sont 5v tolerants.


en changeant simplement le fichier de config et le fichier stepper.h, ça devrait suffire?
Là, j'avoue que j'avance en terrain inconnu.

dans default.h
#define DEFAULT_STEPPING_INVERT_MASK 0
#define DEFAULT_DIRECTION_INVERT_MASK 0
si je le passe à 1, ça ne va que changer le sens des steppers, je m'en occuperai dans un second temps
#define DEFAULT_INVERT_ST_ENABLE 0 // false
dans la mesure où les drivers ne sont pas connectés avec Enable, je peux m'en passer.

pour le "GPIO_Mode_Out_PP" ou "GPIO_Mode_Out_OD"
je vérifie ça et je vous tiens au courant.
ça devrait marcher mais je vais prendre un peu de temps avant de faire une betise.
dans tous les cas, j'ai des level shifters qui arrivent, donc j'essaierai les deux solutions.
[edit] il faudrait aussi modifier GPIO_PuPd en GPIO_PuPd_UP pour utiliser une resistance interne en pullup, non?

merci pour les infos !!
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Marlin vs Repetier (+ Klipper?)

Message par mstrens »

Pour inverser les 3 pulses (step ), il faut je pense employer le code suivant
#define DEFAULT_STEPPING_INVERT_MASK ((1<<X_AXIS)|(1<<Y_AXIS)|(1<<Z_AXIS))

Pour ne pas inverser un axe, il suffit de ne pas le citer. Ainsi pour inverser seulement X et Y, le code devient
#define DEFAULT_STEPPING_INVERT_MASK ((1<<X_AXIS)|(1<<Y_AXIS))

Pour inverser les directions
#define DEFAULT_DIRECTION_INVERT_MASK ((1<<X_AXIS)|(1<<Y_AXIS)|(1<<Z_AXIS))

je pense qu'il faut faire ces modifs dans la section #ifdef DEFAULTS_GENERIC
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Marlin vs Repetier (+ Klipper?)

Message par mstrens »

Tech-raton a écrit : 15 juin 2018 17:59 il faudrait aussi modifier GPIO_PuPd en GPIO_PuPd_UP pour utiliser une resistance interne en pullup, non?
Je ne vois pas où tu trouves le code GPIO_PuPd. Y a t'il une faute de frappe?

Pour les pins qui commandent les step et dir, il n'est pas nécessaire d'avoir de pull up si les pins "+" du step et dir coté TB6600 sont raccordées à Vcc 5V et que ce sont les pins "-" qui sont connectée au stm32 (lequel doit avoir ses pin en open drain = "OD")
Tech-raton
Messages : 92
Enregistré le : 08 mars 2018 08:31

Re: Marlin vs Repetier (+ Klipper?)

Message par Tech-raton »

si je veux utiliser le mode OD, il va me falloir une résistance en pullup, qqpart.
soit j'ajoute une résistance à mon circuit, soit je modifie grbl pour qu'il en utilise une.

d'après ce que j'ai compris, la resistance en pullup pour un opendrain, on pourrait l'ajouter en changeant GPIO_PuPd en GPIO_PuPd_UP.
faut juste voir s'il est défini qqpart comme ça.

sinon, j'ajouterai simplement une résistance.
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Marlin vs Repetier (+ Klipper?)

Message par mstrens »

Il n'est pas nécessaire d'utiliser de résistance pull up.
En fait le TB6600 a des optocoupleurs comme entrée.
Cela signifie qu'il considère que le niveau est 1 lorsqu'un courant passe dans la diode (qui est en entrée de l'opto coupleur).
Pour faire passer un courant dans la diode, on peut raccorder le + de la diode au 5 V Vcc et le moins de la diode à la pin du STM32 (en open drain). Lorsque la pin du STM32 est forcée (par programme) au niveau LOW, le courant peut passer dans la diode. Lorsque la pin du STM32 est au niveau HIGH et que la pin est configurée en open drain(OD), aucun courant ne peut passer dans la diode.

A noter qu'à mon avis, le TB6600 devrait aussi pouvoir être commandé en direct par le STM32 (donc en 3.3 v et sans avoir besoin d'inverser les signaux) si on adapte les résistances qui sont montée en série sur le pcb du TB6600.
J'ai trouvé sur le net un schéma du TB600 qui utilise des optocoupleurs pour lesquels le courant pour la diode d'entrée doit être de l'ordre de 6 à 10 mA et la chute de tension à la diode est de 1.8 volt. Ce schéma que j'ai trouvé mentionne la présence d'une résistance de 470 Ohm en série avec la diode. Pour un commande en 5 Volt cela semble conforme car le courant dans la diode est alors de (5 Volt - 1.8 Volt) /470 = 6.8 mA.
Pour garder le même courant (environ 7 mA)dans la diode, avec un signal de commande en 3.3 volt, il suffit de réduire la résistance à environ 220 Ohm (au lieu de 450). On peut le faire soit en changeant la résistance de 470 par une de 220 Ohm soit en soudant une résistance de l'ordre de 330 Ohm au dessus (donc en //) de la résistance de 450.
Dans ce cas, c'est la borne step + et dir + du TB6600 qui doit être connectée au STM32; les bornes "-" étant connectée à la masse. Il n'est alors plus nécessaire de modifier GRBL.
Attention cependant que j'ai ouvert un TB6600 que j'ai acheté en Chine (aliexpress) et les composants ne correspondent pas au schéma trouvé sur internet. Les valeurs mentionnées ci-avant ne sont donc probablement pas valables pour tous les TB6600.
mstrens
Messages : 2611
Enregistré le : 27 févr. 2018 12:58

Re: Marlin vs Repetier (+ Klipper?)

Message par mstrens »

Pour info, j'ai un peu analysé les composants de mes TB6600.
Ils utilisent comme optocoupleur des EL817.
Il n'y a pas de résistance en série avec la photodiode mais un montage basé sur 2 transistors et 2 résistances.
Ce montage agit comme un limiteur de courant (de l'ordre de 15 à 20 mA) en régulant une tension de 0.6V dans une résistance de 39 Ohm.

La diode du EL817 a en principe une chute de tension de 1.2 V à ses bornes.
De ce fait, je pense que mes TB6600 devraient pouvoir fonctionner correctement sous 3.3 volt car il restera une tension de 1,5V (3.3 - 0.6 - 1.2) entre le collecteur et l'émetteur du transistor de régulation.

Par contre la mauvaise nouvelle est que les EL817 ont un taux de montée et de descente assez long ce qui devrait probablement limiter la fréquence max des signaux steps à environ 20 khertz alors que le STM32 devrait permettre d'atteindre les 100khertz.
Les schémas trouvés sur internet pour d'autres TB6600 utilisaient eux d'autres optocoupleurs plus performants (au point de vue fréquence max).
Aze
Messages : 1928
Enregistré le : 11 mars 2017 14:13

Re: Marlin vs Repetier (+ Klipper?)

Message par Aze »

Est-ce que je peux poser une question qui n'a pas de rapport (enfin si, mais avec le sujet de départ):
dans Repetier Firmware, il y a une option qui est mise à 16 par défaut:
Move Cache Size
PRINTLINE_CACHE_SIZE
16 [moves]

et il y a une bulle d'aide à côté avec écrit ça (notamment):
Move Cache Size (default 16)

That is the size of the buffer for currently processed segment and following moves. Higher values require more ram. Cartesian printer can go up to 32 on Atmel AVR, Deltas until 16. It could make print smoother if they have many small lines.


Y a aussi un schéma et un peu plus d'explications dans l'info-bulle (voir dans l'onglet 'mechanics' , 7ème ligne):
https://www.repetier.com/firmware/v100/index.php

La question est la suivante: si je comprends bien, en attendant de voir GRBL tourner en 32bits pour 2.20€ sur nos machines ;) , est-ce qu'il ne vaut pas mieux mettre cette valeur à 32?
Répondre