Thông báo

Collapse
No announcement yet.

PID điều chỉnh nhiệt độ lò điện

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

  • PID điều chỉnh nhiệt độ lò điện

    Chào các bạn.
    Mình đang làm về PID điều khiển nhiệt độ sử dụng AT89C51. Các bạn có thể chỉ giáo cho tôi mấy chiêu về PID được không.

    Tôi đã viết PID trên C và:

    Phương trình sai phân của PID số được viết dưới dạngsai phân sau:
    U(i+1) = Kp*e + Kd* [e(i+1)-e(i)]/Ts + Ki*Se(i)*Ts

    Ở đây: e là sai số.
    Ts là thời gian lấy mẫu.
    U là đầu ra.
    Vấn đề là ở chỗ góc mở a cho Triac của bộ tạo nhiệt.
    Ta có a nằm trong khoảng 0o đến 180o.
    Khi đó nhiệt độ đầu ra tương ứng là toout = Tmax¸ 0.
    Trong lập trình thì góc mở a tương ứng với thời gian trễ của góc mở so với tín hiệu đồng pha được phát hiện bởi ngắt ngoài.
    Do đó a = 0o¸ 180o tương ứng a = 0 ¸ 10000ms (ở đây tần số công nghiệp là 50Hz).

    Vấn đề là mình không tìm được mối quan hệ giữa đầu ra của PID là U và góc mở Triac a.

    Mình có suy nghĩ như thế này không biết ý các cao nhân thế nào:
    Tức là ứng với giá trị nhiệt độ đặt là td thì ta có góc mở là ad. Như vậy góc mở tại thời điểm i là:
    a(i) = ad - au.
    trong đó au = f(U).
    Vấn đề là hàm f(U) xác định như thế nào?

    Mình chưa làm thực tế về PID bao giờ nên bỡ ngỡ quá. Các bạn chỉ cho mình mấy chiêu được không.

    Mình cảm ơn anh nha!

    Chào.
    Chúc vui vẻ.

  • #2
    Công thức bạn đưa ra là đúng rồi đấy. Nhưng tôi thấy bạn chưa hiểu rõ về PID vì vậy bạn nên tìm mua sách mà học PID cho cẩn thận (cái món PID này tưởng dễ chứ thực ra khó phết đấy). Còn về góc mở a thì bạn cho một biến đếm thời gian như bạn đã ghi ấy. nghĩ là góc mở 0 tương ứng với 0 và góc mở 180 độ tương ứng với 10000 us (micro giây). Giá trị trả về của bộ PID bạn cho qua bộ chặn trên và chặn dưới. Nghĩa là Umax=10000 và Umin = 0. Sau đó gán Biến đếm thời gian = U là xong.
    Việc điều chỉnh ổn định điều khiển phải được thực hiện qua các thống số là: Hệ số khuếch đại Kp, Hằng số tích phân Ti và hắng số vi phân Td.
    Chúc bạn thành công.
    AFH

    Comment


    • #3
      Tôi nghĩ không cần lập quan hệ Góc mở ~ Nhiệt độ.
      Ta điều khiển theo quan niệm: Còn sai, thì còn điều chỉnh. Nếu lò nhiệt có tải (tiêu thụ năng lượng nhiệt) thì còn phải thay đổi góc mở. Thậm chí có khi mở hết 180 độ mà bạn vẫn không đạt được nhiệt độ mong muốn đấy, do đó không thể có quan hệ Góc mở ~ NHiệt độ lò. Quan hệ này chỉ có khi nhiệt lượng tiêu thu là không đổi hay quá nhỏ. Tại một thời điểm, đang mở a độ. Nếu ta nhận được sai số nhiệt độ là e, tính ra gia số góc mở theo PID (Delta a), sau đó góc mở mới = a + delta a. Tiếp tục tìm sai lệch... Vấn đề tìm ra bộ thông số Kp, Ki, Kd. Và với hệ rời rạc này, ta chọn tiếp tham số thứ 4 là Ts - Thời gian giữa 2 lần lấy mẫu.
      Sudden wake-up at night
      Open window for my teacher!

      Comment


      • #4
        Bác AFH ơi đúng là PID phức tạp thật, bác có nói tới bộ chặn trên và bộ chặn dưới, vậy nó là gì vậy, bác chỉ rõ cho tôi được không.

        Cám ơn bác.

        To Amateur: Bác có thể nói rõ cách tính delta a như thế nào được không, tôi đang mắc chỗ đó đó.

        Cảm ơn nha.




        Chúc vui vẻ!

        Comment


        • #5
          Chặn trên và dưới nghĩa là các thành phần tỷ lệ, vi phân và tích phân, rồi góc mở đều có giới hạn. Nếu nó vượt qua thì gán nó bằng cái chặn gần nhất. Ví dụ:
          if(p>P_MAX) p=P_MAX;
          Biểu thức liên hệ giữa góc mở và công suất thì chỉ là biểu thức tương đối. Ví dụ bạn chia ra 1000 mức công suất đều nhau thì ứng với mức 1---góc mở 1, mức 2---góc mở 2.... công suất mức 1000--- góc mở 1000. 1000 mức công suất đều nhau nhưng 1000 mức góc mở lại phi tuyến vì do hàm sin. Bạn dùng exel mà suy ra.
          Thực tế nếu bạn dùng uC thì có thể dùng timer của nó để làm như bác AFH nói. Và có thể chỉ chia mức công suất thành vài đoạn rồi nội suy ra thời gian mở để tiết kiện Flash
          -------------------

          Comment


          • #6
            bạn có thể hiểu chặn trên và chặn dưới nghĩa là chỉ cho giá trị điều khiển nằm trong 1 khoảng nào đấy thôi. Một ví dụ là nếu bộ điều khiển của bạn kô thể đạt giá trị đặt -> bộ tích phân cứ tiếp tục tăng -> giá trị điều khiển tăng liên tục -> tràn bộ tích phân hoặc tràn giá trị điều khiển (cái này bạn rõ nhất khi khai báo kiểu CHAR và giá trị 255 + 1 = 0 do tràn só mà)
            Nếu bạn dùng PID thì kô cần quan tâm đến chia đoạn công suất làm gì. Cứ còn sai lệhc thì còn tăng giá trị điều khiển đến khi nào U = U max hoặc sai lệch = 0 thì mới thôi.
            Chúc thành công.
            AFH

            Comment


            • #7
              Nguyên văn bởi AFH
              Nếu bạn dùng PID thì kô cần quan tâm đến chia đoạn công suất làm gì. Cứ còn sai lệhc thì còn tăng giá trị điều khiển đến khi nào U = U max hoặc sai lệch = 0 thì mới thôi.
              Chúc thành công.
              AFH
              Vậy là bác điều khiển định tính à? Vậy làm sao chính xác được nhỉ?
              Ví dụ: Công suất p =k*e
              Giả sử k=100, e=4---> cong suat mức là 400
              e=3-->công suất là mức 300.
              Vậy nghĩa là phải chia mức chứ?
              Hơn nữa nếu điều khiển theo thời gian thì chu kỳ bán sin điện lưới 10ms.
              Nêu chia đều 256 mức thì mức i là (10-i/256)ms.
              Vậy nếu chia đều như thế này thì sẽ rất thiếu chính xác bởi lẽ những mức cận 0ms và 10ms sẽ rất bé, còn các mức ở giữa gần 5ms sẽ rất thô(do biên độ). Bởi vậy ChiBang nói đúng.
              Last edited by PPIICC; 19-12-2005, 20:32.

              Comment


              • #8
                PID nó tự tính cho mình, chả cần chia khoảng công suất làm gì. Thế mới gọi là PID xịn chứ.
                AFH

                Comment


                • #9
                  Nguyên văn bởi AFH
                  PID nó tự tính cho mình, chả cần chia khoảng công suất làm gì. Thế mới gọi là PID xịn chứ.
                  AFH
                  Nghe bí hiểm quá...
                  p ở trên tỷ lệ với góc mở, chúng nó là một, chia khoảng góc mở tức là chia khoảng công suất. Công suất mình ko cần biết đích xác bao nhiêu mà chỉ cần biết % của nó và nó ứng với góc mở.
                  Ví dụ: 50 % công suất thì ứng góc mở tại 5ms.
                  30% công suất ứng với góc mở khoảng 6.5ms chẳng hạn.
                  Vậy dùng một bảng tra hay một hàm để liên hệ giữa góc mở và % công suất.
                  Còn PID chỉ là công thức liên hệ giữa % công suất với nhiệt độ đặt, các nhiệt độ đo.
                  Nói cách khác
                  %công suất ~ f(Tset,Tdo)

                  Comment


                  • #10
                    bạn cần học thêm về PID thì sẽ thấy là chỉ cần biết giải điều khiển (ví dụ như góc mở anpha thì là từ 0 độ đến 180 độ) mục đích là để giới hạn giá trị điểu khiển trong khoảng đó, ngoài ra thì PID nó làm cho mình hết. Thế mới hay. Để PID có chất lượng tốt thì cần quan tâm đến 4 thông số là: Kp, Ti, Td, và Ts.
                    AFH

                    Comment


                    • #11
                      Bạn PII... có một chút nhầm lẫn. Góc mở a sẽ có quan hệ với dòng điện qua tải (điện trở nhiệt), chứ không có quan hệ với nhiệt độ lò. Vì ta không biết được vật cần sấy trong lò sẽ tiêu thụ bao nhiêu nhiệt lượng, sự mất nhiệt qua thành lò là bao nhiêu... VÌ vậy, nếu tôi mở góc a chưa nóng, tôi tiếp tục tăng a+a1, nếu chưa được, tôi lại tăng thêm một lượng a2... Thậm chí để rã đông tảng thịt bò Úc, có khi mở hết cả chu kỳ dòng điện. Chính thế nên cần PID. Nếu biết chính xác nhiệt độ với độ mở thì chẳng cần PID (Ví dụ như điều chỉnh độ sáng của bóng đèn, k0 cần PID). Còn PID thế nào, nên đọc sách. Mỗi người sẽ tìm ra một cách cụ thể, đôi khi là bí quyết.

                      BẠn mumoi, cái U(i+1) của bạn sẽ là gia số của góc mở, vấn đề là bạn dò tìm ra các hệ số Kp, Ki, ... cho phù hợp. Khi tính ra, đơn giản cho nó là độ mở luôn. Nếu thấy quá lớn, tìm hệ số Kp, Ki... để giảm xuống. Đúng là phải chặn, để tránh dao động. Nôm na, khi thấy xe giảm tốc độ, phải tăng ga, nhưng theo kinh nghiệm về chiếc xe của mình, sẽ tìm ra mức độ hạn chế sự tăng/giảm ga để tránh bị giật cục.
                      Sudden wake-up at night
                      Open window for my teacher!

                      Comment


                      • #12
                        Ko nhầm đâu bạn ạ. Vì mình ko phải dân tự động hóa nên diễn đạt có thể ko đúng từ ngữ lắm.
                        Góc mở có quan hệ với nhiệt độ của lò, chắc chắc chứ. Nếu nói một các thô thiển, nếu nhiệt độ lò chưa bằng nhiệt độ đặt thì góc mở sẽ điều chỉnh và tính toán lại để thay đổi công suất. Việc điều chỉnh đó như thế nào là phụ thuộc vào các đại lượng P,I,D.
                        Nói tóm lại:
                        -Góc mở và % công suất là một biểu thức phụ thuộc vào nhau. Dùng bảng tra để tìm ra cái này.
                        -Tính được % công suất theo biểu thức PID dựa vào các thông số: T đặt, T đo(T1,T2... T hiện tại), Ki,kp,kd. Sau khi tính được mức công suất(hay dải công suất, hay % công suất) thì dùng bảng tra để tra ngược trở lại tìm ra góc mở tương ứng với % công suất đó.
                        To AFH: PID mình có làm rồi, nói đúng hơn đã làm PI. Lúc đầu có khó khăn đôi chút, nhưng rồi sau nhờ có sư phụ mách nước nên hiểu được và lập trình được. Độ phân giải của ADC là 0.1 độ thì mình khống chế sai số được 0.2-0.3 độ thì ngon ơ. Nhưng khó cái là chỉnh kp,ki rất mất thời gian.
                        Luôn tiện đây mình nói vê cách chỉnh Kp,ki=1/Ti mọi người góp ý kiến nhé:
                        -Bước 1: cho ki=0,chỉnh Kp tăng dần:=1 quan sát một quá trình, =2 rồi quan sát.... =i rồi quan sát...
                        Giả sử khi ki=a, nhiệt độ chưa vọt lố, nhưng ki=a+1 thì vọt lố(nhiệt độ tăng quá nhiệt độ đặt tại thời điểm nào đó). Vậy giá trị ki=a được chấp nhận.
                        -Bước 2: ki=a, rồi ki=1 quan sát, = 2 quan sát... Ki càng nhỏ thì ổn định nhưng thời gian bám lâu. Vậy chỉnh ki đến b, rròi b+1, nếu b+1 bị vọt lố mà b ko bị vọt lố thì giá trị b được lưu lại
                        -Bước 3: đặt kp=a,ki=b. Ấn nút chạy

                        Comment


                        • #13
                          Gửi bạn PCIICC
                          Bạn mua sách lý thuyết điều khiển tuyến tính của thầy Nguyễn Doãn Phước về đọc nhé. Trong đó nói rõ cách xác định tham số PID đó.
                          Tóm lại là bạn chưa hiểu rõ về PID (tớ nói bạn đừng buồn và đừng giận). Bạn cần học PID cho bài bản để tránh những hậu quả kô ngờ. Thiệt đó, nếu kô tin lời tôi, rồi một ngày bạn sẽ nếm trải điều này. Nhất là khi bạn thiết kế PID cho động cơ. Tin hay kô thì tùy.
                          Chúc bạn thành công
                          AFH

                          Comment


                          • #14
                            Cảm ơn lời khuyên của bạn. Bạn có thể chỉ rõ một số vấn đề sai sót của mình được ko? vì mình có đọc một số quyển rồi, và thưch tế thì đã làm được, nhưng có thể gặp một số trường hợp ko ngờ nhưng chưa gặp như bạn nói.

                            Comment


                            • #15
                              Vẫn nhầm 2*PIC ơi. Góc mở và công suất thì OK. Công suất và nhiệt độ thì lại khác. NHiệt độ phụ thuộc vào cân bằng nhiệt lượng trao đổi giữa lò và vật tiêu thụ nhiệt.
                              Cũng như độ mở tay ga tỷ lệ với công suất động cơ, như k0 tỷ lệ với tốc độ xe. Tốc độ phụ thuộc tải trọng, độ dốc đường, tốc độ gió...
                              Các bước lựa chọn thì cứ theo sách, tôi làm rồi, ổn đấy.
                              Sudden wake-up at night
                              Open window for my teacher!

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X