Thông báo

Collapse
No announcement yet.

8051 - Master/Slave - chuẩn RS485

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • 8051 - Master/Slave - chuẩn RS485

    Bác nào có kinh nghiệm xin cho em hỏi 1 chút với việc tổ chức ghép nối thông qua VDK8051 dựa trên chuẩn RS485 như sau:

    Tổ chức ghép nối thu thập dữ liệu dựa trên chuẩn RS485. Hệ thống gồm 3 vi điều khiển 8051, đấu ghép theo cấu hình Master/Slave. Vi điều khiển Master có phối ghép LCD để hiển thị kết quả nhận được từ hai vi điều khiển Slave.
    Vi điều khiển Slave1 và Slave2 thiết kế làm bộ đếm tần số (mạch phát tần số dùng NE555)


    Mong nhận được trả lời sớm nhất...

  • #2
    Bác dùng con ds75176(rẻ) hoặc max485(đắt) để làm điều này. Mối một con 89 đi kèm 1 con ds75176, vậy hệ trên chỉ cần 3 con.

    Phần ghép nối cần 3 chân của VDK: TX,RX(bắt buộc) và một chân điều khiển Transmit/receiver(nên dùng cách này, tuy nhiên có thể ko dùng chân này thì dùng mạch đơn hài như: 555, 4538,74123 mắc thành). Trước khi truyền thì set chân này lên mức 1 rồi mới đẩy data vào bộ đệm truyền. Truyền xong hạ xuống mức 0 để nhận dữ liệu.

    Chân A,B của ds cần điện trở kéo lên nguồn và xuống GND để vừa định thiên vừa chống nhiễu.
    Điện trơ đầu cuối để khoảng 150 omh
    Tăng cao độ tin cậy nên mắc thêm các diot dập xung.
    Bác post sơ đồ lên đây, em sẽ góp ý về phần cứng và phần mềm cho vui.
    -------------------

    Comment


    • #3
      Giao thức truyền thông giữa Master/Slave qua chuẩn RS485

      Cho em hỏi chút: khi VDK Master gửi yêu cầu truyền dữ liệu đến VDK Slave thì cấu trúc bức điện của yêu cầu sẽ như thế nào.

      Tiên đây em cũng xin post file mạch anh BinhAnh giúp

      Comment


      • #4
        Nội dung của bức điện yêu cầu mà VDK Master gửi cho Slave gồm 1 Bit Start, địa chỉ của Slave, bit Dir (hướng) và gì nữa...

        Comment


        • #5
          Nguyên văn bởi hieutq
          Nội dung của bức điện yêu cầu mà VDK Master gửi cho Slave gồm 1 Bit Start, địa chỉ của Slave, bit Dir (hướng) và gì nữa...
          Bước 1: bạn phải tìm hiểu và lập trình tốt chuẩn RS232 đã, khi đã nắm được rồi thì mọi việc trở nên vô cùng đơn giản, bạn đã thành công tới 80%.
          Bước 2: sau khi hoàn tất phần cứng(sơ đồ bác BA cung cấp cho bác), thì còn gì nữa đâu nhỉ, bạn đã thành công thêm 10% nữa rồi, còn 10% còn lại.
          Bước 3: Phần mềm hoàn toàn bạn quy định. Một cách phổ biến nhất thì làm như sau:
          Gọi địa chỉ của Master là MT, địa chỉ của Slaver lần lượt là SL1 và SL2. Và một quy định chung được đặt ra: trong thời gian truyền thì bật chân đk hướng lên 1, truyền xong thì gán = 0. Cụ thể:
          Hướng = 1;(chuẩn bị nói lên bus)
          Truyền dữ liệu;
          Chờ truyền xong toàn bộ dữ liệu;
          Hướng = 0;(nghe trên bus).
          Và như thế đương nhiên thì thời gian nói chiếm đại đa số.
          Cái này là bắt buộc và ko nói lại ở sau để cho cô đọng. Thực hiện như sau:
          Master: Truyền: SL1(byte1)+Lệnh(byte2).
          Tất cả SL đều nhận được, và tất cả chúng đều xử lý và nó so sánh byte đầu tiên với mã của nó, thì SL1 thấy đúng là mã của mình nên nó sẽ biết đây là MT yêu cầu mình làm điều gì đó, cho nên SL1 sẽ gửi trả lời:
          SL1: Truyền: SL1(byte1)+data(byte2, byte3...).
          Và tất cả các uC đều nhận được, nhưng chỉ MT lấy dữ liệu và xư lý vì nó biết dư liệu là của SL1 gửi về. Tiếp theo
          Master: Truyền: SL2(byte1)+Lệnh(byte2).
          Tất cả SL đều nhận được, và tất cả chúng đều xử lý và nó so sánh byte đầu tiên với mã của nó, thì SL2 thấy đúng là mã của mình nên nó sẽ biết đây là MT yêu cầu mình làm điều gì đó, cho nên SL2 sẽ gửi trả lời...
          và cứ lăp đi lặp lại:
          MT--->Sl1
          SL1--->MT
          MT---->SL2
          SL2---->MT
          MT--->Sl1
          SL1--->MT
          .....
          đây là cơ chế hỏi vòng

          Comment


          • #6
            Ngoài ra, cần một timerout để giải quyết vấn đề thời gian.
            Ví dụ:
            MT---->ST1+data
            Gửi xong bản tin này, nế say thời gian t, ko nhận được sự trả lời thì MT sẽ coi như ST1 bị lỗi, MT sẽ bỏ qua và lại tiếp tục truyền:
            MT---->ST2+data
            -------------------

            Comment


            • #7
              Master/Slave là cách truy nhập mạng.Nếu như bạn muốn làm một hệ thống mở thì lên dùng một giao thức chuẩn mà ở đây tôi khuyên bạn lên dùng Modbus.Còn nếu như bạn tự xây dựng giao thức thì cũng không sao.Vì mạng của bạn có 1 Master và 2 Slave nên tất nhiên điều đầu tiên nghĩ đến là đánh địa chỉ cho chúng rồi.Địa chỉ của Slave có thể là địa chỉ chức do bạn gán cho trên mạch của slave hoặc có thể đặt thông qua Master.Trường thư 2 là mã hàm : Mã hàm là hành động mà Master ra lệnh cho Slave phải làm.Và trường thứ 3 là dữ liệu : là phần bổ xung cho mã hàm .Và tất nhiên không thể thiếu mã kiểm soat lỗi .Về mã kiểm soát lỗi bạn có 2 cách : Phát hiện lỗi sai thì bỏ qua khung tin đó ,hợac gửi trả thông điệp đòi gửi lại bản tin vừa rồi.Và cách 2 là tự sửa sai.Nếu như các thiết bị của các bạn cách nhau không xa thì các bạn dùng cách 1 còn nếu ở xa thì tất nhiên là cách 2 .Và nếu ơ xa nhau nhưng không đồi hỏi tính thời gian thực thì cũng nên dùng cách 1.Mẩu tin của bạn tất nhiên phải đặt trong một khung gồm kí tự bắt đaauf của mẩu tin và kí tự kết thúc .Đặc biệt quan trọng đó là tầng mã hóa dữ liệu trong mô hình OSI đó là các bạn phải quy định mã truyền đi là mã ASCII hay Binary (tốt nhất là truyền ASCII vì bạn có thể kiểm tra lỗi và nhiễu dễ dàng)
              (Ứng dụng-mã hóa dữ liêu- vật lý là 3 lớp cơ bản trong giao thức truyền tin công nghiệp)
              Last edited by vutricongbka; 05-12-2005, 21:17.

              Comment


              • #8
                Slave khi nhận được một khung tin kiểm tra địa chỉ nếu là của mình thì nó sẽ xử lý và gửi trả thông điệp cho Master
                Tốt nhất bạn hãy đọc về giao thức Modbus rất cơ bản và dễ học
                Sách tiếng việt: MẠng truyền thông công nghiệp của thầy hoàng minh sơn
                Tiếng anh: Trên mạng rất nhiều search với từ khóa : Modbus
                Nếu không liên hệ với mình ,mình sẽ tặng (sách hơi lớn không up lên đây được)
                Vutricongbka@yahoo.com

                Comment


                • #9
                  Đây là mạch thiết kê hoàn tất, các bác xem và cho em thêm ý kiếm bổ sung

                  Comment


                  • #10
                    Tiếp theo em xin các bác đóng góp cho em phần lập trình được kô. CÁm ơn các cao thủ đã cho em những góp ý hay.

                    Comment


                    • #11
                      Sơ đồ trên quá ổn rồi.
                      Phần lập trình mọi người đã góp ý rồi. Tốt nhất bác lập trình theo chuẩn 232 thành tháo thì đã được 95% công lực rồi. Sau đó post mã lệnh lên để mọi người góp ý
                      -------------------

                      Comment


                      • #12
                        Chuyen gi xay ra khi du lieu con Slave nay trung voi ma dia chi cua Slave khac? Vi the khi lap trinh khong bao gio de dieu do xay ra !
                        Thiết bị định vị ,hộp đen :

                        Comment


                        • #13
                          Hướng lập trình của tôi thế này, các bạn góp ý thêm nhé:
                          - Tổ chức giao thức:
                          +sử dụng UART, truyền thông nối tiếp, chế độ truyền nối tiếp là chế độ 3(UART 9bit),mỗi lần truyền tổng cộng 11 bit(9+bít start+bit stop)
                          +Địa chỉ của master: 01h(00000001b)
                          +Địa chỉ của slave1: 02h (00000010b)
                          +Địa chỉ của slave1: 03h (00000011b)
                          + Quy định cấu trúc bức điện: gồm 2 byte.
                          *Khi Master gửi yêu cầu đến slave1:
                          .byte1: 0 |8bit địa chỉ của slave1| 1 | 1
                          .byte2: 0 |8bit mã hóa yêu cầu gửi dũ liệu| 0| 1
                          *Khi master gửi yêu cầu đến slave2,tương tự:
                          .byte1: 0 |8bit địa chỉ của slave2| 1 | 1
                          .byte2: 0 |8bit mã hóa yêu cầu gửi dũ liệu| 0| 1
                          - Giả sử master gửi byte1 đến cả 2 slave, chỉ slave có địa chỉ trùng với địa chỉ trong byte1 mới bắt tay giao tiếp với master.Tiếp đó master gửi tiếp byte 2. slave sẽ giải mã hóa trong yêu cầu mà master gửi, thực hiện ngắt để đếm xung từ NE555,sau đó gửi lên đường truyền.Khi gửi, đầu tiên nó gửi byte chứa địa chỉ của master, sau đó nó gửi byte tiếp theo chứa dữ liệu...
                          ****Như vậy có ổn không?

                          Comment


                          • #14
                            Như sau đơn giản hơn :
                            + UART tùy theo, miễn là MT và SL có thể Set được như nhau
                            + Chu kỳ bus là T
                            MT chỉ cần gửi 1 byte duy nhất để phân biệt 2 SLAVE :
                            ví dụ byte= 1-> SL1; byte=2 -> SL2
                            Các Slave sẽ gửi 2 byte dữ liệu: data1, data2
                            Hoạt động:
                            1. MT (1) -> SL1, SL2
                            2. SL1 (data1, data2) -> MT (SL2 bỏ qua 2 byte)
                            3. MT Delay T/2
                            4. MT (2) -> SL1, SL2
                            5. SL2 (data1, data2) -> MT (SL1 bỏ qua 2 byte)
                            6. MT Delay T/2
                            7. Quay lại bước 1

                            Comment


                            • #15
                              Master không cần địa chỉ
                              Bạn không có byte khởi đầu và byte kết thúc như thế có nghĩa là bạn hoàn toàn có thể đọc nhầm một bản tin đểu.(cứ 2 byte được coi là một bản tin mà)

                              Comment

                              Về tác giả

                              Collapse

                              hieutq Tìm hiểu thêm về hieutq

                              Bài viết mới nhất

                              Collapse

                              Đang tải...
                              X