1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies. En savoir plus.

Profil denture couronne

Discussion dans 'Fraisage' créé par electroremy, 7 Mai 2015.

  1. electroremy

    electroremy Nouveau

    Messages:
    46
    Inscrit:
    23 Mars 2014
    Profil denture couronne
    Bonjour

    Je suis en train de développer un logiciel maison, qui sert à dessiner des pièces puis à les usiner avec une fraiseuse CNC 2.5D

    Mon programme est capable de générer le profil d'un engrenage à denture droite, pour différentes valeurs de nombre de dents, de module, d'angle de pression et de déport.

    Par contre, je ne sais pas comment générer le profil d'un engrenage de type "couronne" donc avec denture intérieure.

    En effet, il ne suffit pas de prendre le profil d'un engrenage "en négatif", il y a interférence comme le montre la deuxième image :

    [​IMG]


    [​IMG]


    Voici le code source générant le profil (en VB.NET) :

    Public Sub AjouterEngrenage(ByVal Nom As String, ByVal RefForme As Integer, ByVal TypeUsinage As TypeForme, ByVal CentreX As Double, ByVal CentreY As Double, ByVal ModuleE As Double, ByVal NbDents As Integer, ByVal DebutAngle As Double, Optional CoefDeport As Double = 0, Optional Alpha As Double = 20, Optional Resolution As Integer = 100)
    Dim Fo As Forme_2D
    Dim Ar As Arc_2D
    Dim Pt1 As PointReel_2D, Pt2 As PointReel_2D
    Dim Li As Ligne_2D

    'Dim RayonCreux As Double
    Dim RayonTete As Double
    Dim RayonPied As Double
    Dim RayonMini As Double
    Dim i As Integer

    Dim A1 As Double
    Dim A2 As Double
    Dim A3 As Double
    Dim A4 As Double
    Dim A5 As Double
    Dim A6 As Double

    'Paramètres de base :
    'ModuleE
    'NbDents
    'Alpha
    'CoefDeport

    'REMARQUE : DiametrePrimitif = ModuleE * NbDents

    'Paramètres calculés :
    Dim InvAlpha As Double
    Dim AlphaExt As Double
    Dim RayonBase As Double
    Dim RayonCreux As Double
    Dim DemiAngleBase As Double
    Dim RayonTangente As Double

    'Equation cylindrique :
    Dim R As Double
    Dim Theta As Double
    Dim t As Double, j As Integer
    Dim X As Double, Y As Double, tmp As Double

    'Tous les angles doivent êtres en DEGRES
    If CoefDeport < -0.3 Then CoefDeport = -0.3
    If CoefDeport > 0.7 Then CoefDeport = 0.7
    InvAlpha = Math.Tan(Alpha * DEG_TO_RAD) - Math.PI * Alpha / 180
    AlphaExt = RAD_TO_DEG * Math.Acos(NbDents * Math.Cos(Alpha * DEG_TO_RAD) / (NbDents + 2 + 2 * CoefDeport))
    RayonBase = ModuleE * NbDents * Math.Cos(Alpha * DEG_TO_RAD) / 2
    RayonCreux = ModuleE * ((NbDents / 2) - 1.25 + CoefDeport)
    DemiAngleBase = (90 / Math.PI) * ((Math.PI / NbDents) + 2 * InvAlpha)
    If NbDents < 41 Then
    RayonTangente = RayonCreux
    Else
    RayonTangente = RayonBase - 2
    End If

    Fo = New Forme_2D(Nom, RefForme, TypeUsinage)
    Liste_Formes_2D.Add(Fo)


    'RayonCreux = (ModuleE * NbDents - 2.5 * ModuleE) * 0.5
    'RayonTete = (ModuleE * NbDents + 2 * ModuleE) * 0.5
    For i = 0 To NbDents - 1
    A1 = i * 360 / NbDents + DebutAngle
    'ON DOIT FAIRE VARIER T de 0 à 1 :
    'Courbe n°1 :
    For j = 0 To Resolution
    t = j * 1 / Resolution
    R = RayonBase / Math.Cos(t * AlphaExt * DEG_TO_RAD)
    Theta = (180 / Math.PI) * (Math.Tan(t * AlphaExt * DEG_TO_RAD) - Math.PI * (t * AlphaExt) / 180) - DemiAngleBase

    'Conversion coordonnées cylindriques en cartésiennes :
    X = R * Math.Cos(Theta * DEG_TO_RAD)
    Y = R * Math.Sin(Theta * DEG_TO_RAD)
    'Rotation pour la dent en cours :
    tmp = X * Math.Cos(A1 * DEG_TO_RAD) - Y * Math.Sin(A1 * DEG_TO_RAD)
    Y = X * Math.Sin(A1 * DEG_TO_RAD) + Y * Math.Cos(A1 * DEG_TO_RAD)
    X = tmp
    'Translation au centre de l'engrennage :
    X = CentreX + X
    Y = CentreY + Y
    If j = 0 Then
    RayonMini = R
    Pt1 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt1)
    ElseIf j = Resolution Then
    Pt2 = New PointReel_2D(X, Y, True) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    A2 = Theta
    RayonTete = R
    Else
    Pt2 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    End If
    Next
    'Courbe n°2
    For j = 0 To Resolution
    t = j * 1 / Resolution
    R = RayonTangente + t * (RayonBase - RayonTangente)
    Theta = -DemiAngleBase

    'Conversion coordonnées cylindriques en cartésiennes :
    X = R * Math.Cos(Theta * DEG_TO_RAD)
    Y = R * Math.Sin(Theta * DEG_TO_RAD)
    'Rotation pour la dent en cours :
    tmp = X * Math.Cos(A1 * DEG_TO_RAD) - Y * Math.Sin(A1 * DEG_TO_RAD)
    Y = X * Math.Sin(A1 * DEG_TO_RAD) + Y * Math.Cos(A1 * DEG_TO_RAD)
    X = tmp
    'Translation au centre de l'engrennage :
    X = CentreX + X
    Y = CentreY + Y
    If j = 0 Then
    RayonPied = R
    A4 = A1 + Theta
    If RayonPied > RayonMini Then
    RayonPied = RayonMini
    Exit For
    End If
    Pt1 = New PointReel_2D(X, Y, True) : Fo.Liste_Points_2D.Add(Pt1)
    ElseIf j = Resolution Then
    Pt2 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    Else
    Pt2 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    End If
    Next

    If i = 0 Then
    A6 = A4
    Else
    'On trace l'arc entre les pieds des dents :
    'entre la valeur courante de A4 et la valeur précédente de A5
    Ar = New Arc_2D(CentreX, CentreY, RayonPied, A4, A5 - A4, Fo, False) : Fo.Liste_Arcs_2D.Add(Ar)
    End If

    'Courbe n°1 symétrique :
    For j = 0 To Resolution
    t = j * 1 / Resolution
    R = RayonBase / Math.Cos(t * AlphaExt * DEG_TO_RAD)
    Theta = (180 / Math.PI) * (Math.Tan(t * AlphaExt * DEG_TO_RAD) - Math.PI * (t * AlphaExt) / 180) - DemiAngleBase

    'Conversion coordonnées cylindriques en cartésiennes :
    X = R * Math.Cos(Theta * DEG_TO_RAD)
    Y = -R * Math.Sin(Theta * DEG_TO_RAD)
    'Rotation pour la dent en cours :
    tmp = X * Math.Cos(A1 * DEG_TO_RAD) - Y * Math.Sin(A1 * DEG_TO_RAD)
    Y = X * Math.Sin(A1 * DEG_TO_RAD) + Y * Math.Cos(A1 * DEG_TO_RAD)
    X = tmp
    'Translation au centre de l'engrennage :
    X = CentreX + X
    Y = CentreY + Y
    If j = 0 Then
    RayonMini = R
    Pt1 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt1)
    ElseIf j = Resolution Then
    Pt2 = New PointReel_2D(X, Y, True) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    A3 = -Theta
    Else
    Pt2 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    End If
    Next
    'Courbe n°2 symétrique :
    For j = 0 To Resolution
    t = j * 1 / Resolution
    R = RayonTangente + t * (RayonBase - RayonTangente)
    Theta = -DemiAngleBase

    'Conversion coordonnées cylindriques en cartésiennes :
    X = R * Math.Cos(Theta * DEG_TO_RAD)
    Y = -R * Math.Sin(Theta * DEG_TO_RAD)
    'Rotation pour la dent en cours :
    tmp = X * Math.Cos(A1 * DEG_TO_RAD) - Y * Math.Sin(A1 * DEG_TO_RAD)
    Y = X * Math.Sin(A1 * DEG_TO_RAD) + Y * Math.Cos(A1 * DEG_TO_RAD)
    X = tmp
    'Translation au centre de l'engrennage :
    X = CentreX + X
    Y = CentreY + Y
    If j = 0 Then
    A5 = A1 - Theta
    If R > RayonMini Then Exit For
    Pt1 = New PointReel_2D(X, Y, True) : Fo.Liste_Points_2D.Add(Pt1)
    ElseIf j = Resolution Then
    Pt2 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    Else
    Pt2 = New PointReel_2D(X, Y, False) : Fo.Liste_Points_2D.Add(Pt2)
    Li = New Ligne_2D(Pt1, Pt2) : Fo.Liste_Lignes_2D.Add(Li)
    Pt1 = Pt2
    End If
    Next

    'Arc correspondant au sommet des dents :
    Ar = New Arc_2D(CentreX, CentreY, RayonTete, A1 + A2, A3 - A2, Fo, False) : Fo.Liste_Arcs_2D.Add(Ar)
    Next

    'Arc entre le pied de la dernière dent et de la première :
    Ar = New Arc_2D(CentreX, CentreY, RayonPied, A5, 360 + A6 - A5, Fo, False) : Fo.Liste_Arcs_2D.Add(Ar)

    'On ajoute le centre pour qu'il soit sélectionnable avec l'accroche objet (en effet, on a créé les arcs sans centre accrochable) :
    Fo.Liste_Points_2D.Add(New PointReel_2D(CentreX, CentreY))
    End Sub


    Merci pour vos conseils :)
     
  2. Bbr

    Bbr Compagnon

    Messages:
    2 051
    Inscrit:
    16 Février 2012
    Localité:
    F-76100 Rouen
    Profil denture couronne
    Bonsoir,

    Il me semble que les diamètre de tête et de pied sont inversés pour une denture intérieure (hauteur 1m et creux 1.25m), de plus il y a aussi un "raccord en creux" dans les coins des dents pour éviter ces interférences...

    Pour plus d'info la dessus il faudrait demander à un expert denture comme Méandre. :prayer:

    Cordialement,
    Bertrand
     
  3. Dodore

    Dodore Compagnon

    Messages:
    6 642
    Inscrit:
    27 Octobre 2008
    Localité:
    F-69400 villefranche sur saone
    Profil denture couronne
    Bonsoir
    T'es ch...t je vivais heureux avant , je ne m'étais jamais posé de question a ce sujet:-D:-D
    Une remarque tout de même
    Le petit pignon a bien des dents exter
    Mais la couronne à des dents inter et il ne me semble pas que le profil de ces dents soit le meme que sur un pignon classique et aparement tu as pris un profil exter pour le mettre a l'intérieur de ta couronne
    Il doit certainement y avoir quelque part une inversion de profil
     
  4. electroremy

    electroremy Nouveau

    Messages:
    46
    Inscrit:
    23 Mars 2014
    Profil denture couronne
    Bonjour,

    sur l'image, les trois engrenages dessinés par mon programme sont tous des engrenages à denture externe classique

    l'engrenage du milieu n'est pas une couronne, j'ai fait cette image pour mettre en évidence qu'une couronne n'est pas juste un engrenage "en creux"

    j'ai continué mes recherches et j'ai trouvé un super site avec des cours en ligne : http://www.raymondnicolet.ch/telechargement.htm; le volume n°3 traite des engrenages en détail (environ 400 pages) avec de la chance la réponse à mes questions se trouve probablement dedans :)

    si je trouve je publierais le code permettant de calculer tout types d'engrenages ici :)

    A+
     
  5. gaston48

    gaston48 Compagnon

    Messages:
    6 208
    Inscrit:
    26 Février 2008
    Localité:
    59000
    Profil denture couronne
    Bonjour,
    Dans ton programme, ou se trouve le calcul de la développante s'il te plait ?
     
  6. electroremy

    electroremy Nouveau

    Messages:
    46
    Inscrit:
    23 Mars 2014
    Profil denture couronne
    Mon programme calcule chaque dent 'i' en plusieurs étapes, voici les grandes étapes (le code complet est dans mon premier post) :

    - Données du calcul :
    'ModuleE
    'NbDents
    'Alpha (par défaut 20°)
    'CoefDeport (par défaut 0)


    - calcul des autres paramètres :
    InvAlpha = Math.Tan(Alpha * DEG_TO_RAD) - Math.PI * Alpha / 180
    AlphaExt = RAD_TO_DEG * Math.Acos(NbDents * Math.Cos(Alpha * DEG_TO_RAD) / (NbDents + 2 + 2 * CoefDeport))
    RayonBase = ModuleE * NbDents * Math.Cos(Alpha * DEG_TO_RAD) / 2
    RayonCreux = ModuleE * ((NbDents / 2) - 1.25 + CoefDeport)
    DemiAngleBase = (90 / Math.PI) * ((Math.PI / NbDents) + 2 * InvAlpha)
    If NbDents < 41 Then
    RayonTangente = RayonCreux
    Else
    RayonTangente = RayonBase - 2
    End If


    - calcul de l'angle correspondant à la position de la dent n°i :
    A1 = i * 360 / NbDents + DebutAngle

    - courbe n°1 qui est la partie supérieure du profil gauche de la dent (t varie de 0 à 1 avec un pas définit par le nombre de points de la courbe, qui est faite de seguements de droites) :
    R = RayonBase / Math.Cos(t * AlphaExt * DEG_TO_RAD)
    Theta = (180 / Math.PI) * (Math.Tan(t * AlphaExt * DEG_TO_RAD) - Math.PI * (t * AlphaExt) / 180) - DemiAngleBase
    X = R * Math.Cos(Theta * DEG_TO_RAD)
    Y = R * Math.Sin(Theta * DEG_TO_RAD)


    - la courbe n°1 est tournée pour correspondre à la dent n°i
    tmp = X * Math.Cos(A1 * DEG_TO_RAD) - Y * Math.Sin(A1 * DEG_TO_RAD)
    Y = X * Math.Sin(A1 * DEG_TO_RAD) + Y * Math.Cos(A1 * DEG_TO_RAD)
    X = tmp


    - et enfin on fait la translation pour tenir compte de la position du centre de l'engrennage :
    X = CentreX + X
    Y = CentreY + Y


    - courbe n°2 qui est la partie inférieure du profil gauche de la dent - REMARQUE IMPORTANTE : pour certaines valeurs d'angle, cette courbe est de longeur nulle ; si on essaye de la calculer, le calcul donne un résultat abérant, dans le programme un test est fait pour ne pas calculer cette courbe
    R = RayonTangente + t * (RayonBase - RayonTangente)
    Theta = -DemiAngleBase
    X = R * Math.Cos(Theta * DEG_TO_RAD)
    Y = R * Math.Sin(Theta * DEG_TO_RAD)


    - la courbe n°2 est tournée pour correspondre à la dent n°i
    tmp = X * Math.Cos(A1 * DEG_TO_RAD) - Y * Math.Sin(A1 * DEG_TO_RAD)
    Y = X * Math.Sin(A1 * DEG_TO_RAD) + Y * Math.Cos(A1 * DEG_TO_RAD)
    X = tmp


    - et enfin on fait la translation pour tenir compte de la position du centre de l'engrennage :
    X = CentreX + X
    Y = CentreY + Y


    - pour obtenir le profil DROIT de la dent, on répète la même chose mais avec une symétrie suivant l'axe Y (donc au moment de convertir les coordonnées polaires en cartésiennes ont fait Y = - xxx au lieu de Y = + xxx)

    - il faut ensuite dessiner un arc de cercle au sommet de la dent, pour relier les deux profils droits et gauche :
    Ar = New Arc_2D(CentreX, CentreY, RayonTete, A1 + A2, A3 - A2, Fo, False) : Fo.Liste_Arcs_2D.Add(Ar)

    - et enfin un autre arc de cercle pour relier le pied de la dent i avec la dent i-1 :
    Ar = New Arc_2D(CentreX, CentreY, RayonPied, A4, A5 - A4, Fo, False) : Fo.Liste_Arcs_2D.Add(Ar)

    Les équations polaires des courbes n°1 et n°2 sont issues de la mise en équation d'un morceau de développante de cercle, avec la prise en compte du déport, de l'angle de pression et du nombre de dents. Ces équations sont utilisées en CAO / FAO quand on veut représenter précisément ou découper un engrenage. On avait calculé ces équations en cours, ça n'était pas simple et l'enseignement était fait en mode bourrage de crâne (il y a ~15 ans pour moi :P ) ; on peut aussi retrouver ces équations dans des tutoriels de logiciels CAO ou FAO.

    Par contre, ni en cours, ni dans les tutos, je n'ai vu la mise en équation du profil d'une couronne; dans mon manuel de mécanique, j'ai juste le dessin d'une couronne avec les différents diamètres et c'est tout.

    En fait, maintenant que je suis en train de créer un logiciel et que je commence à fabriquer des choses concrètes, je me rends compte que pas mal de cours expliquent la théorie mais pas jusqu'au bout, il manque souvent la dernière étape permettant de faire une application pratique.

    Ainsi, pour ce qui est des engrenages, très concrètement, avoir X=f(t) et Y=g(t) décrivant la forme d'une dent avec t allant de 0 à 1 est ce qu'il me faut mais beaucoup de livres et de cours ne donnent pas la réponse. Ils explique juste comment construite la développante de cercle avec une ficelle ou quelque chose qui s'en approche grossièrement point à point avec un compas, une règle et une équerre.

    C'est pour ça que je demande si quelqu'un sait le faire sur le forum :)

    Surtout qu'avec ce genre de choses très techniques c'est facile de croire qu'on a trouvé la bonne solution avec un dessin qui à l'air correct à l'écran... mais qui coince, qui a du jeu et/ou qui frotte trop une fois usiné :P

    Le cours que je viens de télécharger sur http://www.raymondnicolet.ch/ est beaucoup plus complet que tout ce que j'ai vu alors, je vais me plonger dedans. Mais si quelqu'un a la solution sur le forum qu'il n'hésite pas à la publier :)
     
  7. gaston48

    gaston48 Compagnon

    Messages:
    6 208
    Inscrit:
    26 Février 2008
    Localité:
    59000
    Profil denture couronne
    Merci beaucoup electroremy, je vais essayer d'approfondir à tête reposée. Tes équations sont reprises dans
    le Nicolet aussi il me semble. N'oublie pas de tester le logiciel Filengrène de Méandre. Il simule également
    les couronnes intérieures avec possibilité d'export en dxf pour comparer avec tes profils.

    fileng.jpg
    fileng2.jpg
     
    Dernière édition: 8 Mai 2015
  8. electroremy

    electroremy Nouveau

    Messages:
    46
    Inscrit:
    23 Mars 2014
    Profil denture couronne
    C'est quoi "le Nicolet" ?

    Le logiciel de Méandre à l'air pas mal du tout... et il est fait en VB6 (je développe en VB5 et en VB.NET) j'aimerais jeter un oeuil au code source :P

    A bientôt !
     
Chargement...

Partager cette page