|
Есть задача под STM32, Изделие не серийное. Всего сделаем штук 5 |
|
|
|
Dec 26 2014, 00:20
|

Участник

Группа: Участник
Сообщений: 37
Регистрация: 2-03-10
Из: М.О.
Пользователь №: 55 769

|
Здравия желаю. Есть разработанная и собранная плата, но нужен софт. Устройство собрано в пяти экземплярах и не факт, что будет тиражироваться.
Плата на STM32f415
Вообще-то есть и софт под всё это дело, он даже как-то работал, но есть следующие особенности: 1. с тех пор я изменил схему и камень (тоже STM32, но я взял покруче), добавил по аналоговым входам усилители PGA с управлением по SPI, на выходе поставил опторазвязку, управление скоростью PWM вместо DAC. 2. исходник без комментов, недостаточно структурен, на си, программист устал и отвалился. 3. Математики я почти совсем не знаю, но мой друг математик, видевший этот код, говорил о неоптимальности применённого алгоритма синхронного детектирования (выделения первой гармоники). Он готов на математическом языке понимальщику свои соображения изложить. Но в принципе, даже я почти всё понимаю в этом коде, кто там что делает. "Даже" относится к тому, что я не программист, тем более, что почти совсем не знаю си, но на Паскалевиче программки допиливал-модернизировал-фиксил.
Да, всё железо уже есть, включая программатор, отладочные платки для разминки, компьютер, частотный привод, мотор с энкодером и проч.
Теперь Т.з.: Нужно разработать ПО следующего устройства ввода-вывода. Технические параметры: 3 цифровых входа инкрементного углового датчика - опорный(0), квадратурные "А" и "В". Уровни сигналов - TTL. Диапазон частот опорного сигнала 0-500Гц. 4 аналоговых входа с предусилителями с переключаемым по SPI коэфф. усиления. Диапазон частот полезного сигнала 0.5-500Гц. Диапазон напряжений на 4-х аналоговых входах 0.5 - 4.5V(p-p), ноль смещён на 2.5V, но постоянная составляющая не интересует, соответственно на входе - развязывающий кондюк. Интерфейс с ведущим компьютером - MODBUS RS-232
Режимы работы: 0. Режим управления: принимаем из компьютера управляющие посылки: 15 байт данных + один байт - команда включить один из режимов работы. 1. Режим разгона: получаем с порта значение требуемой скорости вращения, ШИМом преобразуем с каким-то коэффициентом в управляющее напряжение, пропорционально требуемой скорости, меряем частоту опорного сигнала (Z), как только её нестабильность станет меньше константы, переходим в режим измерения, если так и не стала стабильной (нестабильность меньше соотв. константы) за заданное константой время разгона - выдать соответствующий код ошибки на порт и продолжать ловить частоту. 2. Режим измерения: непрерывно получаем оцифрованные сигналы с встроенного АЦП (от 1-го до 4-х) и опорные импульсы, синхронно детектируем, т.е. выделяем из всех аналоговых сигналов первую гармонику (sin/cos преобразование) с частотой, равной частоте опорных импльсов, векторно усредняем значения амплитуд и фаз сигналов и N раз в сек. выдаём в порт накопленные за этот период усреднённые значения амплитуд и фаз по каждому из 4-х каналов и опорной частоты. Не всегда нужны все 4 канала АЦП. Скорее всего, экономить время, выбирая к-во каналов АЦП, меньшее, чем 4, и не нужно - надо смотреть. В начале измерения по каждому каналу подбираем коэфф. усиления для оптимального попадания во входной диапазон АЦП и записываем их в соответствующий программируемый усилитель по SPI Надо мерить ОДНОВРЕМЕННО все каналы и загонять данные через DMA. Вроде, скоростей должно хватить. АЦП 12 разрядов, 3. Режим измерения угла: получаем импульсы: опорный(0) и 2 квадратурных с двух каналов энкодера, непрерывно считаем их и выдаём в порт угловое значение в единицах, равных учетверённому количеству импульсов на оборот энкодера. Выдача в порт по запросу. энкодер 600 имп. на оборот (или меньше) При этом энкодер в некоторых случаях соединен с ротором, угловое положение которого интересует, при помощи ременной передачи, соответственно от случая к случая количество импульсов на оборот разное. Но индексный импульс (Z) приходит с метки на измеряемом роторе, соответственно мы за один поворот ротора всегда получаем строго один и только один импульс. И при повороте ротора вручную или на выбеге можем посчитать число импульсов А и В на оборот. 4. Режим вывода - по сигналу с порта выводим биты на шесть ног (оптопары). 5. режим позиционирования - два выхода (оптопары) - команда "вперёд" и "назад", один выход - через ШИМ и оптопару делает управляющее постоянное напряжение на привод (скорость). На порт компьютер посылает два байта - значение требуемого угла позиционирования, контроллер, играя означенными тремя оптопарами, заставляет привод спозиционировать ротор на нужный угол.
Пишите на fesadd@gmail.com
В случае успешного опыта сотрудничество обещает быть продлённым...
UPD 2 ALL: Кактегорически не приветствуется обсуждение избранной мной стратегии решения МОЕЙ задачи и схемное реализации оной.
Кактегорически приветствуются и рукопожимаются конкретные предложения услуг по созданию/допилу ПО.
С пониманием и поддержкой отношусь к вопросам/уточнениям, высказанным с целью лучшего понимания поставленной задачи.
Спасибо за в нимание.
Сообщение отредактировал Fester Addams - Dec 26 2014, 01:17
--------------------
Лиссажу. Дорого. - тел. 322-223-32.
|
|
|
|
|
 |
Ответов
|
Dec 26 2014, 12:23
|

Участник

Группа: Участник
Сообщений: 37
Регистрация: 2-03-10
Из: М.О.
Пользователь №: 55 769

|
Цитата(AlexandrY @ Dec 26 2014, 14:35)  А можно не синхронно детектировать? А усреднять не векторно? Можно, но мне нужно то, что я написал. Цитата(Shivers @ Dec 26 2014, 14:49)  Если это тот камень, о котором я думаю, т.е. CortexM4 разработки якобы НИИЕТ, а на самом деле - ЦР, то почему бы сразу не обратиться к авторам тестового софта под него, а именно, к Вектору? Они профи, с этим камнем год почти возились. Сразу предупреждаю, если этот тот самый камень, то намучаетесь с ним .. одно DMA там чего стоит армовское ... Это камень от ST.com Названные Вами буквы мне неведомы.
Сообщение отредактировал Fester Addams - Dec 26 2014, 12:25
--------------------
Лиссажу. Дорого. - тел. 322-223-32.
|
|
|
|
|
Dec 26 2014, 12:46
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(Fester Addams @ Dec 26 2014, 14:23)  Можно, но мне нужно то, что я написал. Так вам нужна первая или главная гармоника? Или нужна траектория n-ой гармоники во времени? Какая точность оценки нужна? В курсе что фильтр постоянной составляющей вносит фазовые искажения? Какой динамический диапазон сигналов? Задача может быть вообще нетривиальной при достаточно высокой частоте измерений.
|
|
|
|
|
Dec 26 2014, 13:27
|

Участник

Группа: Участник
Сообщений: 37
Регистрация: 2-03-10
Из: М.О.
Пользователь №: 55 769

|
Цитата(AlexandrY @ Dec 26 2014, 16:46)  Так вам нужна первая или главная гармоника? Или нужна траектория n-ой гармоники во времени? Только первая. Только она, родимая. Цитата В курсе что фильтр постоянной составляющей вносит фазовые искажения? Да. Я их расчитываю для заданного диапазона частот и могу компенсировать в своей программе, но ето не так критично, поэтому пока ленюсь ето делать. Цитата Какой динамический диапазон сигналов? Полный диапазон 70ДБ, но во время одного измерения диапазон не более 36 ДБ, так предварительно подбирается оптимальное усиление. Цитата Задача может быть вообще нетривиальной при достаточно высокой частоте измерений. Может, разумеется, но я обозначал в ТЗ диапазон частот - там скромно, тем более, что если всё-таки проц не поспевает обрабатывать каждый период, он может периодически часть игнорировать, что и было реализовано при обработке на 33MHz 16-ти разрядных процах. Ибо всё равно потом происходит векторное усреднение, при таком игнорировании выпадает часть из очень большого объёма информации, что приводит только к некоторому увеличению времени накопления статистического результата. Но поскольку частота-таки больша, то всё это, даже замедленное "выкидышами", происходит с достаточной для меня быстротой.
Сообщение отредактировал Fester Addams - Dec 26 2014, 13:32
--------------------
Лиссажу. Дорого. - тел. 322-223-32.
|
|
|
|
|
Dec 26 2014, 13:57
|

Участник

Группа: Участник
Сообщений: 37
Регистрация: 2-03-10
Из: М.О.
Пользователь №: 55 769

|
Цитата(AlexandrY @ Dec 26 2014, 17:44)  А что это за мутный термин такой - 'векторное усреднение' применительно к отсчетам АЦП. Каждый отсчёт АЦП даёт мгновенное значение напряжения, которое мне не нужно, мне нужно знать векторно усреднённое значение амплитуды и фазы сигнала относительно сигнала "Z", а отсчётов должно быть достаточно много на один период, чтобы можно было быстро получить представление о фазе (теорема Стьюдента). Для этого по каждому периоду получаем амплитуду и фазу(вектор), и потом производим сложение этих векторов за сколько-то периодов, потом делим на число периодов. Если число периодов, за которое мы делаем это в. усреднение - степень двойки, то можно вместо деления для ускорения применять сдвиг. Что на STM32F4 , всего скорей и не нужно.
--------------------
Лиссажу. Дорого. - тел. 322-223-32.
|
|
|
|
|
Dec 26 2014, 19:41
|
Знающий
   
Группа: Участник
Сообщений: 835
Регистрация: 9-08-08
Из: Санкт-Петербург
Пользователь №: 39 515

|
Цитата(Fester Addams @ Dec 26 2014, 16:57)  Каждый отсчёт АЦП даёт мгновенное значение напряжения, которое мне не нужно, мне нужно знать векторно усреднённое значение амплитуды и фазы сигнала относительно сигнала "Z", а отсчётов должно быть достаточно много на один период, чтобы можно было быстро получить представление о фазе (теорема Стьюдента). Для этого по каждому периоду получаем амплитуду и фазу(вектор), и потом производим сложение этих векторов за сколько-то периодов, потом делим на число периодов. Я думаю эта задача может быть решена следующим, вполне традиционным способом: - делается цифровой квадратурный генератор, частота и фаза которого привязываются к "Z" с помощью цифровой ФАПЧ - полученный квадратурный сигнал умножается на входной - результат умножения фильтруется НЧ фильтром с полосой пропускания около 5 Герц (тут можно использовать CIC дециматор в 100-500 раз + FIR), и получается искомый вектор в форме комплексного числа. Фильтровать скорее всего лучше, чем просто усреднять, так как усреднение - это тот же НЧ фильтр, но с поганой характеристикой. Ваш процессор получится загрузить процентов на 10-20, если всё на плавучке считать. Серьёзной проблемой может стать нестабильное усиление PGA. По 4 и 5 режимам вообще ничего не понятно  .
|
|
|
|
|
Dec 26 2014, 20:50
|

Участник

Группа: Участник
Сообщений: 37
Регистрация: 2-03-10
Из: М.О.
Пользователь №: 55 769

|
Цитата(Timmy @ Dec 26 2014, 23:41)  По 4 и 5 режимам вообще ничего не понятно  . 4 режим - с порта rs232 пришёл байт и 6 младших бит из него отразились на 6 ногах проца, к которым приделаны светодиоды оптопар. Просто дискретные выходы. 5 режим - пришло с порта 2 байта (требуемая угловая позиция), прикидываем в какую сторону ближе крутить, даём команду на соответствующую оптопару "вперед" или "назад", расчитываем по линейному закону требуемую скорость, значение скорости - в ШИМ, оптопарой этот ШИМ передаётся в привод (частотник) в виде некоего постоянного (меняющегося по величине в процессе позиционирования). Своего рода "педаль газа" и рычаг ревер-редуктора, только с опторазвязкой. По ходу процесса позиционирования "педаль газа" отпускаем по мере приближения к заданному углу. Если случится пролёт - врубаем реверс и опять чуть подъигрываем "газом" и так продолжаем, пока не попадём в заданный угол с заданной точностью. Как попали туда - выдаём сигнал "ОК" и ждём дальнейших указаний. Врать не буду, программно такое не реализовывал, но на железном уровне рулить частотником такой схемкой пробовал - очень даже неплохо получается. Цитата(Timmy @ Dec 26 2014, 23:41)  Я думаю эта задача может быть решена следующим, вполне традиционным способом: - делается цифровой квадратурный генератор, частота и фаза которого привязываются к "Z" с помощью цифровой ФАПЧ - полученный квадратурный сигнал умножается на входной - результат умножения фильтруется НЧ фильтром с полосой пропускания около 5 Герц (тут можно использовать CIC дециматор в 100-500 раз + FIR), и получается искомый вектор в форме комплексного числа. Фильтровать скорее всего лучше, чем просто усреднять, так как усреднение - это тот же НЧ фильтр, но с поганой характеристикой. Ваш процессор получится загрузить процентов на 10-20, если всё на плавучке считать. Серьёзной проблемой может стать нестабильное усиление PGA. Мудрёно и не то. Есть проверенный алгоритм и не вижу смысла от него отходить. Цитата(Aner @ Dec 27 2014, 00:27)  Если вся математика уже отработана и понятна то что тут вам нужно? Чтобы нашелся очередной кодо-писатель? Которого вы "устанете и отвалите" Народ! ... барину нужно вчера ... ну, ну. Да, по факту мне надо перенести задачку с одной платформы на другую и добавить немного несложной доп функциональности. Если я не профессионал в этой сфере, то я и ищу более компетентных товарисчей. Но мне не хочется, чтобы мне навяливали на уши то, чего нет, моя некомпетентность недостаточна для этого. По поводу отвалившегося товарисча-программиста - мы расстались полюбовно и без обид, хотя он и подставил меня своим "уставанием" и срывом договорённостей. По поводу "вчера" - научитесь сначала читать и понимать написанное, прежде чем микрофонить к народу с броневика. уверяю - там не было слишком сложных содержаний.
--------------------
Лиссажу. Дорого. - тел. 322-223-32.
|
|
|
|
Сообщений в этой теме
Fester Addams Есть задача под STM32 Dec 26 2014, 00:20 In_an_im_di Ременная передача и ацп 12 разрядов... кто это всё... Dec 26 2014, 00:49 Fester Addams Цитата(In_an_im_di @ Dec 26 2014, 04:49) ... Dec 26 2014, 01:06  In_an_im_di Цитата(Fester Addams @ Dec 26 2014, 04:06... Dec 26 2014, 01:37   Fester Addams Цитата(In_an_im_di @ Dec 26 2014, 05:13) ... Dec 26 2014, 01:38    In_an_im_di Цитата(Fester Addams @ Dec 26 2014, 04:38... Dec 26 2014, 01:42     Fester Addams Цитата(In_an_im_di @ Dec 26 2014, 05:42) ... Dec 26 2014, 01:43      In_an_im_di Цитата(Fester Addams @ Dec 26 2014, 04:43... Dec 26 2014, 01:44 Dog Pawlowa Цитата(In_an_im_di @ Dec 26 2014, 04:44) ... Dec 26 2014, 03:24 =pcb= Цитата(Dog Pawlowa @ Dec 26 2014, 08:24) ... Dec 26 2014, 11:24  Fester Addams Цитата(=pcb= @ Dec 26 2014, 15:24) ЗЫ: ес... Dec 26 2014, 12:54   AlexandrY Цитата(Fester Addams @ Dec 26 2014, 14:54... Dec 26 2014, 13:09   =pcb= Цитата(Fester Addams @ Dec 26 2014, 17:54... Dec 26 2014, 14:10      AlexandrY Цитата(Fester Addams @ Dec 26 2014, 15:57... Dec 26 2014, 18:09       Fester Addams Цитата(AlexandrY @ Dec 26 2014, 22:09) Сл... Dec 26 2014, 19:39 Shivers Если это тот камень, о котором я думаю, т.е. Corte... Dec 26 2014, 10:49 sidy Цитата(Shivers @ Dec 26 2014, 13:49) Если... Dec 27 2014, 13:46 OlegH Цитата(Fester Addams @ Dec 26 2014, 02:20... Dec 26 2014, 11:34 Aner Да не, ... задачка из области робототехники, не пр... Dec 26 2014, 18:44 Aner Если вся математика уже отработана и понятна то чт... Dec 26 2014, 20:27 Fester Addams Вменяемый (в отличие от подавляющего большинства ф... Jan 13 2015, 07:43
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|