Bài tập dài môn điều khiển số

Giới thiệu về hệ thống điều khiển số động cơ điện một chiều. 1. Sơ đồ cấu trúc hệ điều khiển số: Ngμy nay các hệ thống điều khiển số (Digital Control Systems) được sử dụng rất rộng dãi trong nhiều lĩnh vực của đời sống nhất lμ các quá trình tự động hoá trong công nghiệp. Hệ điều khiển số thực chất lμ sử dụng máy tính (computer) kết hợp với mạch ngoại vi để thực hiện các nhiệm vụ điều khiển nμo đó. Chúng đóng một vai trò rất quan trọng trong việc điều khiển các quá trình công nghệ, nơi đòi hỏi phải có độ chính xác rất cao. Việc sử dụng máy tính lμm một thiết bị điều khiển (controller) đã sớm ra đời trong những năm của thập kỷ 80 vμ ngμy cμng phát triển bởi sự hiệu quả vμ độ tin cậy cao của nó. Nhiệm vụ của máy tính trong hệ thống lμ nhận sự sai khác giữa tín hiệu đặt với tín hiệu phản hồi ở dạng số vμ thực hiện việc tính toán để đưa ra tín hiệu điều khiển cơ cấu chấp hμnh. Quá trình xử lý bên trong máy tính có thể lập trình được để đưa ra tín hiệu điều khiển phù hợp nhằm lμm chấtượng của hệ thống đạt được như mong muốn. Các máy tính còn có thể xử lý với nhiều đầu vμo, do đó một hệ thống điều khiển số thường lμ một hệ thống đa biến. Quá trình xử lý vμ điều khiển trong hệ thống hoμn toμn sử dụng tín hiệu số (Digital), vì vậy để giao tiếp với ngoại vi bằng tín hiệu tương tự (Analog) cần phải có các mạch chuyển đổi từ số sang tương tự vμ ngược lại. Để thực hiện điều đó ta dùng hai bộ biến đổi ADC (Analog to Digital Converter) vμ DAC (Digital to Analog Converter). Bộ ADC có nhiệm vụ biến tín hiệu tương tự từ thiết bị ngoại vi, cơ cấu chấp hμnh thμnh tín hiệu số cung cấp giá trị phản hồi đầu vμo cho quá trình tính toán để đưa ra thuật toán điều khiển. Bộ DAC có nhiệm vụ nguợc lại lμ biến tín hiệu điều khiển dạng số sang tín hiệu tuơng tự cung cấp cho cơ cấu chấp hμnh bên ngoμi. Vì vậy sơ đồ khối của một hệ thống điều khiển số có dạng:

pdf55 trang | Chia sẻ: lvcdongnoi | Lượt xem: 2729 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài tập dài môn điều khiển số, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
é: ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- H×nh 15: §Æc tÝnh qu¸ ®é cña hÖ thèng khi ch−a cã hiÖu chØnh. - ChØnh ®Þnh l¹i c¸c th«ng sè bé PID cho ®Õn khi hÖ ®¹t chÊt l−îng tèt: + Víi c¸c th«ng sè t×m ®−îc: KP = 0,00274; KI = 0,000054/0,005 = 0,0108; KD = 0,098.0,005 = 0,0005; + §Æc tÝnh qu¸ ®é cña hÖ: ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- H×nh 16: §Æc tÝnh qu¸ ®é cña hÖ khi ®· cã hiÖu chØnh. Qua ®−êng ®Æc tÝnh qu¸ ®é ta thÊy chÊt l−îng cña hÖ thèng ®· tèt h¬n rÊt nhiÒu so víi tr−íc khi ®iÒu chØnh: + Thêi gian qu¸ ®é: 1,4 s. + §é qu¸ ®iÒu chØnh: 0,8%. Nh− vËy th«ng sè cña bé ®iÒu khiÓn PID sè cÇn t×m lμ: KP = 0,00274; KI = 0,0108; KD = 0,0005; vμ cã hμm truyÒn ®¹t: )1( 0,098 + 0,09526.z0,002767.z )1.(098,0 )1(2 )1.(0,000054 0,00274)( 2 − += −+− ++= zz z z z zzWPID II. Tæng hîp hÖ thèng víi bé ph¶n håi tr¹ng th¸i: 1. Giíi thiÖu ph−¬ng ph¸p: Qua qu¸ tr×nh t×m th«ng sè bé ®iÒu khiÓn PID ta thÊy r»ng ph−¬ng ph¸p nμy cã nhiÒu nh−îc ®iÓm nh−: viÖc tæng hîp vμ thiÕt kÕ phøc t¹p, qu¸ tr×nh t×m th«ng sè mang tÝnh “mß mÉm”, kÐm chÝnh x¸c, chÊt l−îng kh«ng cao, chØ ¸p dông ®−îc víi tõng tr−êng hîp cô thÓ mμ kh«ng thÓ tæng qu¸t ho¸... §Ó kh¾c phôc nh÷ng nh−îc ®iÓm ®ã hiÖn nay, ng−êi ta sö dông ph−¬ng ph¸p tæng hîp hÖ thèng dïng håi tiÕp tr¹ng th¸i. Ph−¬ng ph¸p nμy cã thÓ ¸p ®Æt chÝnh x¸c c¸c ®iÓm cùc cho hÖ thèng qua ®ã quyÕt ®Þnh ®Õn chÊt l−îng cña hÖ thèng. NhiÖm vô cña ph−¬ng ph¸p lμ t×m ma trËn håi tiÕp tr¹ng th¸i K ®Ó víi mét ®èi t−îng cã m« h×nh tr¹ng th¸i: ⎩⎨ ⎧ = +=+ )(.)( )(.)(.)1( kxCky kuBkxAkx ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- th× tÝn hiÖu khiÓn sÏ lμ: U = - K.x(k) vμ lμm cho hÖ thèng cã c¸c ®iÓm cùc mong muèn ®Æt tr−íc: z1, z2, z3 ... x y z-1 C B A K W=0 U (-) Tuy nhiªn ®Ó t×m ®−îc ma trËn håi tiÕp tr¹ng th¸i th× hÖ ph¶i ®iÒu khiÓn ®−îc vμ quan s¸t ®−îc. §Ó t×m ma trËn håi tiÕp tr¹ng th¸i K: Tõ hÖ ph−¬ng tr×nh tr¹ng th¸i ta cã )().()(..)(.)1( kxBKAkxKBkxAkx −=−=+ ph−¬ng tr×nh ®Æc tÝnh cña hÖ: det(z.I – A + B.K) = 0 (1) Ph−¬ng tr×nh nghiÖm mong muèn: (z-z1) (z-z2)… (z-zn) = zn + c1.zn-1 + c2.zn-2+...+ cn = 0 (2) Tõ ®ã ta cã c¸c ph−¬ng ph¸p t×m K: a. Ph−¬ng ph¸p c©n b»ng hÖ sè: Khai triÓn ph−¬ng tr×nh (1) thμnh: det(z.I – A + B.K) = zn + p1.zn-1 + p2.zn-2+...+ pn = 0 trong ®ã pi lμ c¸c hÖ sè cã chøa c¸c phÇn tö Ki cña ma trËn K: K = [ K1 K2 … Kn] ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- C©n b»ng hÖ sè ph−¬ng tr×nh trªn vμ ph−¬ng tr×nh (2) ta cã: ⎪⎪⎩ ⎪⎪⎨ ⎧ = = = nn CP CP CP ... 22 11 Tõ ®ã ta cã c¸c phÇn tö Ki cña ma trËn håi tiÕp tr¹ng th¸i K. b. Ph−¬ng ph¸p Ackerman: §©y lμ ph−¬ng ph¸p dùa theo ®Þnh lý Laylly-Hamiton, c¸c b−íc thù hiÖn cña ph−¬ng ph¸p nμy: ƒ TÝnh Φ(A) = An + c1.An-1 + ... + cn.I trong ®ã ci lμ hÖ sè cña ph−¬ng tr×nh (2). ƒ TÝnh K theo c«ng thøc: K = [0, 0, ... 1].[B, AB, ... , An-1B]-1. Φ(A) c. Ph−¬ng ph¸p biÕn ®æi ma trËn: ƒ Gäi P lμ ma trËn ®iÒu khiÓn ®−îc cña ®èi t−îng: P = [B, AB, ..., An-1B] ƒ §Þnh nghÜa mét ma trËn W nh− sau: ⎥⎥ ⎥⎥ ⎥⎥ ⎦ ⎤ ⎢⎢ ⎢⎢ ⎢⎢ ⎣ ⎡ = −− −− 0001 001 01 1 1 32 121 … … ##%## … … a aa aaa W nn nn trong ®ã det(z.I – A) = zn + a1.zn-1 + ... + an ƒ TÝnh ma trËn T = P.W ƒ TÝnh K theo c«ng thøc sau: K = [cn – an , cn-1 – an-1 , ... , c1 – a1 ].T -1 víi ci lμ hÖ sè cña ph−¬ng tr×nh (2). §©y lμ ba ph−¬ng ph¸p c¬ b¶n ®Ó t×m ma trËn håi tiÕp K, tuy c¸ch thøc kh¸c nhau nh−ng c¶ ba ph−¬ng ph¸p ®Òu cho ta cïng mét kÕt qu¶. Tuy nhiªn ®Ó t×m ®−îc ma trËn K ta cÇn ph¶i cã c¸c ®iÓm cùc mong muèn, do vËy vÊn ®Ò ®Æt ra lμ t×m c¸c ®iÓm cùc mong muèn nh− thÕ nμo, v× c¸c ®iÓm cùc sÏ quyÕt ®Þnh ®Õn tÝnh chÊt, chÊt l−îng cña hÖ thèng vμ ®èi víi mçi hÖ th× c¸c ®iÓm cùc mong muèn lμ kh¸c nhau phô thuéc sè biÕn tr¹ng th¸i cña hÖ. Mét trong nh÷ng ph−¬ng ph¸p t×m ®iÓm cùc mong muèn ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- th−êng ®−îc sö dông lμ ph−¬ng ph¸p cña Bessel. «ng ®· x¸c ®Þnh ®−îc c¸c ®iÓm cùc chuÈn cho c¸c hÖ thèng liªn tôc bËc k sao cho víi c¸c ®iÓm cùc ®ã, hÖ thèng ®¹t chÊt l−îng rÊt tèt nh− sau: kh«ng cã ®é qu¸ ®iÒu chØnh vμ thêi gian qu¸ ®é lμ T (s) rÊt nhá bÊt kú. C¸c ®iÓm cùc mong muèn ®−îc Bessel thèng kª trong b¶ng: BËc (K) §iÓm cùc chuÈn 1 (- 4,6200)/T 2 (- 4,0530 ± 2,3400i)/T 3 (- 5,0093)/T; ( -3,9668 ± 3,7845i)/T Víi hÖ thèng ®iÒu khiÓn sè ta cÇn ph¶i chuyÓn c¸c ®iÓm cùc chuÈn sang miÒn Z theo c«ng thøc: víi T lμ chu kú trÝch mÉu cña hÖ thèng. kk ez = pT . 2. X¸c ®Þnh ma trËn håi tiÕp tr¹ng th¸i K: Ta sö dông ph−¬ng ph¸p Ackerman ®Ó t×m ma trËn K. - M« h×nh tr¹ng th¸i cña hÖ thèng cã d¹ng: ⎩⎨ ⎧ += +=+ )(.)(.)( )(.)(.)1( kuDkxCky kuBkxAkx tõ phÇn ph©n tÝch hÖ thèng ta ®· cã: ; ; ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ = 010 004 0,18770,6378- 2,7435 A ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ = 0 0 0,125 B ; ( )0,01760,07570,0810=C D = 0; Nªn: ⎧ ( )⎪⎪⎩ ⎪⎪⎨ = ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ + ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ =+ )(.0,01760,07570,0810)( )(. 0 0 0,125 )(. 010 004 0,18770,6378- 2,7435 )1( kxky kukxkx - Do hÖ lμ bËc 3 vμ chän thêi gian qu¸ ®é lμ 0,125(s) nªn c¸c ®iÓm cùc mong muèn ë miÒn liªn tôc sÏ lμ: ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- p1 = (- 5,0093)/0,125 = - 40,0744; p2,3 = ( -3,9668 ± 3,7845i)/0,125 = - 31,7344 ± 30,276.i; ChuyÓn sang miÒn Z víi chu kú lÊy mÉu T = 0,005s: z1 = exp(0,005.p1) = 0,8184; z2= exp(0,005.p2) = 0,8435 + 0,1287i; z3= exp(0,005.p3) = 0,8435 – 0,1287i; - Ma trËn håi tiÕp tr¹ng th¸i cã d¹ng: K = [k1 k2 k3]; - Ph−¬ng tr×nh nghiÖm mong muèn: (z - z1)(z - z2)(z - z3) = (z – 0,8184) (z – 0,8435 – 0,1287i) (z - 0,8435+0,1287i) = z3 – 0,8184.z2 – 0,7282.z + 0.596 Ö c1 = -0,8184; c2 =-0,7282; c3 = 0,596. Ö Ф(A) = c3.I + c2.A + c1.A2 + A3 ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ = ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ + ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ + ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ + ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ = 1.3468 3.4234- 7.6644 1.4386 3.8175- 7.2647 0.3409 0.8641- 1.1489 0.7508 2.6952- 10.9380 2.0531 6.6192- 19.1292 0.8976 2.7090- 6.4579 0 0 3.2736- 0.6145- 2.2058 8.9517- 0.4201- 1.3543 3.9138- 0 0.7282- 0 0 0 2.9128- 0.1367- 0.4907 1.9913- 596.000 0596.00 00596.0 - Ma trËn ®iÒu khiÓn ®−îc: P = [B A.B A2.B] ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ = 0.5000 0 0 1.3673 0.5000 0 0.5978 0.3418 0.1250 ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- Ö P-1 ⎥⎥ ⎥ ⎦ ⎤ ⎢⎢ ⎢ ⎣ ⎡ = 2.0000 0 0 5.4690- 2.0000 0 5.3904 5.4690- 8.0000 Tõ ®ã ta t×m ®−îc ma trËn håi tiÕp tr¹ng th¸i: K = [0 0 1].P-1. Ф(A) = [15,3288 -6,8468 2,6936]; Nªn: k1 = 15,3288; k2 = -6,8468; k3 = 2,6936. 3. X©y dùng m« h×nh hÖ trªn Simulink: Tõ hÖ ph−¬ng tr×nh tr¹ng th¸i: ( )⎪⎪⎩ ⎪⎪⎨ ⎧ = ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ + ⎟⎟ ⎟ ⎠ ⎞ ⎜⎜ ⎜ ⎝ ⎛ =+ )(.0.01760.07570.0810)( )(. 0 0 0.125 )(. 010 004 0.18770.6378- 2.7435 )1( kxky kukxkx ta cã: ⎪⎪⎩ ⎪⎪⎨ ⎧ ++= =+ =+ ++−=+ )(.0176,0)(.0757,0)(.081,0)( )()1( )(.4)1( )(.125,0)(.1877,0)(.6378,0)(.7435,2)1( 321 23 12 3211 kxkxkxky kxkx kxkx kukxkxkxkx ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- Tõ ®ã ta x©y dùng ®−îc s¬ ®å m« pháng trªn Simulink: Ch¹y s¬ ®å m« pháng ta thu ®−îc ®Æc tÝnh qu¸ ®é: ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- H×nh 18: §Æc tÝnh qu¸ ®é cña hÖ thèng khi sö dông bé håi tiÕp tr¹ng th¸i. NhËn xÐt: Qua ®Æc tÝnh qu¸ ®é cña hÖ ®iÒu khiÓn sè sö dông bé håi tiÕp tr¹ng th¸i ta thÊy: + Thêi gian qu¸ ®é cña hÖ rÊt nhá. + §é qu¸ ®iÒu chØnh kh«ng ®¸ng kÓ. + §é sai lÖch tÜnh gÇn nh− kh«ng cã. Nh− vËy sö dông bé håi tiÕp tr¹ng th¸i ®· gióp n©ng chÊt l−îng cña hÖ thèng lªn rÊt cao so víi ph−¬ng ph¸p sö dông bé PID nèi tiÕp. ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- Ch−¬ng Iv ThiÕt kÕ phÇn cøng vμ phÇn mÒm cho hÖ thèng ®iÒu khiÓn. I. ThiÕt kÕ phÇn cøng hÖ thèng ®iÒu khiÓn: 1. Ph−¬ng ¸n thiÕt kÕ: §Ó thùc hiÖn qu¸ tr×nh trao ®æi gi÷a m¸y tÝnh víi c¸c thiÕt bÞ chÊp hμnh ngo¹i vi ta cÇn ph¶i x©y dùng mét Card ghÐp nèi ®Ó truyÒn vμ nhËn tÝn hiÖu gi÷a m¸y tÝnh víi ngo¹i vi ®ã th«ng qua mét sè cæng hay khe c¾m më réng ®−îc tÝch hîp trªn Main. D−íi ®©y tr×nh bμy mét sè ph−¬ng ¸n ghÐp nèi cô thÓ sau: - GhÐp nèi th«ng qua r·nh c¾m më réng: C¸c m¸y tÝnh hiÖn nay, tuú tõng lo¹i th× th−êng cã nh÷ng lo¹i r·nh c¾m kh¸c nhau: + R·nh c¾m 8 bit theo tiªu chuÈn ISA + R·nh c¾m 16 bit theo tiªu chuÈn ISA + R·nh c¾m PS/2 32 bit theo chuÈn MCA + R·nh c¾m 32 bit theo chuÈn EISA + R·nh c¾m 32 bit theo chuÈn PCI Thùc hiÖn ghÐp nèi qua r·nh c¾m më réng th× viÖc vμo ra d÷ liÖu rÊt ®¬n gi¶n, tèc ®é trao ®æi rÊt nhanh, tuy nhiªn v× cã nhiÒu chuÈn quy ®Þnh kh¸c nhau nªn m¹ch ghÐp nèi chØ t−¬ng thÝch víi mét lo¹i m¸y cô thÓ. Ngoμi ra phÇn lín c¸c m¸y tÝnh hiÖn nay, r·nh c¾m ®−îc chÕ t¹o lμ 32 bit theo chuÈn PCI, lo¹i r·nh c¾m nμy cã kho¶ng c¸ch gi÷a c¸c ch©n rÊt nhá nªn yªu cÇu m¹ch in Card ghÐp nèi ph¶i ®−îc chÕ t¹o rÊt chÝnh x¸c ®Ó cã thÓ tr¸nh ch¹m chËp gi÷a c¸c ch©n ra cña r·nh c¾m. - GhÐp nèi th«ng qua cæng nèi tiÕp RS 232: Cæng nèi tiÕp lμ giao diÖn ®−îc sö dông rÊt phæ biÕn trong lÜnh vùc ®o l−êng vμ ®iÒu khiÓn. Dïng cæng nèi tÕp ta cã thÓ thùc hiÖn ®o l−êng ®iÒu khiÓn ë kho¶ng c¸ch xa víi kh¶ n¨ng chèng nhiÔu tèt, song v× thùc hiÖn truyÒn nèi tiÕp tõng bit nªn tèc ®é truyÒn th«ng cña nã thÊp (300 ®Õn 19200 baud) v× thÕ nã tá ra kh«ng phï hîp víi nh÷ng øng dông yªu cÇu tÝnh n¨ng thêi gian thùc cao. - GhÐp nèi th«ng qua cæng song song ( cæng LPT1, LPT2 ): ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- Cæng song song cã tèc ®é truyÒn lín do 8 bit d÷ liÖu ®−îc truyÒn ®i ®ång thêi nªn nã cã thÓ ®−îc øng dông trong c¸c hÖ thèng yªu cÇu thêi gian ®¸p øng nhanh. Ngoμi ra viÖc ®iÒu khiÓn cæng còng kh«ng qu¸ phøc t¹p, cã thÓ sö dông m¹ch ghÐp nèi víi cæng m¸y in ë tÊt c¶ c¸c lo¹i m¸y PC hiÖn nay . Víi m¹ch ®iÒu khiÓn ®éng c¬ mét chiÒu, do tèc ®é quay cña ®éng c¬ rÊt lín nªn m¹ch ghÐp nèi ph¶i b¶o ®¶m yªu cÇu tèc ®é trao ®æi d÷ liÖu nhanh, ®¬n gi¶n, dÔ giao tiÕp nªn ta quyÕt ®Þnh ghÐp nèi víi m¸y tÝnh th«ng qua cæng m¸y in LPT1. 2. GhÐp nèi cæng m¸y in LPT: - Cæng m¸y in cã 25 ch©n trong ®ã : + Ch©n 2 ®Õn ch©n 9 t−¬ng øng víi 8 ®−êng d÷ liÖu tõ D0 ®Õn D8, víi c¸c lo¹i Main m¸y tÝnh hiÖn nay 8 ®−êng d÷ liÖu nμy chØ cho phÐp ra, nªn ta kh«ng thÓ ®äc d÷ liÖu vμo trùc tiÕp tõ ®−êng nμy. + C¸c lèi ra ®iÒu khiÓn gåm cã c¸c ch©n: 1_Strobe, 14_AF, 16_INIT, 17_SLCTIN trong ®ã c¸c ch©n 1, 14, 17 ®−îc lÊy ®¶o. C¸c lèi ra nμy ®−îc sö dông ®Ó t¹o ra c¸c tÝn hiÖu ®iÒu khiÓn tíi c¸c phÇn tö cña Card ghÐp nèi. + C¸c lèi vμo gåm c¸c ch©n : 10_ACK, 11_BUSY, 12_PE, 13_SLTC, 15_ERROR ch©n 15 lÊy ®¶o. V× Bus d÷ liÖu cña cæng kh«ng ph¶i lμ 2 chiÒu nªn ta sÏ sö dông c¸c lèi vμo tr¹ng th¸i nμy lμm ®−êng vμo d÷ liÖu. + Ch©n 18 ®Õn 25 ®−îc nèi ®Êt - TÝn hiÖu cña cæng ®Òu t−¬ng thÝch chuÈn TTL (møc ®iÖn ¸p: 0V - 5V) - §Ó giao tiÕp víi bªn ngoμi cæng LPT cã 3 thanh ghi lμ: + Thanh ghi d÷ liÖu víi ®Þa chi c¬ b¶n lμ 378 H(Hex) + Thanh ghi tr¹ng th¸i víi ®Þa chØ lμ 379H + Thanh ghi ®iÒu khiÓn víi ®Þa chØ lμ 37AH ( §©y lμ c¸c ®Þa chØ t−¬ng øng cña cæng LPT1) - M¸y tÝnh cã thÓ cã 1 ®Õn 2 cæng song song víi c¸c ®Þa chØ: + Cæng LPT1 cã ®Þa chØ 378(Hex) ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- + Cæng LPT2 cã ®Þa chØ 278(Hex) - S¬ ®å ghÐp nèi víi cæng LPT ®−îc cho ë h×nh sau: T1 D1 ~ U T2 D2 §C Kt FT kt ω Giao diÖn ra KhuÕch ®¹i xung Giao diÖn vμo KhuÕch ®¹i LPT 1 NhiÖm vô cña c¸c khèi m¹ch: + Cæng LPT1: cã nhiÖm vô trao ®æi tÝn hiÖu gi÷a m¸y tÝnh vμ hÖ thèng m¹ch chÊp hμnh t−¬ng tù nh»m ®−a tÝn hiÖu ra ®iÒu khiÓn ®éng c¬ vμ cung cÊp tÝn hiÖu ph¶n håi cho qu¸ tr×nh thùc hiÖn thuËt to¸n ®iÒu khiÓn mÒm bªn trong. M¸y tÝnh cã chøc n¨ng thùc hiÖn thuËt to¸n vμ ®−a ra tÝn hiÖu ®iÒu khiÓn th«ng qua ch−¬ng tr×nh phÇn mÒn. Ch−¬ng tr×nh ®iÒu khiÓn ®−îc viÕt b»ng ng«n ng÷ lËp tr×nh C++ hay Visual C++ theo c¸ch thøc sö dông bé bï PID nèi tiÕp hoÆc theo ph−¬ng ph¸p ph¶n håi tr¹ng th¸i . + Giao diÖn ra: gåm cã bé chèt d÷ liÖu vμ bé biÕn ®æi sè thμnh t−¬ng tù (DAC) nh»m t¹o ra tÝn hiÖu ®iÖn ¸p mét chiÒu ®iÒu khiÓn t−¬ng øng cung cÊp cho khèi khuÕch ®¹i xung. + Khèi khuÕch ®¹i xung: khèi nμy t¹o ra c¸c tÝn hiÖu r¨ng c−a , ®ång pha ;cã c¸c khèi so s¸nh, khèi khuyÕch ®¹i xung ... Tuú vμo tÝn hiÖu ®iÒu khiÓn ®iÖn ¸p mét chiÒu ®−îc ®−a ra mμ xung më Thyristor sÏ ®−îc thay ®æi qua ®ã thay ®æi ®iÖn ¸p mét chiÒu cÊp cho ®éng c¬ nhê vËy ta thay ®æi ®−îc tèc ®é ®éng c¬ . + C¬ cÊu chÊp hμnh: lμ hÖ thèng gåm mét bé chØnh l−u hai nöa chu kú b¸n ®iÒu khiÓn T1, D1, T2, D2 vμ mét ®éng c¬ ®iÖn mét chiÒu. §éng c¬ mét chiÒu cã th«ng sè: P = 1,6 KW; U = 220V; n = 2000v/phót. ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- + M¸y ph¸t tèc Ft: cã nhiÖm vô biÕn tÝn hiÖu tèc ®é thμnh tÝn hiÖu ®iÖn ¸p ph¶n håi vÒ m¸y tÝnh cung cÊp cho thuËt to¸n ®iÒu khiÓn. + Bé khuÕch ®¹i: nh»m biÕn ®iÖn ¸p ph¶n håi tõ m¸y ph¸t tèc thμnh tÝn hiÖu ®iÖn ¸p chuÈn t−¬ng øng ®Ó ®i vμo bé biÕn ®æi ADC trong khèi Giao diÖn vμo. + Giao diÖn vμo: Khèi nμy cã bé biÕn ®æi ADC, bé chèt d÷ liÖu vμo, m¹ch dån kªnh ®Ó ®−a 8 bit d÷ liÖu vμo th«ng qua 4 ch©n vμo tr¹ng th¸i cña cæng m¸y in .Khèi sÏ nhËn tÝn hiÖu tèc ®é tõ m¸y ph¸t tèc ®Ó ph¶n håi vÒ cho m¸y tÝnh . 3. Giíi thiÖu c¸c linh kiÖn sö dông trong m¹ch ghÐp nèi: - M¹ch gi¶i m· ®Þa chØ 74HC138: C¸c ®Çu vμo A, B, C lμ c¸c ®Çu vμo ®Þa chØ, ch©n E1, E2, E3 lμ ch©n cho phÐp tÝn hiÖu ra. Tuú vμo gi¸ trÞ ë ch©n A, B, C mμ mét trong c¸c ch©n Y0 ®Õn Y7 tÝch cùc ë møc thÊp. - M¹ch chèt d÷ liÖu 74HC373: §©y lμ m¹ch chèt d÷ liÖu mét chiÒu. Vi m¹ch gåm t¸m flip-flop lo¹i D ba tr¹ng th¸i, th−êng ®−îc dïng ®Ó chèt d÷ liÖu. Khi ch©n LE ë møc cao, d÷ liÖu tõ c¸c ®Çu vμo (Dx) ®−îc chèt vμo trong flip-flop, s½n sμng ®Ó ®−a ra ë c¸c ®Çu ra t−¬ng øng (Qx). Khi ch©n LE ë møc thÊp, c¸c ®Çu vμo kh«ng ¶nh h−ëng g× ®Õn c¸c ®Çu ra. Khi ch©n /OE (tÝch cùc thÊp) ë møc thÊp, c¸c ®Çu ra ®−îc phÐp ®−a d÷ liÖu ra. Khi ch©n /OE ë møc cao, c¸c ®Çu ra ®−îc ®Æt lªn tr¹ng th¸i cao trë, vi m¹ch c¸ch li khái bus. - Bé biÕn ®æi DAC 0808: Vi m¹ch DAC 0808: lμ vi m¹ch chuyÓn ®æi sè t−¬ng tù (DAC) 8-bit. Thêi gian chuyÓn ®æi tèi ®a lμ 150 ns. Tiªu thô c«ng suÊt 33 mW víi nguån nu«i ±5V. §Çu ra lμ dßng ®iÖn cã gi¸ trÞ phô thuéc vμo m· nhÞ ph©n ®−a vμo. DAC0808 t−¬ng thÝch vμ giao tiÕp ®−îc víi c¸c møc logic TTL hay CMOS. Nguån nu«i cña vi m¹ch cho phÐp trong ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- kho¶ng tõ 18V ®Õn +18V. Dßng vμo so s¸nh lμ 2-5 mA. NhiÖt ®é lμm viÖc b×nh th−êng lμ 0 ÷ 75°C. Trong c¸c øng dông th«ng th−êng, ch©n 14 ®−îc nèi lªn ®iÖn ¸p so s¸nh Vref th«ng qua ®iÖn trë R14 cã gi¸ trÞ sao cho Vref/ R14 = 2 mA. Mét khuÕch ®¹i thuËt to¸n ®−îc sö dông ®Ó chuyÓn dßng ®iÖn ®Çu ra (ch©n 4) thμnh ®iÖn ¸p ra thÝch hîp. - Bé biÕn ®æi t−¬ng tù sè ADC 0809 ADC 0809 gåm cã 8 kªnh vμo IN-0 ®Õn IN-7, c¸c kªnh nμy ®−îc lùa chän nhê c¸c ch©n ®Þa chØ A, B, C. §iÖn ¸p ®−îc ®o so víi ®iÖn thÕ 0V. Sù tiªu thô dßng cña vi m¹ch lμ kh«ng ®¸ng kÓ (chØ kho¶ng 300 µA) víi thêi gian biÕn ®æi kho¶ng 100 µs. C¸c tÝn hiÖu ®Òu t−¬ng thÝch TTL, bé biÕn ®æi kh«ng ®ßi hái ®iÒu chØnh ®iÓm 0, ®é ph©n gi¶i cña vi m¹ch lμ 8 bit . Ho¹t ®éng cña ADC 0809 nh− sau : Ch©n ALE cho phÐp c¸c tÝn hiÖu ®Þa chØ chän kªnh ®−îc ®äc vμo. Mét xung d−¬ng ë ch©n Start sÏ kÝch ho¹t ADC biÕn ®æi, trong suèt qu¸ tr×nh biÕn ®æi ch©n ra EOC gi÷ ë møc Low, sau kho¶ng 100 µs nÕu ADC ®· biÕn ®æi xong nã sÏ chuyÓn lªn møc High b¸o kÕt thóc qu¸ tr×nh biÕn ®æi, khi nμy kÕt qu¶ qu¸ tr×nh biÕn ®æi ®−îc xÕp hμng ë c¸c ®−êng dÉn d÷ liÖu D0 ®Õn D7. NÕu Clock = 1 th× c¸c ®−êng dÉn d÷ liÖu cã thÓ ®−îc ®äc ®Ó xö lý . - Vi m¹ch khuyÕch ®¹i thuËt to¸n LM 358: Vi m¹ch gåm cã hai bé khuÕch ®¹i c«ng suÊt nhá, c¸c ch©n ®−îc thÓ hiÖn nh− trong h×nh vÏ. D¶i ®iÖn ¸p nguån nu«i 1,5V ®Õn 15V, ®iÖn ¸p Offset tèi ®a 7mV. ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- - Vi m¹ch dån kªnh 74HC257: Vi m¹ch cã chøa 4 bé quÐt ®éng (dån kªnh multiplex) víi hai lèi vμo vμ mét lèi ra, nã ®−îc sö dông ®Ó ®äc 8 bit d÷ liÖu tõ ADC vμo m¸y tÝnh qua 4 ®−êng tÝn hiÖu tr¹ng th¸i. Nh− vËy chøc n¨ng cña vi m¹ch lμ biÕn tÝn hiÖu song song 8 bit thμnh hai tÝn hiÖu song song 4 bit. Ch©n G cho phÐp ®äc d÷ liÖu tõ vi m¹ch khi Ā/B =0 th× 4 bit D0÷D3 ®−îc ®äc vμo, khi Ā/B =1 th× 4 bit D4÷D7 ®−îc ®äc vμo. C¸c ch©n cô thÓ ghÐp nèi víi nhau ®−îc tr×nh bμy ë m¹ch nguyªn lý . - Vi m¹ch TCA 780: TCA 780 cña h·ng Siemens chÕ t¹o lμ vi m¹ch phøc hîp thùc hiÖn ®−îc 4 chøc n¨ng cña mét m¹ch ®iÒu khiÓn ph¸t xunglμ: t¹o tÝn hiÖu ®ång pha, t¹o ®iÖn ¸p r¨ng ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- c−a ®ång bé, so s¸nh vμ t¹o xung vu«ng ra nh»m ®Ó ®iÒu khiÓn gãc më c¸c thyristor cña bé chØnh l−u. C¸c tham sè cña vi m¹ch : + Cã thÓ ®iÒu chØnh gãc tõ 0 ®Õn 180 ®é ®iÖn. + §iÖn ¸p nguån nu«i max Us = 18V + Dßng tiªu thô Is =10mA + Dßng ®iÖn ra I = 50mA + §iÖn ¸p r¨ng c−a Urmax =(Us - 2)V + §iÖn ¸p ®iÒu khiÓn U®k = -0,5 ÷ (Us - 2)V + TÇn sè xung ra f=10 ÷ 500 Hz - Thyristor chän lo¹i T25. Ngoμi ra trong m¹ch cßn sö dông m¸y biÕn ¸p xung, vi m¹ch æn ¸p 7805, 7812 c¸c phÇn tö And, Not, Tranzitor, ®iÖn trë, tô ®iÖn, ®ièt c¸c lo¹i ... 4. Nguyªn lý ho¹t ®éng cña hÖ ghÐp nèi: - §Ó ®−a d÷ liÖu ra: + §Çu tiªn tÝn hiÖu ®iÒu khiÓn ®−îc ®−a ra b»ng lÖnh outportb(data, 0x378) khi ®ã c¸c bit d÷ liÖu cña tÝn hiÖu ®iÒu khiÓn ®−îc chèt ë vi m¹ch 74HC373 . +LÖnh outportb(add1, 0x37A) tiÕp theo cã t¸c dông chän vi m¹ch 74HC373 ®Ó më chèt ®−a d÷ liÖu ®Õn DAC. TÝn hiÖu dßng ë ch©n 4 cña DAC ®−îc khuyÕch ®¹i thμnh ®iÖn ¸p ®iÒu khiÓn cung cÊp cho khèi ph¸t xung më Thyristor. - Ho¹t ®éng cña m¹ch ph¸t xung më thyristor ®Ó ®iÒu chØnh ®iÖn ¸p mét chiÒu cña ®éng c¬ ®−îc miªu t¶ b»ng s¬ ®å ®iÖn ¸p sau : ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- • v(t) lμ ®iÖn ¸p ®ång pha • v11 lμ ®iÖn ¸p ®iÒu khiÓn • u14 , u15 lμ c¸c xung ®iÒu khiÓn . Qua s¬ ®å ta thÊy, gi¸ trÞ ®iÖn ¸p ®iÒu khiÓn mét chiÒu v11 sÏ qui ®Þnh thêi ®iÓm ph¸t xung më u14 vμ u15. Thêi ®iÓm ph¸t xung sÏ quyÕt ®Þnh gi¸ trÞ ®iÖn ¸p mét chiÒu. - §Ó ®äc d÷ liÖu vÒ: Qu¸ tr×nh nhËn tÝn hiÖu ph¶n håi vÒ phøc t¹p h¬n, qu¸ tr×nh nμy gåm c¸c b−íc : + §−a tÝn hiÖu chän kªnh ADC vμ tÝn hiÖu cho ADC biÕn ®æi th«ng qua lÖnh : outportb(add2, 0x37A). ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- + Sau kho¶ng 100 µs khi ADC ®· hoμn thμnh qu¸ tr×nh biÕn ®æi th× cho tÝn hiÖu më chèt ®ång thêi cho Ā/B =0 ®Ó ®äc 4 bit thÊp cña gi¸ trÞ ph¶n håi tèc ®é vÒ: outportb(add3, 0x37A) inportb(add, 0x389). + Cho Ā/B =1 ®Ó ®äc 4 bit cao cña gi¸ trÞ ph¶n håi tèc ®é: outportb(add4, 0x37A) inportb(add, 0x389). Qu¸ tr×nh nμy ®−îc lÆp l¹i cho c¸c lÇn tiÕp theo. - C¸c ®Þa chØ dïng ®−îc ®Þnh nghÜa g¾n liÒn víi m¹ch phÇn cøng nh− sau: + §Þa chØ chän vi m¹ch chèt 74HC373 cña DAC ®Çu ra: + §Þa chØ ®iÒu khiÓn ADC: + §Þa chØ chän ch©n Ā/B cña vi m¹ch dån kªnh 74HC257: + §Þa chØ chän vi m¹ch chèt 74HC373 cña ADC ®Çu vμo: ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------ 1 2 3 4 5 6 A B C D 6 5 4 3 2 1 DCBA T itle N um ber R evision Size BDate: 13-M ay-2004 Sheet of File: C :\SD 2.SC H D raw n B y: IN -0 26 m sb2-1 21 2-2 20 IN -1 27 2-3 19 2-4 18 IN -2 28 2-5 8 2-6 15 IN -3 1 2-7 14 lsb2-8 17 IN -4 2 E O C 7 IN -5 3 A D D -A 25 IN -6 4 A D D -B 24 A D D -C 23 IN -7 5 A L E 22 ref(-) 16 E N A B L E 9 ST A R T 6 ref(+) 12 C L O C K 10 A D C 0809 11421531641751861972082192210231124122513 D B 25 A 1 B 2 C 3 E 1 4 E 2 5 E 3 6 Y 0 15 Y 1 14 Y 2 13 Y 3 12 Y 4 11 Y 5 10 Y 6 9 Y 7 7 74H C 138 D 0 3 Q 0 2 D 1 4 Q 1 5 D 2 7 Q 2 6 D 3 8 Q 3 9 D 4 13 Q 4 12 D 5 14 Q 5 15 D 6 17 Q 6 16 D 7 18 Q 7 19 O E 1 L E 11 74H C 373 D 0 3 Q 0 2 D 1 4 Q 1 5 D 2 7 Q 2 6 D 3 8 Q 3 9 D 4 13 Q 4 12 D 5 14 Q 5 15 D 6 17 Q 6 16 D 7 18 Q 7 19 O E 1 L E 11 74H C 373 1A 2 1Y 4 1B 3 2A 5 2Y 7 2B 6 3A 11 3Y 9 3B 10 4A 14 4Y 12 4B 13 G 15 A /B 1 74H C 257 V C C 1 2 74H C 04 1 274H C 04 1 2 74H C 04 1 2 74H C 04 1 2 74H C 04 1 2 74H C 04 1 2 74H C 04 1 274H C 14 15K 150p 32 1 84 L M 358 V C C 2K L M 336 V C C V C C 1 2 74H C 04 -Vs3 +Vs 13 Iout 4 m sb-B 1 5 B 2 6 Iout 2 B 3 7 B 4 8 B 5 9 V rf(+) 14 B 6 10 B 7 11 V rf(-) 15 lsb-B 8 12 D A C 0808 10K 1K 12V 32 1 84 L M 358 V C C 4,7K 1 1615 3 14 4 13 5 1211 7 10 8 9 2 T C A 780 12V B A X B A X V in 1 G ND3 +12V 2 M C 7812K 15K 10K 1u 470u 220V 1N 4001 B 25 K 10K 1.2K 1,2K 22 22 270 1K 1K 220 270 200p 22n B 25 T 25 T 25 A- + D C _1,6 K W FT B 25 1K 1u 100u 1.256K K T K T S¬ ® å n g u y ªn lý ph Çn cø n g h Ö th èn g ® iÒu k h iÓn sè L íp § k 1-K 45 P§ N g h Üa L § T h a nh N B C h iÕn S¬ ®å nguyªn lý phÇn cøng ghÐp nèi hÖ thèng ®iÒu khiÓn ®éng c¬ m ét chiÒu Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- II. PhÇn mÒm ®iÒu khiÓn: 1. Ph−¬ng ph¸p ®iÒu khiÓn: Ta sÏ sö dông ph−¬ng ph¸p ®iÒu khiÓn dïng bé PID bï nèi tiÕp: y u T 102,0 80)( += ppWKd 1.25,0.05,0 5,6)( 2 ++= pppWdc ZOH w PID (Kp,Ki,Kd) Víi kh©u PID cã hμm truyÒn d¹ng sè: )1( 0,098 + 0,09526.z0,002767.z)( 2 − += zz zWPID NhiÖm vô cña ch−¬ng tr×nh ®iÒu khiÓn mÒm lμ dùa vμo tÝn hiÖu ph¶n håi y(k) tõ ph¸t tèc vμ tÝn hiÖu ®Æt tèc ®é w(k) ®Ó tÝnh to¸n, ®−a ra tÝn hiÖu ®iÒu khiÓn u(k) cho c¬ cÊu chÊp hμnh. Do kh©u PID sè cã ®Çu vμo lμ sai lÖch gi÷a tÝn hiÖu ®Æt w(k) víi tÝn hiÖu ph¶n håi y(k) vμ ®Çu ra chÝnh lμ tÝn hiÖu ®iÒu khiÓn u(k) nªn ta cã: zzzyzw zuzWPID − +=−= 2 2 0,098 + 0,09526.z0,002767.z )()( )()( ChuyÓn vÒ ph−¬ng tr×nh sai ph©n: )1()2( )(k 0,098w + )1(k 0,09526.w2)(k 0,002767.w (k)0,098.y - 1)(k0,09526.y 2)(k 0,002767.y )(.)(.z(z))y -(z) 0,098)(w + 0,09526.zz(0,002767. 22 +−+= +++++−+−⇒ −=+ kuku zuzzu víi w(k+2) = w (k+1) = w (k) = Gi¸ trÞ ®Æt tèc ®é, ta cã: )1()2()(k 0,196027.w (k)0,098.y - 1)(k 0,09526.y 2)(k 0,002767.y +−+=++−+− kuku hay: )1()(k 0,196027.w (k)0,098.y - 1)(k 0,09526.y 2)(k 0,002767.y)2( ++++−+−=+ kuku ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- §©y lμ mèi quan hÖ gi÷a tÝn hiÖu ®iÒu khiÓn u(k) cÇn ®−a ra víi tÝn hiÖu ®Æt w(k), tÝn hiÖu ph¶n håi tèc ®é y(k) vμ víi chÝnh tÝn hiÖu ®iÒu khiÓn tr−íc ®ã u(k-1). 2. Ch−¬ng tr×nh ®iÒu khiÓn: §Ó viÕt ch−¬ng tr×nh ®iÒu khiÓn cho ph−¬ng tr×nh sai ph©n trªn ta sö dông phÇn mÒm Visual C++ . §©y lμ c«ng cô rÊt m¹nh cho viÖc lËp tr×nh nãi chung vμ ®iÒu khiÓn nãi riªng, trong ®ã ®· cã hç trî nhiÒu hμm ®−îc sö dông ®Ó xö lý víi phÇn cøng ngo¹i vi. Ch−¬ng tr×nh ®iÒu khiÓn ®−îc viÕt trªn Visual C++ nh− sau: pushf; unsigned short Data=0x378; unsigned short Control=0x37A; unsigned short speed,e,e_old,u,u_old,feed_back,feed_back_low,feed_back_high ; cout<<"Nap gia tri toc do dong co :"; cin>> speed; feed_back=0; e_old=0; u_old=0; do{ e=speed-feed_back; u=unsigned short((e-e_old-0.09526*u_old-0.098)*361.4); _asm{ push ax; push dx; #include #include void main(){ unsigned short Status=0x379; ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- xor ax,ax; mov dx,Control; mov ax,3;//Mo 74LS373 de dua du lieu ra ! out dx,al; xor ax,ax mov ax,10;//Dua Start+ALE+ Dia chi A0 ra ! out dx,al; //Cho 100 micro giay ! mov cl,30; Again: nop; loop Again; //Het 100 micro giay ! xor ax,ax; mov ax,1;//cho phep tin hieu Enable cua ADC! out dx,al; xor ax,ax; mov ax,0;//Mo chot 74LS373+SEL=0 de dua 4 bit thap //du lieu ve ! out dx,al; xor ax,ax; mov dx,Status; in al,dx; mov feed_back_low,ax; xor ax,ax; mov dx,Control; mov ax,4;//SEL=1 de dua 4 bit cao du lieu ve ! out dx,al; xor ax,ax; mov dx,Status; in al, dx; mov feed_back_high,ax; pop cx; popf; pop dx; pop ax; } _asm{ push dx; pushf; push ax; push cx; mov cl,4; xor ax,ax; shr feed_back_low,cl; and feed_back_high,0x00f0; mov ax,feed_back_low; ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- Khi ch¹y ch−¬ng tr×nh ®iÒu khiÓn nμy trªn nÒn Ms-Dos ta cã thÓ thiÕt lËp tèc ®é ®Æt cho ®éng c¬, ®−a ra tÝn hiÖu ®iÒu khiÓn ®éng c¬ ho¹t ®éng theo tèc ®é ®· ®Æt. Do trong ch−¬ng tr×nh cã tÝch hîp xö lý b»ng c¸c lÖnh cña Assemble nªn tèc ®é ph¶n øng cña hÖ thèng ®ñ ®¸p øng víi sù thay ®æi cña tèc ®é ®éng c¬. Tuy nhiªn nh−îc ®iÓm lμ ch−a cã giao diÖn víi ng−êi sö dông nªn viÖc ®iÒu khiÓn khã kh¨n, kh«ng thuËn tiÖn. 3. ThiÕt kÕ giao diÖn: §Ó t¨ng tÝnh n¨ng vμ thuËn tiÖn cho ng−êi sö dông, ta thiÕt kÕ giao diÖn cña ch−¬ng tr×nh víi nh÷ng modul nh− sau: File: DCMotor.cpp (Modul chÝnh cña ch−¬ng tr×nh) // Chuong trinh dieu khien toc do dong co mot chieu kich tu doc lap. #include "DCMotor.h" #include "Motor.h" #include "DCMControl.cpp" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif -------------------------------------------------------------------- or ax,feed_back_high; mov feed_back,ax; pop cx; pop ax; popf; pop dx; } e_old=e; u_old=u; } while(!kbhit()); } ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- //CDCMotorApp BEGIN_MESSAGE_MAP(CDCMotorApp, CWinApp) //{{AFX_MSG_MAP(CDCMotorApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() -------------------------------------------------------------------- // CDCMotorApp construction CDCMotorApp::CDCMotorApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } -------------------------------------------------------------------- // CDCMotorApp initialization BOOL CDCMotorApp::InitInstance() { AfxEnableControlContainer(); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); #else Enable3dControlsStatic(); #endif CDCMcontrol dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; } //void CDCMcontrol::OnChangeEdit1(){ // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CDialog::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here } C¸c Modul ®iÒu khiÓn vμ më réng : + Modul: DCMotor.h: File: DCMotor.h #if!defined(AFX_DKDCDC_H__58664FE5_A2DA_11D8_9E5B_8E85C9E54E37__INCLUDED_) #define AFX_DKDCDC_H__58664FE5_A2DA_11D8_9E5B_8E85C9E54E37__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #ifndef __AFXWIN_H__ #error include 'stdafx.h' before including this file for PCH #endif #include #include ---------------------------------------------------------------------- // CDkdcdcApp: class CDCMotorApp : public CWinApp {public: CDCMotorApp (); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CDCMotorApp) ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- public: virtual BOOL InitInstance(); //}}AFX_VIRTUAL // Implementation //{{AFX_MSG(CDCMotorApp) //{{AFX_MSG(CDkdcdcApp) // NOTE - the ClassWizard will add and remove member functions here. //DO NOT EDIT what you see in these blocks of generated code ! //}}AFX_MSG DECLARE_MESSAGE_MAP() }; #endif // !defined(AFX_DKDCDC_H__58664FE5_A2DA_11D8_9E5B_8E85C9E54E37__INCLUDED_) + Modul: Motor.h: File: Motor.h #if !defined(AFX_ Motor__013FC63D_A31F_11D8_9E5B_9D9DD3490332__INCLUDED_) #define AFX_Motor_H__013FC63D_A31F_11D8_9E5B_9D9DD3490332__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // Motor.h : header file ------------------------------------------------------------------------ // CMotor dialog class CMotor : public CDialog { // Construction public: CMotor (CWnd* pParent = NULL); // Dialog Data //{{AFX_DATA(CMotor) enum { IDD = IDD_TSDT }; double m_k; CString m_ti; CString m_td; //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CMotor) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CMotor) virtual BOOL OnInitDialog(); afx_msg void OnChangeEdit1(); //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_DOITUONG_H__013FC63D_A31F_11D8_9E5B_9D9DD3490332__INCLUDED_) + Modul: DCMControl.cpp File: DCMControl.cpp #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include"Motor.h" -------------------------------------------------------------------------------- nsigned char vantoc; bool dieukhien = true; Cdoituong doituong; int vdat; class CAboutDlg : public CDialog { public: CAboutDlg(); enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); protected: DECLARE_MESSAGE_MAP()}; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){} --------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() // DCMControl dialog DCMControl:: DCMControl (CWnd* pParent /*=NULL*/) : CDialog(DCMControl lg::IDD, pParent) { // AFX_DATA_INIT(DCMControl){ //m_valuevdat = 0; m_displayvantoc = _T(""); m_valuek = 0.02; m_valuetd = 0.28; m_valuetgdk = 0.025; m_valueti = 0.32; m_valuenhande = _T(""); } void DCMControl::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //AFX_DATA_MAP(DCMControl) DDX_Control(pDX, IDC_NHANDE, m_nhande); DDX_Control(pDX, IDC_EDITTI, m_controlti); DDX_Control(pDX, IDC_EDITTGDK, m_controltgdk); DDX_Control(pDX, IDC_EDITTD, m_controltd); DDX_Control(pDX, IDC_EDITK, m_controlk); DDX_Control(pDX, IDC_DISPLAY, m_controlvantoc); DDX_Control(pDX, IDC_COMBOVDAT, m_controlvdat); DDX_Control(pDX, IDC_BTSDT, m_tsdt); DDX_Control(pDX, IDC_BTSDK, m_tsdk); DDX_Control(pDX, IDC_BTHOAT, m_thoat); DDX_Control(pDX, IDC_BKHOIDONG, m_batdau); DDX_Control(pDX, IDC_BDUNG, m_dung); DDX_Control(pDX, IDC_BDK, m_dieukhien); DDX_CBIndex(pDX, IDC_COMBOVDAT, m_valuevdat); DDX_Text(pDX, IDC_DISPLAY, m_displayvantoc); DDX_Text(pDX, IDC_EDITK, m_valuek); DDX_Text(pDX, IDC_EDITTD, m_valuetd); ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- DDX_Text(pDX, IDC_EDITTGDK, m_valuetgdk); DDX_Text(pDX, IDC_EDITTI, m_valueti); DDX_Text(pDX, IDC_NHANDE, m_valuenhande); //AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDCMotor, CDialog) //AFX_MSG_MAP(DCMControl) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTHOAT, OnBthoat) ON_BN_CLICKED(IDC_BTSDK, OnBtsdk) ON_BN_CLICKED(IDC_BKHOIDONG, OnBkhoidong) ON_BN_CLICKED(IDC_RADP, OnRadp) ON_BN_CLICKED(IDC_RADQP, OnRadqp) ON_BN_CLICKED(IDC_RADPID, OnRadpid) ON_BN_CLICKED(IDC_RADHTTT, OnRadhttt) ON_BN_CLICKED(IDC_BDK, OnBdk) ON_BN_CLICKED(IDC_BDUNG, OnBdung) ON_BN_CLICKED(IDC_BTSDT, OnBtsdt) ON_EN_CHANGE(IDC_EDITTI, OnChangeEdit) ON_EN_CHANGE(IDC_EDITK, OnChangeEdit) ON_EN_CHANGE(IDC_EDITTD, OnChangeEdit) ON_EN_CHANGE(IDC_EDITTGDK, OnChangeEdit) ON_CBN_CLOSEUP(IDC_COMBOVDAT, Oncloseupvt) END_MESSAGE_MAP() ------------------------------------------------------------------------------- // DCMControl message handlers BOOL DCMControl::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- // TODO: Add extra initialization here m_valuenhande="HÖ Thèng §iÒu KhiÓn §éng C¬ Mét ChiÒu"; setmyfont(); datlaifont(); UpdateData(FALSE); //GetDlgItem(IDC_COMBOVDAT)->EnableWindow(FALSE); // DCMControl::datlaifont(); return TRUE; // return TRUE unless you set the focus to a control } void DCMControl::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else {CDialog::OnSysCommand(nID, lParam);} } void DCMControl::setmyfont() { m_datfont.Detach(); m_datfont.CreateFont(30,0,0,0,500,0,FF_DONTCARE,".VnArabiaH"); m_nhande.SetFont(&m_datfont); } void DCMControl::datlaifont() { m_datfont.Detach(); m_datfont.CreateFont(28,0,0,0,500,0,1,DEFAULT_PITCH|FF_DONTCARE,".VnTime"); m_controlvantoc.SetFont(&m_datfont); } void DCMControl::OnBthoat() { // TODO: Add your control notification handler code here if(MessageBox("B¹n cã muèn tho¸t?",MB_YESNO+MB_ICONQUESTION)==IDYES) OnOK(); } void DCMControl::Oncloseupvt(){ UpdateData(TRUE); CString m_string; m_controlvdat.GetLBText(m_valuevdat,m_string); vdat=(int)atof(m_string); } void CDkdcdcDlg::OnBkhoidong() { GetDlgItem(IDC_RADQP)->EnableWindow(TRUE); GetDlgItem(IDC_RADQT)->EnableWindow(TRUE); GetDlgItem(IDC_RADP)->EnableWindow(TRUE); GetDlgItem(IDC_RADPI)->EnableWindow(TRUE); ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- GetDlgItem(IDC_RADPD)->EnableWindow(TRUE); GetDlgItem(IDC_RADPID)->EnableWindow(TRUE); GetDlgItem(IDC_RADHTTT)->EnableWindow(TRUE); m_batdau.EnableWindow(FALSE); m_tsdk.EnableWindow(TRUE); m_tsdt.EnableWindow(TRUE); m_dieukhien.EnableWindow(TRUE); } void DCMControl::OnRadhttt() { m_luatdk="HTTT"; } void DCMControl::OnChangeEdit(){ UpdateData(TRUE); } void DCMControl::OnBtsdk() { GetDlgItem(IDC_RADQT)->EnableWindow(FALSE); } if(m_luatdk=="PID"){ GetDlgItem(IDC_COMBOVDAT)->EnableWindow(TRUE); GetDlgItem(IDC_EDITK)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTGDK)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTI)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTD)->EnableWindow(TRUE); GetDlgItem(IDC_RADPI)->EnableWindow(FALSE); GetDlgItem(IDC_RADPD)->EnableWindow(FALSE); GetDlgItem(IDC_RADP)->EnableWindow(FALSE); GetDlgItem(IDC_RADHTTT)->EnableWindow(FALSE); } if(m_luatdk=="HTTT"){ GetDlgItem(IDC_COMBOVDAT)->EnableWindow(TRUE); GetDlgItem(IDC_EDITK)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTGDK)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTI)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTD)->EnableWindow(TRUE); GetDlgItem(IDC_RADPI)->EnableWindow(FALSE); GetDlgItem(IDC_RADPD)->EnableWindow(FALSE); GetDlgItem(IDC_RADP)->EnableWindow(FALSE); GetDlgItem(IDC_RADPID)->EnableWindow(FALSE); } ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- void DCMControl::OnBdung() { m_tsdk.EnableWindow(TRUE); m_tsdt.EnableWindow(TRUE); m_thoat.EnableWindow(TRUE); m_dieukhien.EnableWindow(TRUE); m_dung.EnableWindow(FALSE); m_batdau.EnableWindow(FALSE); GetDlgItem(IDC_COMBOVDAT)->EnableWindow(TRUE); GetDlgItem(IDC_EDITK)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTGDK)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTI)->EnableWindow(TRUE); GetDlgItem(IDC_EDITTD)->EnableWindow(TRUE); GetDlgItem(IDC_RADPI)->EnableWindow(TRUE); GetDlgItem(IDC_RADPD)->EnableWindow(TRUE); GetDlgItem(IDC_RADPID)->EnableWindow(TRUE); GetDlgItem(IDC_RADP)->EnableWindow(TRUE); GetDlgItem(IDC_RADHTTT)->EnableWindow(TRUE); GetDlgItem(IDC_RADQP)->EnableWindow(TRUE); GetDlgItem(IDC_RADQT)->EnableWindow(TRUE); GetDlgItem(IDC_COMBOVDAT)->EnableWindow(FALSE); GetDlgItem(IDC_EDITK)->EnableWindow(FALSE); GetDlgItem(IDC_EDITTGDK)->EnableWindow(FALSE); GetDlgItem(IDC_EDITTI)->EnableWindow(FALSE); GetDlgItem(IDC_EDITTD)->EnableWindow(FALSE); dieukhien=false; } void DCMControl::OnBtsdt() { if(Motor.DoModal()==IDOK){} m_tsdt.EnableWindow(FALSE); } void CDkdcdcDlg::hienthi(int n){ m_displayvantoc=""; for (int i=0 ; i<5;++i){ if (n%10==0) m_displayvantoc = "0" + m_displayvantoc ; else if (n%10==2) m_displayvantoc = "2" + m_displayvantoc ; else if (n%10==1) m_displayvantoc = "1" + m_displayvantoc ; else if (n%10==3) m_displayvantoc = "3" + m_displayvantoc ; else if (n%10==4) m_displayvantoc = "4" + m_displayvantoc ; ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- else if (n%10==5) m_displayvantoc = "5" + m_displayvantoc ; else if (n%10==6) m_displayvantoc = "6" + m_displayvantoc ; else if (n%10==7) m_displayvantoc = "7" + m_displayvantoc ; else if (n%10==8) m_displayvantoc = "8" + m_displayvantoc ; else m_displayvantoc = "9" + m_displayvantoc ; n=n/10;} } unsigned char DCMControl::docvontoc() { _Asm { xor ax,ax; mov ax,1; out dx,al; xor ax,ax; mov ax,0; out dx,al; xor ax,ax; mov dx,Status; in al,dx; mov feed_back_low,ax; xor ax,ax; mov dx,Control; mov ax,4; out dx,al; xor ax,ax; mov dx,Status; in al, dx; mov feed_back_high,ax; pop cx; popf; pop dx; pop ax; } _asm{ push dx; pushf; push ax; push cx; mov cl,4; xor ax,ax; shr feed_back_low,cl; and feed_back_high,0x00f0; mov ax,feed_back_low; } return ax; } --------------------------------------------------------------------------------- void DCMControl::OnBdk() { UpdateData(TRUE); //vdat=m_valuevdat; if(m_luatdk=="") MessageBox("B¹n ph¶i chän luËt ®Ó ®iÒu khiÓn !", "C¶nh b¸o",MB_OK+MB_ICONQUESTION); else ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- if(vdat==0) MessageBox("B¹n ph¶i nhËp th«ng sè cho bé ®iÒu khiÓn !", "C¶nh b¸o",MB_OK+MB_ICONQUESTION); else{ m_tsdk.EnableWindow(FALSE); m_tsdt.EnableWindow(FALSE); m_thoat.EnableWindow(FALSE); m_dieukhien.EnableWindow(FALSE); m_dung.EnableWindow(TRUE); ------------------------------------------------------------------------------- Unsigned feed_back=0, e_old=0, u_old=0; do{ e=speed-feed_back; u=unsigned short((e-e_old-0.09526*u_old-0.098)*361.4); _asm{ push ax; push dx; pushf; push cx; xor ax,ax; mov dx,Data; mov ax,u; out dx,al; -------------------------------------------------------------------------------- int x,c=0,z=0; _outp(0x378,1); _outp(0x37a,0); _outp(0x37a,12); x=vantoc(); while(1){ z=z+1; if(z==10){ hienthi(c/10); UpdateData(FALSE); z=0; } _outp(0x378,1); ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- _outp(0x37a,0); _outp(0x37a,12); if (x > vdat-100/*m_valuek*vdat*/){ _outp(0x378,0); _outp(0x37a,0); _outp(0x37a,12); _sleep (int(1000*m_valuetgdk-20)); x=vantoc(); } else { x=vantoc(); c=c+x;} } double x=1; int i; while(1){ _outp(0x378,0); _outp(0x37a,0); _outp(0x37a,12); hienthi(i=vantoc()); UpdateData(FALSE); _sleep(10); _outp(0x378,1); _outp(0x37a,0); _outp(0x37a,12); //_sleep(abs(1)); _sleep(x); x=x+m_valuek*(vdat-i); } } Do thêi gian cã h¹n nªn phÇn thiÕt kÕ giao diÖn nμy cßn nhiÒu thiÕu sãt, chóng em sÏ cè g¾ng hoμn thμnh trong thêi gian tíi. Sau khi söa lçi vμ ch¹y ch−¬ng tr×nh ta thu ®−îc kÕt qu¶: + Ch−¬ng tr×nh ®· ®iÒu khiÓn cho ch¹y ®éng c¬. ------------------------------------------------------------------------------------------------------ Bμi tËp dμi §iÒu KhiÓn Sè Líp §K1-K45 ----------------------------------------------------------------------------------------------------------------------- + Tèc ®é ph¶n håi ®· ®−îc hiÓn thÞ. Tuy nhiªn do qu¸ tr×nh tÝnh to¸n c¸c th«ng sè trung gian ch−a chÝnh x¸c nªn ®éng c¬ ch¹y kh«ng æn ®Þnh, tèc ®é ch−a tu©n theo tèc ®é ®Æt tr−íc. Chóng em sÏ cè g¾ng söa lçi vμ hoμn thiÖn ch−¬ng tr×nh ®iÒu khiÓn cho thËt tèt trong mét thêi gian kh«ng xa. Chóng em xin ch©n thμnh c¶m ¬n thÇy ! ------------------------------------------------------------------------------------------------------

Các file đính kèm theo tài liệu này:

  • pdfBài tập dài môn điều khiển số.pdf
Luận văn liên quan