Мазмуну:

STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы: 3 кадам
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы: 3 кадам

Video: STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы: 3 кадам

Video: STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы: 3 кадам
Video: #12 VTScada Modbus Digital окуу/жазуу | Outseal Arduino PLC #VTScada #Modbus #PLC #ArduinoPLC 2024, Ноябрь
Anonim
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы
STM32 түзмөктөрү менен RC сервосу үчүн жогорку чечилиштүү PWM сигнал генерациясы

Учурда мен SX1280 RF чипине негизделген RC өткөргүчүн/алуучусун куруп жатам. Долбоордун максаттарынын бири - мен таякчалардан servoго чейин 12 битлик серво чечимин каалайм. Жарым-жартылай, анткени заманбап санарип servoлордо 12 биттик чечим бар, экинчиден, жогорку деңгээлдеги өткөргүч 12 битти колдонот. Мен STM32 түзмөктөрүндө жогорку чечилдиктеги PWM сигналдарын кантип жаратуумду изилдеп жаттым. Мен прототип үчүн учурда кара таблетканы (STM32F103C8T8) колдонуп жатам.

1 -кадам: Бөлүктөрдүн тизмеси

Аппараттык

  • Бардык STM32F103 өнүктүрүү тактасы (көк таблетка, кара таблетка ж.
  • Электр булагы катары USB кубат банкы
  • STM32 программисти (Segger j-links, ST-LINK/V2, же жөн гана st-link клону)

Программалык камсыздоо

  • STM32CubeMX
  • STM32 үчүн Atollic TrueSTUDIO
  • Githubдан алынган долбоордун булагы

2 -кадам: айкын чечим

Айкын Чечим
Айкын Чечим
Айкын Чечим
Айкын Чечим
Айкын Чечим
Айкын Чечим

Балким, эң оңой чечим-STM32F103төгү TIM1-3 сыяктуу PWM сигналдарын түзө турган таймердин бирин колдонуу. Заманбап санарип servo үчүн кадр ылдамдыгы 5 мс чейин түшүшү мүмкүн, бирок эски аналогдук серво үчүн 20 мс же 50 Гц болушу керек. Ошентип, эң начар сценарий катары муну түзөлү. 72 МГц саат жана 16 биттик таймердин эсептөөчү чечими менен биз 20 мс кадр ылдамдыгын жабуу үчүн таймердин прескалаторун минималдуу 23кө коюшубуз керек. Мен 24тү тандадым, анткени 20 мс үчүн мен эсептегичти так 60000гө коюшум керек. CubeMX орнотуусун жана 1 жана 1,5 мс PWM сигналдарын скриншоттон көрө аласыз. Тилекке каршы, 1 мс үчүн таймердин эсептегичи 3000ге коюлушу керек, бул бизге 11 битти гана берет. Жаман эмес, бирок максат 12 бит болчу, андыктан башка нерсени сынап көрөлү.

Албетте, эгерде мен 32 бит таймери бар микро контроллерди тандай турган болсом, STM32L476 сыяктуу бул чечим алда канча жогору болот жана маселе чечилет.

Бирок бул жерде мен STM32F103 боюнча дагы токтомду жогорулатуучу альтернативалуу чечимди сунуш кылгым келет.

3 -кадам: Жогорку чечим үчүн каскаддык таймерлер

Жогорку чечим үчүн каскаддык таймерлер
Жогорку чечим үчүн каскаддык таймерлер
Жогорку чечим үчүн каскаддык таймерлер
Жогорку чечим үчүн каскаддык таймерлер
Жогорку чечим үчүн каскаддык таймерлер
Жогорку чечим үчүн каскаддык таймерлер

Мурунку чечимдин негизги көйгөйү кадр ылдамдыгы (20 мс) иш жүзүндө түзүлгөн PWM сигналына салыштырмалуу жогору (1ден 2 мске чейин), ошондуктан биз күтүп жаткан кезде калган 18 мс үчүн кээ бир баалуу биттерди текке кетирип жатабыз. кийинки кадр. Муну синхрондоштуруу үчүн таймердин шилтеме мүмкүнчүлүгүн колдонуу менен каскаддык таймерлер чечсе болот.

Мен TIM1ди кадр ылдамдыгын (20 мс) жана TIM2, TIM3ти PWM сигналдарын кул катары иштетүү үчүн кожоюн катары колдоном. Кожоюн кулдарды иштеткенде, алар PWM сигналын бир импульс режиминде гана жаратышат. Ошондуктан мен бул таймерлерде 2 мс гана жабышым керек. Бактыга жараша, сиз бул таймерлерди аппараттык түрдө каскад кыла аласыз, андыктан бул синхрондоштуруу процессордун кийлигишүүсүн талап кылбайт жана ал абдан так, джитс ps аймагында. CubeMX орнотууларын скриншоттордон көрө аласыз.

Көрүнүп тургандай, мен prescalar катары 3тү тандадым, андыктан 2 мс үчүн таймердин эсептегичине 48000 орнотушум керек. Бул бизге 1 мс үчүн 24000 берет, бул чындыгында бизге 14 бит чечүү үчүн керек. Таааааа…

Сураныч, акыркы натыйжа үчүн киришүүдөгү осциллографтын скриншотторун карап көрүңүз. Канал 3 (кызгылт көк) - бул таймерлердин үзүлүшү, ал бир импульсту жаратат. Канал 1 жана 4 (сары жана жашыл нур) - ар кандай таймерлер тарабынан чыгарылган чыныгы PWM сигналдары. Көңүл бургула, алар синхрондоштурулган, бирок алар PWM режиминин 2 себеби болуп саналат.

Бул чечимдин башка пайдасы кадр ылдамдыгын өзгөртүү TIM1 мезгилин гана өзгөртүү дегенди билдирет. Заманбап санарип серволор үчүн сиз 200-300 Гцке чейин түшө аласыз, бирок эгер сиз жакшы жөндөөнү кааласаңыз, сервонун колдонмосуна кайрылыңыз.

Сунушталууда: