Đang tải...

Hỏi-Đáp Câu hỏi cần bàn luận: số răng đĩa xích?

Thảo luận trong 'Chi tiết máy và đồ án' bắt đầu bởi vandu@mec, 5/2/17.

View Users: View Users
  1. vandu@mec

    vandu@mec Thành viên mới

    Tham gia ngày:
    5/2/17
    Bài viết:
    3
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Đặt vấn đề: Không có câu trả lời tuyệt đối chính xác. Mời các bạn chia sẻ những thông tin hữu ích có thể trả lời sao cho có lý nhất. Người trả lời có lý nhất sẽ được nhận phần thưởng có giá trị.

    Câu hỏi: "Tại sao thường chọn số răng đĩa xích lẻ và số mắt xích chẵn?".

    Bàn luận:

    Câu hỏi này có lý không nhỉ? Chắc là có.

    Trong nhiều bài giảng Chi tiết máy, có viết: "Số răng đĩa xích nên lấy số lẻ để cho mỗi răng của đĩa xích sẽ ăn khớp lần lượt với tất cả các mắt xích và do đó răng của đĩa xích sẽ mòn đều hơn."
    Nghe khó hiểu quá; bạn có thể giải thích rõ hơn không? Có thể tách thành các câu hỏi nhỏ để trả lời như sau:
    - Tại sao răng đĩa lẻ lại có thể ăn khớp lần lượt với các mắt xích (có số mắt chẵn)?
    - Có thể bằng cách nào đó mô phỏng sự "ăn khớp lần lượt" này không?
    - Nếu mỗi răng đĩa có thể ăn khớp lần lượt với tất cả các mắt xích, tại sao khi đó răng đĩa lại mòn đều hơn?

    Trong Tiêu chuẩn Việt Nam TCVN 6374 :1998 cũng viết:
    1. Phạm vi áp dụng
    Tiêu chuẩn này qui định yêu cầu kỹ thuật áp dụng cho xích con lăn chính xác bước ngắn một dãy, nhiều dãy và đĩa xích tương ứng dùng trong truyền động cơ khí, bao gồm: kích thước, dung sai, đo chiều dài, tải trọng thử và độ bền kéo nhỏ nhất.
    Tiêu chuẩn này không áp dụng cho xích xe đạp và xích xe máy.

    4.9. Số răng
    Số răng đĩa được qui định từ 9 đến 150, trong đó dãy ưu tiên dùng là: 17, 19, 21, 23, 25, 38, 57, 76, 95 và 114.
    <Nguồn: Tiêu chuẩn Việt Nam TCVN 6374:1998 về Xích con lăn chính xác bước ngắn và đĩa xích>

    (có một số là chẵn trong dãy ưu tiên?)

    Các bạn chia sẻ ý kiến nhé. Cách giải thích nào có lý nhất, được nhiều người tán đồng sẽ được thưởng.
     
    Meomeo thích bài này.
  2. Meomeo

    Meomeo Thành viên mới

    Tham gia ngày:
    3/2/17
    Bài viết:
    28
    Điểm thành tích:
    3
    Giới tính:
    Nam
    It is an interesting topic. Thank Prof. Du
     
  3. duycop

    duycop Thành viên chăm chỉ

    Tham gia ngày:
    20/1/17
    Bài viết:
    137
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Minh hoạ bằng Paint một cách trực quan như sau:
    upload_2017-2-6_13-24-13.png
    Giả sử có dây xích 16 mắt, các mắt xích đánh số từ 1 đến 16 màu đỏ trong hình tròn xanh nhỏ
    Chỉ quan sát đĩa số răng lẻ bên trái (đĩa màu xanh) có số răng lẻ = 5
    Quan sát răng số 1 (vị trí 12h, đánh số 1 màu vàng), quay ngược chiều kim đồng hồ
    Trạng thái bắt đầu quan sát như hình: răng số 1 đang ăn khớp với mắt xích số 1.
    Khi quay ngược chiều kim đồng hồ răng số 1 sẽ tiếp tục ăn khớp với mắt xích số 12, 7, 2, 13, 8, 3, 14, 9, 4, 15, 10, 5, 16, 11, 6
    và sau đó răng số 1 lại quay tới mắt số 1, rồi lặp lại quá trình trên.

    Vậy là răng số 1 của đĩa có số răng lẻ đã ăn khớp với tất cả 16 mắt xích. Trực quan thấy đúng trong trường hợp này!

    Giờ quan sát đĩa bên phải màu đỏ, có 4 răng.
    Quan sát răng số 4, theo ảnh đang ăn khớp với mắt xích số 10
    Trạng thái tiếp theo (quay ngược chiều kim đồng hồ) sẽ ăn khớp với:
    6, 2, 14, 10, rồi lại 6, 2, 14, 10 => răng số 4 trên đĩa răng chẵn không ăn khớp với tất cả các mắt của xích


    Với 1 ví dụ khác, cũng dùng paint: xích có 10 mắt, thì thấy răng số 1 chỉ ăn khớp với mắt số 1 và số 6, KHÔNG PHẢI TẤT CẢ
    upload_2017-2-6_13-59-12.png
    Có vẻ số mắt xích là bội của số răng thì không ổn

    Thử nghiệm trên máy tính rút ra kết luận:
    GCD(số răng, số mắt) == 1 thì OK
    GCD(số răng, số mắt) <> 1 thì NOT OK

    code kiểm tra trên C++:
    Mã:
    //kiem tra su an khop cua banh rang va xich
    //author: Do Duy Cop
    //date: 06/02/2017
    #include <iostream>
    using namespace std;
    int gcd(int a, int b) {
        int temp;
        while (b != 0) {
            temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }
    int main() {
        const int max = 500;
        int rang, mat;
    
        int init = 1;
    
        int * mark = new int[max + 1];
        int countERROR = 0;
        for (rang = 1; rang < max; rang++)
            for (mat = rang + 1; mat < max; mat++) {
                //reset mark
                for (int i = 1; i <= mat + 1; i++) mark[i] = 0;
                //check
                int check = 1; //temp ok
                int g = gcd(rang, mat);
                for (int i = 0; i < mat; i++) {
                    int a = init + i * rang;
                    while (a > mat) a = a - mat;
    
                    if (mark[a] == 0) mark[a] = 1;
                    else {
                        //dùng lai vi tra da an khop: => not OK
                        ///cout<<rang<<","<<mat<<": NOT OK. GCD="<<g<<"\n";
                        if (g == 1) countERROR++;
                        check = 0;
                        break;
                    }
                }
                if (check) { //OK
                    //cout<<rang<<","<<mat<<": OK. GCD="<<g<<"\n";
                    if (g != 1) countERROR++;
                }
            }
        cout << ((countERROR > 0) ? "LY THUYET GCD SAI" : "LY THUYET GCD DUNG");
    }
    Code php:
    PHP:
    function gcd($a$b) {
        while (
    $b != 0) {
            
    $temp $a $b;
            
    $a $b;
            
    $b $temp;
        }
        return 
    $a;
    }

    $max 500;
    $init 1;
    $count=0;
    for (
    $rang 1$rang $max$rang++)
        for (
    $mat $rang 1$mat $max$mat++) {
            
    $mark = array();
            for (
    $i 1$i <= $mat 1$i++) $mark[$i] = 0;
            
    $check 1//temp ok
            
    $g gcd($rang$mat);
            for (
    $i 0$i $mat$i++) {
                
    $a $init $i $rang;
                while (
    $a $mat$a $a $mat;
                if (
    $mark[$a] == 0$mark[$a] = 1//đánh dấu dùng mắt xích này
                
    else {
                    
    //dùng lại mắt xích đã đánh dấu => NOT OK
                    //echo "($rang, $mat) NOT OK. GCD=$g<br>";
                    
    if($g==1)$count++;
                    
    $check 0;
                    break;
                }
            }
            if(
    $check){
               
    //echo "($rang, $mat) OK. GCD=$g<br>";
               
    if($g!=1)$count++;
             }
        }
    echo (
    $count>0)?"LÝ THUYẾT GCD SAI":"LÝ THUYẾT GCD ĐÚNG";
     
  4. duycop

    duycop Thành viên chăm chỉ

    Tham gia ngày:
    20/1/17
    Bài viết:
    137
    Điểm thành tích:
    63
    Giới tính:
    Nam
    GCD của 2 hay nhiều số là ước số chung lớn nhất của chúng

    ví dụ như hình bên dưới: gcd(2*2* 2*2*3, 3*5* 2*2*3) = 2*2*3 = 12

    upload_2017-2-6_15-26-23.png
     
    Chỉnh sửa cuối: 6/2/17
  5. duycop

    duycop Thành viên chăm chỉ

    Tham gia ngày:
    20/1/17
    Bài viết:
    137
    Điểm thành tích:
    63
    Giới tính:
    Nam
    vậy khi GCD(số răng, số mắt xích) == 1 thì Mỗi răng sẽ ăn khớp với tất cả các mắt xích

    Mỗi răng lại có góc lệch, độ to nhỏ, độ nhám, ma sát... khác nhau một chút. Các mắt xích cũng thế.
    Mỗi răng sẽ ăn khớp với tất cả các mắt xích thì răng sẽ mòn đều, vì răng nào cũng chịu lực ma sát với tất cả các mắt xích.
    Như vậy mỗi răng sẽ cùng chịu số lực ma sát gần như nhau, nên chúng sẽ mòn đều nhau!
     
  6. duycop

    duycop Thành viên chăm chỉ

    Tham gia ngày:
    20/1/17
    Bài viết:
    137
    Điểm thành tích:
    63
    Giới tính:
    Nam
    Trong bài đăng phía trên có nói đến số răng là 114 mà không đề cập đến GCD nên có thể có bạn sẽ thấy mâu thuẫn với công thức "chọn số răng đĩa xích lẻ và số mắt xích chẵn", để ý kỹ thì thấy công thức còn có chữ THƯỜNG: "thường chọn số răng đĩa xích lẻ và số mắt xích chẵn"

    sử dụng kết quả từ máy tính thì khi số răng là 114 (chẵn) thì số mắt xích phải chọn là:
    Code C++ dùng để liệt kê các cặp giá trị trên là:
    Mã:
    //kiem tra su an khop cua banh rang va xich
    //author: Do Duy Cop
    //date: 06/02/2017
    #include <iostream>
    using namespace std;
    int gcd(int a, int b) {
        int temp;
        while (b != 0) {
            temp = a % b;
            a = b;
            b = temp;
        }
        return a;
    }
    int main() {
        const int max = 500;
        int rang, mat;
    
        int init = 1;
    
        int * mark = new int[max + 1];
        int countERROR = 0;
        rang=114;
            for (mat = rang + 1; mat < max; mat++) {
                //reset mark
                for (int i = 1; i <= mat + 1; i++) mark[i] = 0;
                //check
                int check = 1; //temp ok
                int g = gcd(rang, mat);
                for (int i = 0; i < mat; i++) {
                    int a = init + i * rang;
                    while (a > mat) a = a - mat;
    
                    if (mark[a] == 0) mark[a] = 1;
                    else {
                        //dùng lai vi tra da an khop: => not OK
                        //cout<<rang<<","<<mat<<": NOT OK. GCD="<<g<<"\n";
                        if (g == 1) countERROR++;
                        check = 0;
                        break;
                    }
                }
                if (check) { //OK
                    cout<<rang<<","<<mat<<": OK. GCD="<<g<<"\n";
                    if (g != 1) countERROR++;
                }
            }
        cout << ((countERROR > 0) ? "LY THUYET GCD SAI" : "LY THUYET GCD DUNG");
    }
     
  7. vandu@mec

    vandu@mec Thành viên mới

    Tham gia ngày:
    5/2/17
    Bài viết:
    3
    Điểm thành tích:
    3
    Giới tính:
    Nam
    Cám ơn cách giải thích cụ thể và minh họa rất trực quan của thầy Cốp. Mọi người tiếp tục chia sẻ ý kiến nhé.
     

Chia sẻ trang này