Перейти к содержанию
    

STM32 управление мостами

6 hours ago, EdgeAligned said:

А массив указателей на ф-ции - разве не вариант "вычисляемого перехода"?

И я чет не понял, зачем столько NOP-ов в таблице? Они ж ничем не отличаются. Это чето похоже на индусский код.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, whale сказал:

Если под каждые 256 частоты делать отдельную таблицу никакой озу не хватит.

Вы о чём? Разумеется, собирать код каждый раз под очередной канал, очередную частоту и очередное количество её периодов — скважность 5000 в предыдущей теме была, поэтому времени навалом.

И диапазон 500 кГц ±100 кГц задаёт разница в 26 тактов на 64 МГц, никакие не 256, не говоря о том, что ПЭ с таким разбросом ещё поискать, обычно ±10 кГц.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, whale сказал:

Я не читаю посты забаненых, предпочитаю общение с нормальными людьми а не муда...ми.

https://rutube.ru/video/92c6a7c6a5ea0e75301d19372e84bf0c/?r=wd

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, firstvald сказал:

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

Только это не работает на ARM-ах. На AVR-ах или чём-то подобном простейшем - возможно будет работать. На ARM (из-за его сложной матрицы шин, конвеера команд, нескольких bus-masters, кешей, буферов записи, частичного распараллеливания инструкций и т.п.) - такое работать не будет. Что бы не казалось ТС.

4 часа назад, amaora сказал:

Может быть тогда перекладывать данные в регистры GPIO через DMA по событию таймера?

Аналогично не будет работать. В смысле - не обеспечит точной задержки. По той же самой, вышеуказанной причине. Задержка будет плавать +-трамвайная остановка. От любого чиха будет плавать.

 

PS: ТСу нужно:

1) или вернуться на AVR-ы или подобные им простейшие, где есть точная растактовка команд, и там вволю ногодрыгать; но тогда даже STM8L ему будет закрыт (так как имеет DMA и вроде даже простейший конвеер);

2) или излечиваться от ногодрыжеской болезни, если уж решил заниматься ARM.

Других вариантов нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, jcxz сказал:

такое работать не будет

Цитата

The SRAM can be accessed by bytes, half-words (16 bits) or full words (32 bits), at maximum system clock frequency without wait state and thus by both CPU and DMA.

И порты напрямую с АЛУ соединены, т.е. если отключить ПДП и периферию, то программа в ОЗУ и вывод в порты будут работать предсказуемо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Plain сказал:

И порты напрямую с АЛУ соединены, т.е. если отключить ПДП и периферию, то программа в ОЗУ и вывод в порты будут работать предсказуемо.

В даташите и правда рисуют нечто подключенное напрямую к ядру. Надо посмотреть в детали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 hours ago, jcxz said:

Только это не работает на ARM-ах. На AVR-ах или чём-то подобном простейшем - возможно будет работать. На ARM (из-за его сложной матрицы шин, конвеера команд, нескольких bus-masters, кешей, буферов записи, частичного распараллеливания инструкций и т.п.) - такое работать не будет. Что бы не казалось ТС.

 

конечно же работает. обработку последовательности команд одна за одной никто не отменял. до тех пор пока не включена оптимизация. иначе наличие команды ноп вообще ставится под вопрос. другой вопрос стабильность получаемой задержки. тут ответ однозначный - ее нет. но мы можем сказать, что она не меньше такой- то. если нужно растащить фронты импульсов друг от друга то чем еще ? ну и нужно отбросить категоричность. задача может быть решена разным сочетанием аппаратных и программных приемов. от внешнего аппаратного узла, до внутреннего программного колечка типа ардуины, в котором опускаются и поднимаются ноги. эти решения будут иметь разные стоимости, с точки зрения времени разработки, отладки, стоимости аппаратуры при тиражировании, получаемыми характеристиками. в реальности, коллеги занимающиеся разработкой управления моторчиком, грохнули года два, и процесс продолжается, на референсных платах, разбираясь с таймерами. так что, надо очень взвешивать: во что ввязываться ,  нужно ли это или будет достаточно что- то набросать по - верхам.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто как вариант. Не принципиально для какого процессора. 

такой-себе время-задержечный  "ЦАП"   

Реализуем "набор" линейных "тактовых" задержек в двоичном коде 1248. . . . в виде функций (более оптимально указатели).

В зависимости от разрядности, для каждого разряда "задания" - в таблице свой вызов. В аналогичной таблице - могут быть корректирующие константы для каждого разряда, учитывающие точность задержки и накладные расходы на вызов-возврат.

Реализация - не то что "на любителя", а можно сказать на фаната своего дела.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

On 8/18/2024 at 10:47 AM, amaora said:

GPIO через DMA

А чего перекладывать, память не безгранична.

On 8/18/2024 at 11:38 AM, majorka65 said:

И зачем произвольный выбор ног?

Все заняты другими делами.

On 8/18/2024 at 12:33 PM, Plain said:

времени навалом

Вы думаете процессор все это время отдыхает ? Вы заблуждаетесь.

On 8/18/2024 at 11:59 AM, firstvald said:

прыгаем в какую то точку

Как прыгать то с минимальным  временем ? Нужно еще вычислить куда прыгать, в этом  главный вопрос . 

Just now, k155la3 said:

В зависимости от разрядности, для каждого разряда "задания" - в таблице свой вызов

Не совсем понял вашу мысль.

On 8/18/2024 at 12:33 PM, Plain said:

задаёт разница в 26 тактов на 64 МГц

В ЛЧМ до 300 кгц

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вижу только один путь - делаем сто нопов подряд и смещаем указатель команд на нужную строку нопов.

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

Самый быстрый по моему просто прибавить нужное смещение, кто нить знает как это сделать в iar ?

Изменено пользователем whale

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, whale сказал:

А чего перекладывать, память не безгранична.

Делать там циклический буфер, пока ПДП выгружает в BSRR порта одну половину буфера - программа может наполнять вторую. 

4 минуты назад, whale сказал:

Весь вопрос как сместить это указатель

И, главное, чтобы ни дай бог не возникло какое-нибудь прерывание или потребность сделать что-то еще.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, Сергей Борщ said:

прерывание или потребность сделать что-то еще

На период вывода все запрещено.

Just now, Сергей Борщ said:

программа может наполнять вторую.

не успеет скорее всего

Изменено пользователем whale

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделать на ПЛИС, и можно легко, естественно и непринужденно вводить любые задержки, в зависимости от тактовой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, eddddy said:

Сделать на ПЛИС

Это примерно тоже самое что слетать на луну раньше китайцев на текущий момент. 

Изменено пользователем whale

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

39 minutes ago, whale said:

память не безгранична

 

40 minutes ago, whale said:

Все заняты другими делами.

 

40 minutes ago, whale said:

Вы думаете процессор все это время отдыхает

Возьмите контроллер из нормальной серии хоть тех же ST - например stm32f407, а еще лучше - gd32f450 - цена 1000 р, 2 "моторных" таймера - то что нужно для управления полумостами, частота 200 МГц, fpu, dsp команды. Явно же дешевле будет и проще, чем тратить драгоценное время на постройку костылей.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...