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

STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх: 3 алхам
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх: 3 алхам

Видео: STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх: 3 алхам

Видео: STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх: 3 алхам
Видео: СКР 1.3 - Сервопривод 2024, Долдугаар сарын
Anonim
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх
STM32 төхөөрөмжтэй RC servo -д зориулсан өндөр нарийвчлалтай PWM дохио үүсгэх

Одоогийн байдлаар би SX1280 RF чип дээр суурилсан RC дамжуулагч/хүлээн авагч барьж байна. Төслийн нэг зорилго бол би модноос 12 битийн servo нарийвчлалтайгаар servos хүртэл авахыг хүсч байна. Зарим талаар орчин үеийн дижитал servo нь 12 битийн нягтралтай байдаг, хоёрдугаарт, өндөр чанартай дамжуулагч нь 12 битийг ашигладаг. Би STM32 төхөөрөмж дээр өндөр нарийвчлалтай ХОУХШ -ийн дохиог хэрхэн яаж үүсгэх талаар судалж байсан. Би одоогоор прототипийн хувьд хар эм (STM32F103C8T8) хэрэглэж байна.

Алхам 1: эд ангиудын жагсаалт

Техник хангамж

  • Аливаа STM32F103 хөгжлийн самбар (цэнхэр эм, хар эм гэх мэт)
  • Цахилгаан хангамжийн USB USB банк
  • STM32 програмист (Segger j-links, ST-LINK/V2, эсвэл зүгээр л st-link clone)

Програм хангамж

  • STM32CubeMX
  • STM32 -д зориулсан Атолик TrueSTUDIO
  • Github -аас авсан төслийн эх сурвалж

Алхам 2: Тодорхой шийдэл

Тодорхой шийдэл
Тодорхой шийдэл
Тодорхой шийдэл
Тодорхой шийдэл
Тодорхой шийдэл
Тодорхой шийдэл

Хамгийн хялбар шийдэл бол STM32F103 дээрх TIM1-3 гэх мэт ХОУХД дохио үүсгэж болох таймеруудын нэгийг ашиглах явдал юм. Орчин үеийн дижитал servo -ийн хувьд фрэймийн хурд 5 мс хүртэл буурч болох боловч хуучин аналог servo хувьд 20 ms буюу 50 Гц байх ёстой. Тиймээс, хамгийн муу тохиолдолд үүнийг бий болгоё. 72 МГц давтамжтай, 16 битийн таймер тоолуурын нарийвчлалтайгаар бид 20 мс -ийн хүрээний хурдыг хангахын тулд таймерын prescaler -ийг хамгийн багадаа 23 болгож тохируулах ёстой. Би 24 -ийг сонгосон, учир нь 20 мс -ийн хувьд би тоолуурыг яг 60000 болгож тохируулах ёстой. Та CubeMX -ийн тохиргоо болон үүсгэсэн 1 ба 1.5 мс PWM дохиог дэлгэцийн агшинд харж болно. Харамсалтай нь 1ms -ийн хувьд таймерын тоолуурыг 3000 болгож тохируулах ёстой бөгөөд энэ нь бидэнд ердөө 11 битийн нарийвчлалыг өгөх болно. Муу биш, гэхдээ зорилго нь 12 бит байсан тул өөр зүйл туршиж үзье.

Мэдээжийн хэрэг, хэрэв би STM32L476 гэх мэт 32 битийн таймертай микро хянагчийг сонговол энэ нарийвчлал илүү өндөр байж, асуудлыг шийдэх болно.

Гэхдээ энд STM32F103 дээр ч гэсэн нарийвчлалыг нэмэгдүүлэх өөр шийдлийг санал болгохыг хүсч байна.

Алхам 3: Өндөр нарийвчлалтай каскад таймерууд

Өндөр нарийвчлалтай каскад таймерууд
Өндөр нарийвчлалтай каскад таймерууд
Өндөр нарийвчлалтай каскад таймерууд
Өндөр нарийвчлалтай каскад таймерууд
Өндөр нарийвчлалтай каскад таймерууд
Өндөр нарийвчлалтай каскад таймерууд

Өмнөх шийдлийн гол асуудал бол фрэймийн хурд (20 ms) нь бодитоор үүсгэгдсэн ХОУХ -ны дохиотой харьцуулахад харьцангуй өндөр (1-2 мс хооронд) байдаг тул бид хүлээж байх үедээ үлдсэн 18 мс -ийн зарим үнэ цэнэтэй битүүдийг үрэн таран хийж байна. дараагийн хүрээ. Үүнийг синхрончлохын тулд таймерын холбоосын функцийг ашиглан таймеруудыг каскад хийх замаар шийдэж болно.

Би TIM1 -ийг ашиглан фрэймийн хурд (20 ms), TIM2, TIM3 -ийг боол болгон ХОУХ -ны дохиог даван туулах болно. Мастер боолуудыг өдөөхөд тэд зөвхөн нэг импульсийн горимд ХОУХД дохио үүсгэдэг. Тиймээс би эдгээр таймеруудад ердөө 2 мс багтаах ёстой. Аз болоход та эдгээр цаг хэмжигчийг тоног төхөөрөмжөөр тоноглох боломжтой бөгөөд ингэснээр синхрончлол нь процессорын оролцоог шаарддаггүй бөгөөд энэ нь маш нарийвчлалтай байдаг. CubeMX -ийн тохиргоог дэлгэцийн агшин дээрээс харж болно.

Таны харж байгаагаар би prescalar болгон 3 -ийг сонгосон тул 2 ms -ийн хувьд таймерын тоолуурт 48000 -ийг тохируулах шаардлагатай байна. Энэ нь 1 мс -ийн хувьд 24000 өгдөг бөгөөд энэ нь бидэнд 14 битийн нарийвчлалд хэрэгтэй зүйл юм. Тадааа…

Эцсийн үр дүнг танилцуулах осциллографын дэлгэцийн агшинг харна уу. 3 -р суваг (нил ягаан) нь цаг хэмжигчийн тасалдал бөгөөд энэ нь нэг лугшилтыг үүсгэхэд хүргэдэг. 1 ба 4 -р суваг (шар, ногоон туяа) нь өөр өөр цаг хэмжигчдийн үүсгэсэн ХОУХ -ны бодит дохио юм. Тэдгээр нь синхрончлогдсон байдаг, гэхдээ тэдгээр нь ХОУХ -ны горим 2 -оос үүдэлтэй байдаг. Энэ нь асуудал биш юм.

Энэхүү шийдлийн өөр давуу тал нь хүрээний хурдыг өөрчлөх нь зөвхөн TIM1 -ийн хугацааг өөрчлөх гэсэн үг юм. Орчин үеийн дижитал servo-ийн хувьд та 200-300 Гц хүртэл буурах боломжтой боловч хэрэв та нарийн тааруулахыг хүсвэл servo-ийн гарын авлагаас лавлана уу.

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