Агуулгын хүснэгт:

PID хянагч VHDL: 10 алхам
PID хянагч VHDL: 10 алхам

Видео: PID хянагч VHDL: 10 алхам

Видео: PID хянагч VHDL: 10 алхам
Видео: DIY Mod Gaggia Espresso Coffee Machine (Part 1) 2024, Долдугаар сарын
Anonim
PID хянагч VHDL
PID хянагч VHDL
PID хянагч VHDL
PID хянагч VHDL

Энэ төсөл бол Коркийн Технологийн дээд сургуулийн бакалавр зэрэгтэй төгсөх миний эцсийн төсөл байв. Энэхүү гарын авлага нь хоёр хэсэгт хуваагдсан бөгөөд эхний хэсэгт төслийн гол зорилго болох PID кодын үндсэн хэсгийг, хоёр дахь хэсэгт Basys 3 -ийн хөгжүүлэлтийн самбар дээр хэрэгжүүлж, дараа нь ширээний теннисний бөмбөгтэй холбосон кодын интерфейсийг багтаасан болно. levitation rig. Онолын болон бүтээсэн тоног төхөөрөмжийг хавсаргасан зурган дээр харуулав.

Хангамж

Симуляци

Vivado загварын иж бүрдэл

Хэрэгжилт (хаалтанд миний төсөлд ашигласан зүйл байна)

  • Дижитал/аналог дохиог оруулах, гаргах боломжтой FPGA самбар (Basys 3)
  • Нэг санал хүсэлтийн эх үүсвэрээр хянах боломжтой систем (ширээний теннисний бөмбөг өргөх төхөөрөмж)

Риг

  • Поликарбонат хоолой
  • 5V сэнс
  • IR мэдрэгч
  • 3D хэвлэмэл суурь (Энэхүү заавар нь эргэх төхөөрөмж авахын тулд мэдрэгчийг нэмж оруулсан боловч уг төхөөрөмж нь ерөнхийдөө ижил байсан)
  • 1k эсэргүүцэл
  • 5V ба GND төмөр зам бүхий талхны самбар

Алхам 1: Хяналтын үндсэн онол

Хяналтын үндсэн онол
Хяналтын үндсэн онол

Хяналтын анхан шатны онолыг нэмж оруулснаар энэ кодыг туршиж хэрэгжүүлэхийг хүссэн хэн бүхэнд эхлэх сайн үндэс болно гэж би бодсон.

Хавсаргасан диаграм нь нэг давталтын хянагчийн зохион байгуулалт юм.

r- лавлагаа юм. Энэ нь хянагч хаашаа явахыг хүсч байгааг тодорхойлдог.

e-алдаа юм. Энэ бол таны мэдрэгч болон лавлагааны утга хоорондын ялгаа юм. жишээ нь e = r- (d+мэдрэгчийн гаралт).

K-Энэ бол хянагч. Хянагч нь гурван нэр томъёоноос бүрдэж болно. Эдгээр нэр томъёо нь P, I, D юм. Гурван нэр томъёо нь Kp, Ki, Kd гэж нэрлэгддэг үржүүлэгчтэй байдаг. Эдгээр утгууд нь хянагчийн хариултыг тодорхойлдог.

  • P-пропорциональ. Хатуу P хянагч нь одоогийн алдаатай пропорциональ гаралттай байх болно. P хянагч нь хэрэгжүүлэхэд хялбар бөгөөд хурдан ажилладаг боловч таны тогтоосон утгад хэзээ ч хүрэхгүй (лавлагаа).
  • I-Integral. Хатуу интеграл хянагч нь өмнөх алдааг дүгнэж, эцэст нь хүссэн лавлагаанд хүрэх болно. Энэ хянагчийг хэрэгжүүлэхэд ерөнхийдөө хэт удаан байна. P нэр томъёог нэмснээр лавлагаанд хүрэх хугацаа багасах болно. Оролтыг түүвэрлэх хугацааг цаг хугацааны хувьд нэгтгэсэн нэр томъёог харгалзан үзэх шаардлагатай.
  • D-дериватив. Дериватив нэр томъёо нь алдааны өөрчлөлтийн хурдаас хамааралтай гаралттай байх болно. Энэ нэр томъёог ихэвчлэн P нэр томъёо эсвэл PI нэр томъёогоор ашигладаг. Энэ нь алдааны өөрчлөлтийн хурдтай пропорциональ байдаг тул дуу чимээтэй ганц бие дуу чимээгээ нэмэгдүүлж, системийг тогтворгүй байдалд хүргэж болзошгүй юм. Түүнчлэн үүсмэл нэр томъёо нь цаг хугацаатай холбоотой байдаг тул цаг хугацааг бас анхаарч үзэх хэрэгтэй.

U- Энэ бол хяналтын дохио юм. Энэ дохио нь өрмийн төхөөрөмжийн оролт юм. Энэ төслийн хувьд u нь хурдыг өөрчлөхийн тулд сэнсний PWM дохионы оролт юм.

G- Энэ бол хянаж байгаа систем юм. Энэ системийг S эсвэл Z домэйнд математикаар загварчилж болно. Систем нь n дахь дарааллаар байж болно, гэхдээ хяналтыг эхлүүлж буй хүний хувьд үүнийг тооцоолоход илүү хялбар байдаг тул эхний захиалгын системийг авч үзэх хэрэгтэй. Энэ бол загварчлалын системийн талаархи мэдээллийг онлайнаар олох боломжтой Plethora юм. Мэдрэгчийн дээж авах хугацаанаас хамааран системийн загвар нь салангид эсвэл тасралтгүй байдаг. Энэ нь хянагчид хүчтэй нөлөөлдөг тул хоёуланг нь судлахыг зөвлөж байна.

d- Энэ бол системд нэмэгдсэн эвдрэл юм. Эвдрэл бол системийн загварыг тооцдоггүй гадны хүчин зүйл юм. Үүний хялбар жишээ бол 5 метрт салхи шуурч, дроныг 1 метрийн зайд унагахыг хүсч буй дрон байж болох юм. Үүнийг үймээн самуун гэж нэрлэдэг, учир нь салхи давтагдашгүй тул үүнийг загварчлах боломжгүй юм.

Хянагчийг тааруулахын тулд нэрлэхэд хэтэрхий олон дүрэм байдаг, гэхдээ миний эхлүүлсэн зарим сайн зүйл бол Коэн Кун, Зигер Николс юм.

Системийг загварчлах нь ерөнхийдөө хамгийн чухал хэсэг бөгөөд яг нарийн загваргүй бол зохион бүтээгч нь хүссэн хэмжээгээр хариу өгөхгүй болно.

Энд хянагч нь бие даасан судалгаа хийж, гурван нэр томъёоны аль нэг хослолыг ашиглан хянагчийн доорх кодыг хэрхэн хэрэгжүүлэх талаар ойлгоход хангалттай мэдээлэл байх ёстой.

Алхам 2: PID код бичих

PID код бичих
PID код бичих

Дараах линкээс олж авсан кодын үндсэн зарчмыг авч үзээд энэ код нь ажиллахгүй байсан боловч маш олон зарчмууд зөв байсан нь сайн эхлэлийн цэгийг өгсөн юм. Жинхэнэ PID код нь хэд хэдэн алдаатай байсан

  • Тасралтгүй ажиллах - хянагч нь удамшлын хувьд салангид шинж чанартай байдаг тул хянагчийг шинэ оролт гарсан үед зөвхөн 3 нэр томъёог тооцоолохоор тохируулах шаардлагатай байв. Энэхүү симуляцийн гол ажил бол оролт сүүлийн удаа өөрчлөгдсөн эсэхийг шалгах явдал байв. Энэ нь кодыг зөв ажиллуулахын тулд л ажилладаг.
  • Дээж авах хугацаа нь интеграл ба үүсмэл нэр томъёонд нөлөөлөөгүй - Хянагч нь дээж авах хугацааг тооцоогүй тул интеграл ба үүсмэл нэр томъёог зөв ажиллуулахын тулд цаг хуваагч гэж нэрлэсэн утгыг нэмж оруулсан болно. интервал.
  • Алдаа нь зөвхөн позитив байж болно - алдааг тооцоолохдоо алдаа нь сөрөг утгатай байж чадахгүй тул алдаа нь сөрөг утгатай байж чадахгүй тул хянагч гаралтыг бууруулж байх үед гаралтын хэмжээг үргэлжлүүлэх болно.
  • 3 нэр томъёоны хувьд олж авсан утгууд нь бүхэл тоонууд байсан бөгөөд миний туршлагаас харахад хянагч дээрх 3 нэр томъёоны утга нь хөвөгч цэгийн дугааргүй тул Basys 3 -ийн улмаас үргэлж хөвөгч цэгийн тоо байх болно гэдгийг олж мэдсэн. Энэ асуудлыг даван туулахын тулд хийх үнэ цэнэ.

Кодыг доорх хавсралтаар оруулсан бөгөөд кодын үндсэн хэсэг ба кодыг дуурайх тестийн тавцан байдаг. Zip фолдер нь Vivado -д аль хэдийн орсон код, тестийн самбарыг агуулдаг бөгөөд ингэснээр цагийг хэмнэх үүднээс нээж болно. кодын загварчилсан тест бас байдаг бөгөөд энэ нь гаралтыг хянадаг бөгөөд энэ нь кодыг зориулалтын дагуу ажиллаж байгааг нотолж өгдөг.

Алхам 3: Системээ хэрхэн өөрчлөх вэ

Нэгдүгээрт, бүх системүүд ижил байдаггүй, системийн оролт, гаралтыг шинжлэх ёстой. Миний хувьд миний байрлалын үнэ цэнийг өгсөн өрмийн төхөөрөмжийн гаралт нь аналог дохио, системээс оруулсан оролт нь ХОУХ -ны дохио байсан. ADC хөрвүүлэх шаардлагатай байсан гэсэн үг. Аз болоход Basys 3 нь ADC-д суурилагдсан тул IR мэдрэгчийн гаралтыг 0V-1V болгон багасгах шаардлагатай байсан тул энэ нь ADC-ийн хамгийн дээд хүрээ юм. Үүнийг хүчдэл хуваах хэлхээг ашиглан 1к эсэргүүцэл бүхий 3к эсэргүүцэл болгон 3к эсэргүүцэл болгон хийсэн. Аналог дохио одоо ADC -ийн хүрээнд байсан. Сэнсний ХОУХ -ны оролт нь Basys 3 дээрх PMOD портын гаралтаар шууд хөтлөгдөх боломжтой.

Алхам 4: Basys 3 дээр I/O -ийн давуу талыг ашиглах

Basys 3 дээр код ажиллаж байх үед дибаг хийх ажлыг хөнгөвчлөх хэд хэдэн I/O байдаг. Оролт гаралтыг дараах байдлаар тохируулсан болно.

  • Долоон сегментийн дэлгэц - Энэ нь ADC дээрх лавлагаа, утгыг вольтоор харуулахад ашигласан болно. Долоон сегментийн дэлгэцийн эхний хоёр цифр нь ADC утгын аравтын бутархай орны дараах хоёр оронтой тоог харуулна. Долоон сегментийн дэлгэц дээрх гурав ба дөрөв гэсэн тоонууд нь лавлагаа утгыг вольтоор харуулдаг бөгөөд энэ нь аравтын бутархайгаас хойшхи эхний хоёр цифрийг мөн харуулдаг.
  • 16 LED - LED нь гаралтыг хангаж, гаралт зөв өөрчлөгдөж байгаа эсэхийг баталгаажуулахын тулд гаралтын утгыг харуулахад ашигласан.

Алхам 5: IR мэдрэгчийн гаралтын чимээ

Энэ асуудлыг шийдэхийн тулд мэдрэгчийн гаралт дээр дуу чимээ гарч байсан бөгөөд энэ нь хангалттай байсан бөгөөд үүнийг дуусгахын тулд маш бага ажил шаардагддаг.

Алхам 6: Кодын ерөнхий бүтэц

Кодын ерөнхий бүтэц
Кодын ерөнхий бүтэц

Одоогоор яриагүй байгаа нэг код байна. Энэ код нь гох гэж нэрлэгддэг цаг хуваагч юм. Энэ бит код нь ADC кодыг дээж авахад хүргэдэг. ADC кодыг бөглөхөд хамгийн ихдээ 2us шаардлагатай тул одоогийн оролт ба өмнөх оролтыг дунджаар тооцно. 1us -ийн дараа хянагч нь P, I, D нэр томъёог тооцоолно. код болон интерфэйсийн бүх схемийг холболтын диаграммд харуулав.

Алхам 7: Туршилт

Туршилт
Туршилт

Кодыг Basys 3 дээр байрлуулсан бөгөөд дараахь хариултыг бичсэн болно. лавлагаа нь 2 утгын хооронд өөрчлөгдсөн. дууссан төслийн кодыг хавсаргасан тохиолдолд ийм байдаг. Хавсаргасан видео нь энэ хариуг бодит цаг хугацаанд харуулдаг. Хяналт нь энэ бүсэд зориулагдсан тул хоолойн дээд хэсэгт хэлбэлзэл илүү хурдан мууддаг боловч систем нь шугаман бус тул хянагч хоолойноос доошоо сайн ажилладаггүй.

Алхам 8: Төслийг сайжруулах нэмэлт өөрчлөлтүүд

Төсөл төлөвлөсний дагуу ажилласан боловч төслийг сунгах боломжтой байсан бол би хэд хэдэн өөрчлөлт оруулах байсан.

  • Дуу чимээг бүрэн намжаахын тулд дижитал шүүлтүүрийг ашиглана уу
  • ADC код, Дундаж код, Интеграцийн кодыг дараалан эхлүүлэхийн тулд тохируулна уу.
  • Энэ мэдрэгчийн шугаман бус хариу үйлдэл нь энэ төсөлд олон янзын асуудал үүсгэсэн боловч энэ нь кодлох тал дээр биш харин хяналтын тал дээр илүү ихээр нөлөөлж байгаа тул санал хүсэлт гаргахын тулд өөр мэдрэгч ашиглана уу.

Алхам 9: Нэмэлт ажил

Зуны турш би каскад хянагчийн код бичиж, ганц давталттай PID хянагчийн санал болгосон өөрчлөлтүүдийг хэрэгжүүлсэн.

Энгийн PID хянагчийн өөрчлөлт

· Хүссэн таслах давтамжийг олж авахын тулд коэффициентүүдийг хэрэгжүүлсэн FIR шүүлтүүрийн загварыг өөрчлөх шаардлагатай. Одоогийн хэрэгжилт нь 5 цорго гацуур шүүлтүүр юм.

· Кодын цагийг тохируулсан бөгөөд ингэснээр шүүлтүүр нь шинэ дээжийг дамжуулж, гаралт бэлэн болмогц интеграл нэр томъёог идэвхжүүлнэ. код.

· Хөтөлбөрийг жолооддог гол давталтын давтамжийг мөн багасгасан бөгөөд энэ нь 7 мөчлөгтэй байсан тул өмнө нь хянагчийн ажиллах хамгийн дээд хурдыг удаашруулж байсан боловч t 4 давталтыг багасгаснаар кодын үндсэн блок ажиллах боломжтой гэсэн үг юм. 4 цагийн мөчлөгийн дотор.

Туршилт

Энэхүү хянагчийг туршиж үзээд төлөвлөсний дагуу гүйцэтгэсэн. Төслийн энэ хэсэг нь зөвхөн оюун санааг идэвхтэй байлгах зорилготой байсан тул би энэ нотолгооны зургийг аваагүй. Туршилтын кодыг тестийн тавцан дээр ашиглах боломжтой тул програмыг хэрэгжүүлэхээс өмнө туршиж үзэх боломжтой болно.

Яагаад каскад хянагч ашиглах ёстой гэж

Каскад хянагч нь системийн хоёр хэсгийг хянадаг. Энэ тохиолдолд каскад хянагч нь гадна талын гогцоотой байх бөгөөд энэ нь хэт улаан туяаны мэдрэгчийн санал хүсэлтийг хүлээн авдаг хянагч юм. Дотоод гогцоо нь тахометрийн импульсийн хоорондох хугацааны хэлбэртэй байдаг бөгөөд энэ нь сэнсний эргэлтийн хурдыг тодорхойлдог. Хяналтыг хэрэгжүүлснээр системээс илүү сайн хариу үйлдэл үзүүлэх боломжтой болно.

Каскад хянагч хэрхэн ажилладаг вэ?

Хянагчийн гадаад гогцоо нь импульсийн хоорондох давталтын дотоод хянагч хүртэлх хугацааны утгыг өгнө. Дараа нь энэ хянагч нь импульсийн хоорондох хүссэн хугацаандаа хүрэхийн тулд ажлын мөчлөгийг нэмэгдүүлэх эсвэл багасгах болно.

Тоног төхөөрөмжийн өөрчлөлтийг хэрэгжүүлэх

Харамсалтай нь, би нэвтрэх эрхгүй байсан тул эдгээр өөрчлөлтийг өрмийн төхөөрөмж дээр хэрэгжүүлж чадсангүй. Би зориулалтын дагуу ажилладаг нэг давталттай хянагчийг туршиж үзсэн. Би каскад хянагчийг хараахан туршиж үзээгүй байна. Хянагч ажиллах болно гэдэгт итгэлтэй байна, гэхдээ зориулалтын дагуу ажиллахын тулд бага зэрэг өөрчлөлт оруулах шаардлагатай байж магадгүй юм.

Туршилт

Хоёр оролтын эх үүсвэрийг дуурайх нь хэцүү байсан тул би хянагчийг туршиж чадаагүй. Гаднах хүрд нь дотоод гогцоонд нийлүүлсэн тогтоосон цэгийг нэмэгдүүлэхийг оролдох тусам илүү том тохируулгын цэг нь үнэндээ сэнсний хувьд бага RPS боловч үүнийг хялбархан засах боломжтой байдаг. тогтоосон цэгийн дохионы хамгийн их утгаас тогтоосон цэгийг авна (4095 - тогтоосон цэг - tacho_result).

Алхам 10: Дүгнэлт

Төсөл ерөнхийдөө төсөл эхлэх үед миний төлөвлөсний дагуу ажилладаг тул үр дүнд нь сэтгэл хангалуун байдаг. VHDL дээр PID хянагч хөгжүүлэх оролдлогыг минь уншихад цаг зав гаргасанд баярлалаа. Хэрэв хэн нэгэн энэ хувилбарыг систем дээр хэрэгжүүлэхийг оролдож байгаа бөгөөд кодыг ойлгохын тулд бага зэрэг дэмжлэг шаардлагатай бол надтай холбоо бариарай, би аль болох хурдан хариулах болно. Нэмэлт ажлыг хийж үзсэн боловч хэрэгжүүлээгүй хэн бүхэн надтай холбоо бариарай. Үүнийг хэрэгжүүлж байгаа хүн надад энэ үйл явц хэрхэн явагдаж байгааг мэдэгдвэл би үүнд маш их талархах болно.

Зөвлөмж болгож буй: