Мазмұны:

STM32 құрылғылары бар RC сервосы үшін жоғары ажыратымдылықтағы PWM сигнал генерациясы: 3 қадам
STM32 құрылғылары бар RC сервосы үшін жоғары ажыратымдылықтағы PWM сигнал генерациясы: 3 қадам

Бейне: STM32 құрылғылары бар RC сервосы үшін жоғары ажыратымдылықтағы PWM сигнал генерациясы: 3 қадам

Бейне: STM32 құрылғылары бар RC сервосы үшін жоғары ажыратымдылықтағы PWM сигнал генерациясы: 3 қадам
Бейне: Extract GPS location in Arduino with Ublox Neo-6 and Neo 7m GPS modules 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 биттік серво ажыратымдылығын алғым келеді. Ішінара қазіргі заманғы цифрлық серверлерде 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 сигналдарын шығара алатын таймердің бірін пайдалану. Қазіргі цифрлық серво үшін кадр жиілігі 5 мс дейін төмендеуі мүмкін, бірақ ескі аналогтық серво үшін ол 20 мс немесе 50 Гц болуы керек. Сонымен, ең нашар сценарий ретінде оны жасайық. 72 МГц сағаты мен 16 биттік таймердің есептегіш ажыратымдылығымен біз 20 мс кадр жиілігін жабу үшін таймердің алдын ала есептегішін минимум 23 -ке орнатуымыз керек. Мен 24 -ті таңдадым, себебі 20 мс ішінде есептегішті дәл 60000 -ге орнатуым керек. CubeMX параметрін және 1 және 1,5 мс PWM сигналдарын скриншоттарда көруге болады. Өкінішке орай, 1 мс үшін таймердің есептегіші 3000 -ға орнатылуы керек, бұл бізге тек 11 биттік рұқсат береді. Жаман емес, бірақ мақсат 12 бит болды, сондықтан басқа нәрсені көрейік.

Әрине, егер мен STM32L476 сияқты таймерлік есептегіші 32 биттік микроконтроллерді таңдасам, бұл ажыратымдылық әлдеқайда жоғары болуы мүмкін және мәселе шешіледі.

Бірақ мен мұнда STM32F103 -те ажыратымдылықты одан әрі арттыратын балама шешімді ұсынғым келеді.

3 -қадам: Жоғары ажыратымдылық үшін каскадты таймерлер

Жоғары ажыратымдылыққа арналған каскадты таймерлер
Жоғары ажыратымдылыққа арналған каскадты таймерлер
Жоғары ажыратымдылыққа арналған каскадты таймерлер
Жоғары ажыратымдылыққа арналған каскадты таймерлер
Жоғары ажыратымдылыққа арналған каскадты таймерлер
Жоғары ажыратымдылыққа арналған каскадты таймерлер

Алдыңғы шешімдегі негізгі мәселе - кадр жиілігі (20 мс) PWM сигналымен салыстырмалы түрде жоғары (1 мен 2 мс арасында), сондықтан біз күткен кезде қалған 18 мс үшін кейбір құнды биттерді ысырап етеміз. келесі кадр. Бұл синхрондау үшін таймер байланысы мүмкіндігін қолдана отырып, таймерді каскадты түрде шешуге болады.

Мен TIM1 -ді кадр жиілігін (20 мс) және TIM2, TIM3 генераторы ретінде PWM сигналдарын жеңу үшін шебер ретінде қолданамын. Мастер құлдарды іске қосқанда, олар PWM сигналын тек бір импульстік режимде шығарады. Сондықтан мен бұл таймерлерде тек 2 мс жүруім керек. Бақытымызға орай, сіз бұл таймерлерді аппараттық түрде каскад жасай аласыз, сондықтан бұл синхрондау процессордың араласуын қажет етпейді және бұл өте дәл, дірілдеу ps аймағында. CubeMX параметрлерін скриншоттардан көруге болады.

Көріп отырғаныңыздай, мен прескаляр ретінде 3 таңдап алдым, сондықтан 2 мс үшін таймердің есептегішінде 48000 орнату керек. Бұл бізге 1 мс үшін 24000 береді, бұл бізге 14 биттік рұқсат үшін қажет. Тадаааа…

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

Бұл шешімнің басқа артықшылығы - кадр жиілігін өзгерту тек TIM1 кезеңін өзгертуді білдіреді. Қазіргі заманғы цифрлық серво үшін сіз 200-300 Гц-ке дейін түсе аласыз, бірақ дәл реттеуді қаласаңыз, сервистің нұсқаулығын қараңыз.

Ұсынылған: