Форум программистов, компьютерный форум, киберфорум
Наши страницы
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.61/23: Рейтинг темы: голосов - 23, средняя оценка - 4.61
dymkt
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 7
1

STM32F1 как высокоскоростной драйвер

27.01.2016, 16:10. Просмотров 4182. Ответов 12
Метки нет (Все метки)

Планируется использовать STM32F103C8T6 в роли драйвера гальванометра для отклонения луча.
Набросок принципа работы:
1)Съём семпла с датчика угла ротора
2)Вычисление знака разницы между значением семпла и значением требуемого угла
3)Подача/отключение сигнала на выход ключа соотв. направления(тяга ротора по/против ч.с.)
Т.е. получается регулируемый PWM с обратной связью через АЦП.

По такой схеме желательно получить приличную скорость смены положений ротора(порядка 100 микросекунд на каждую позицию, и как можно меньшую погрешность относительно датчика угла поворота.

Вопросы:
1)Получится ли по вышеприведённому принципу снять и обсчитать 100 12 битных семплов по 1мкс и выставить 100 раз пины управления ключами. Быть может буфер АЦП имеет задержку или ещё какие грабли?
2)Сколько ещё процессорного времени останется?
3)Ассемблер даст более высокую скорость обработки, или для этого вполне сгодится C-инструментарий?
4)Что прочитать для более глубокого понимания устройства контроллера?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2016, 16:10
Ответы с готовыми решениями:

Stm32f1 usart3 как принять строку
Доброго времени суток, подскажите пожалуйста как можно принять строку из uart, в интернете поискал...

stm32f1 как узнать, на каком порту сработало прерывание.
Пусть 2-е кнопки висят на pa13 и pc13. Есть внешнее прерывание, срабатывающее по изменению...

Высокоскоростной режим I2C-шины
Есть контроллер STM32F103C8T6, на котором поддерживаются только медленные I2C-режимы в 100 кГц и...

STM32F1
Доброго времени суток. Имеется STM32F103C8T6, изучив на него даташит сделал вывод, что для моей...

STM32F1 и обработка float
Добрый день. Возникла такая ситуация. Есть датчик, который выбрасывает в порт RS-485 данные вида АА...

12
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
27.01.2016, 16:32 2
Эта задача очень напоминает управление обычного BLDC мотора. При использовании данного процессора обработчик можно поместить прямо на прерывание от PWM. Это позволит устанавливать скважность прямо на каждый тик. Минимальны расходы из-за обработки прерывания составят примерно 5% (STM32 48 MHz), PWM 32 KHz. Так можно получить максимальное быстродействие. Если оно избыточно, то ставится RTOS и одним потоком выполняются нужные вычисления.

Мне кажется, в обработчике PWM всё замечательно уляжется.
"1)Съём семпла с датчика угла ротора"
- запуск ADC по началу PWM, передача по DMA
"2)Вычисление знака разницы между значением семпла и значением требуемого угла"
- взять оцифрованное, уже готовое, значение ADC и что-то с ним вычислить. ))
"3)Подача/отключение сигнала на выход ключа соотв. направления(тяга ротора по/против ч.с.)"
- переключить значение регистров направления, если надо, изменить значение регистра PWM. Две операции. ))

В результате, скорость реакции определяется частотой PWM (и мерой тормознутости вычислений)).

"Т.е. получается регулируемый PWM с обратной связью через ЦАП."
Слово ЦАП в описании не фигурировало, уточните ТЗ.
0
mShit
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
27.01.2016, 17:19 3
Только вот ТС хочет сэмплы с частотой 1МГц обрабатывать, а это уже предел для одного АЦП, и накладные расходы на вход в прерывание при такой частоте будут существенными.
И для гальванометров обычно PD регуляторы используют, а тут возможно и PID потребуется, т.к. ТС и скорость и точность нужна. А это уже врятли влезет, если только время сервоцикла увеличивать.
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
27.01.2016, 17:41 4
mShit, под "12 битных семплов по 1мкс" скорее всего понимается копипаст с описания ADC STM32F1х.

Обсчет PID регулятора не составляет сколь нибудь значительное время. Сам PID вырождается в операции с 3 величинами - значением ошибки, изменением значения ошибки, усредненная ошибка. Все это элементарные действия. Трудности начнутся тогда, когда захочется сделать PID с компенсацией задержки исполнения, да еще и с автонастройкой неизвестно-на-что.
Одно время я делал всё в обработчике прерывания, оно замечательно влезало (загрузка процессора не больше 50%), на XMiko и STM32F1, потом надоело пересчитывать и перешел на отдельный таск. Всё одно железо дико инерционное. ))
0
dymkt
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 7
27.01.2016, 18:28 5
По поводу точности АЦП(спс, поправили), вот это проект http://tomyko.net/mimyscope_v2c/ обнадёживает, по крайней мере графики на таких скоростях идут ровно. Мне кажется, даже за 10 семплов в 100 мкс можно выставить ротор с приличной погрешностью, хотя бы треть градуса.

И вопрос: если рассматривать чисто возможности ассемблера, можно ли просто за такт ядра взять значение из регистра АЦП в регистр ядра, что то там вычислить за 70 тактов с значением угла, которое ранее помещено в память другим контроллером по DMA, и выдать синал управления на 72 такт? Или всё не так просто?
0
vt340
0 / 0 / 0
Регистрация: 22.03.2015
Сообщений: 838
27.01.2016, 18:46 6
Цитата Сообщение от dymkt
И вопрос: если рассматривать чисто возможности ассемблера, можно ли просто за такт ядра взять значение из регистра АЦП в регистр ядра, что то там вычислить за 70 тактов с значением угла, которое ранее помещено в память другим контроллером по DMA, и выдать синал управления на 72 такт? Или всё не так просто?
Не так просто, за 700 тактов - может быть, за 70 - нет
0
u37
0 / 0 / 0
Регистрация: 07.02.2106
Сообщений: 3,113
27.01.2016, 18:49 7
STM32 не AVR. В нем операции по передаче данных буферизируются, а потому никогда нельзя знать точно, когда данные куда-то придут и будут исполнены. Даже такая простая процедура, как "ногодрыг" GPIO и то, представляет большие трудности. Точнее так - ногами подрыгать можно, но как это исполнится и будет ли выполнено вообще - это загадка (речь идет о максимальной скорости).
Поэтому, или переходите на AVR с четко предсказуемым исполнением, или отказывайтесь от идеологии подсчета тиков в работе с аппаратурой.

"даже за 10 семплов в 100 мкс можно выставить ротор с приличной погрешностью"
Посчитайте, какой мощности должен быть привод, чтобы выполнить эту задачу. И учтите, что более мощный мотор, как правило, более тяжелый (инерционный).
На ваш вопрос отвечаю - если написать программу на С и ее оптимизировать от ненужных вычислений, то можно считывать ADC и выполнять несложные расчеты с перенастройкой (коммутацию выходов) до 64 тыс. раз в секунду.
0
dymkt
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 7
27.01.2016, 19:51 8
Вот с гальванометром у меня тоже неоднозначная идея - из электродвигателя от комнатных вертолётов. Внутри неодимовый нигнит и пятифазный ротор целиком из медной обмотки, очень лёгкий, всё очень близко и без трения.
Поставлю его на аудиоусилок - надеюсь, хотя бы 200 гц c амплитудой 20градусов вытянет без сгорания обмотки...
0
omooro
0 / 0 / 0
Регистрация: 11.06.2010
Сообщений: 351
27.01.2016, 22:56 9
Непонятно как сделана механическая часть, если собираетесь регулировать положение то надо начинать с характеристик системы которую хотите регулировать, с теории управления. Потом уже выяснять влезет ли все, что нужно сделать в этот мк или нужно искать другое решение.
0
dymkt
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 7
07.02.2016, 16:47 10
На 300 Гц синусойде с лёгкой 5x5мм подложкой на оси - размах 15 градусов, выше - движок кипятит воду.
Допустим, частота синусоидальных колебаний осей при рисовании круга - 100Гц*100(приемлемое для поделки разрешение точек по 1й оси)=10кГц, а это значит 100мкс на точное поподание в сегмент n/100 градусов, это только на один из двух каналов. Такие характеристики дают примерно 10K точек в секунду в пределах 10 градусов.
Таки если удастся сделать несколько циклов измерений-коррекций за 100мкс - возможно выйдет годный драйвер...
0
OVY-srok
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
07.02.2016, 17:22 11
Цитата Сообщение от dymkt
Вот с гальванометром у меня тоже неоднозначная идея - из электродвигателя от комнатных вертолётов.
Плохая идея.
Проще взять уже готовую конструкцию - механику от винчестера. Получится установка произвольного угла с точностью в пару процентов - за 100us. Потребуется хорошее охлаждение !!! Управление исключительно аналоговым обратным контуром - ни один серийный мк не вытянет так сильно любимый вами пид на таких частотах. Обратная связь через ёмкостный сенсор, который придётся разогнать на десятки мегагерц.

Если хочется более высокой скорости, то придётся изготавливать зеркало и нигнитную систему - самому. Сомневаюсь что у вас получится лучше, чем вариант фирменных решений. Стоит посмотреть на фотки кишков фирменных быстрых гальванометров, что-бы навсегда отказаться от этой затеи.

Есть ещё вариант - поворот зеркала в статическом поле. Угол поворота - 1-5градуса, но зато частоты выше мегагерца!!! Как-бы страшно не звучало - но усилок собирается на лампах. А сама конструкция получается настолько простой - что её можно в любом гараже повторить.

Ещё вариант, но уже из разряда фантастики. Просто дождаться пока изобретут способ локально менять гравитацию, и уже с её помощью отклонять луч.
0
mShit
0 / 0 / 0
Регистрация: 12.08.2012
Сообщений: 1,217
07.02.2016, 17:35 12
Вот просто из любопытства можно подробнее про конструкцию собираемую в гараже и способную шевелить зеркалом на мегагерцовых частотах? А то я когдато баловался такими вещами, были у меня и самодельные гальванометры. Так вот однажды усилок возбудился и зеркало размером 6 х 6 х 1мм разлетелось в песок. И там и максимум десятки килогерц были, и то сомнительно.
0
dymkt
0 / 0 / 0
Регистрация: 24.01.2016
Сообщений: 7
09.02.2016, 22:37 13
Может быть это лёгкий полимер/керамика с зеркальным напылением, болтающийся в вакууме?

100-300Гц вертолётный движок вполне держит на углах 45-15 градусов с 5мм куском пластика нас оси, хоть почти обжигает палец
Очень плохо понимаю методику измерения K точек в секунду стандарта ILDA, если прикинуть, что 100 раз в секунду рисуется круг диаметром 45 градусов, то это будет апроксимация 100Гц синусойды с разрешением, к примеру, 100 семплов на период(10000 Гц/сек в итоге) для 10K точек. Реальные вектора картинки конечно сильно отклоняются от синусойды, но как правило, размах у них куда меньше чем 45 градусов.

Про минимальное время преобразования ADC STM32F4 http://youtu.be/qSCG0EKtoWQ 350мкс(очень долго)
0
09.02.2016, 22:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.02.2016, 22:37

STM32F1 VCP(VirtualComPort)
Добрый день всем, кто работал с ком портами помогите с обмен данными с ПК. Надо по нажатию...

Самопереподключение USB STM32F1
Юзаю STM32F103 в режиме usb-divice, usb подключен напрямую к контроллеру как здесь с подтяжкой...

STM32F1 RTC и BKP регистры
Привет всем. Помогите с настройкой RTC. После инициализации и запуска часов не сохраняются...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru