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

29 minutes ago, MPetrovich said:

Да, в прерывание. Например мне нужно переждать переходный процесс после отключения активного уровня ШИМ - примерно 5мкСек , чтобы потом АЦП измерил напряжение. Я понимаю, что обработчик прерывания нужно завершить побыстрее, но в моём случае задержка необхлдима.

От таймера ШИМ запускаете второй таймер в режиме ведомого на однократное срабатывание (Slave timer, one-shot mode), который , в свою очередь, запускает АЦП.

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


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

10 minutes ago, dimka76 said:

От таймера ШИМ запускаете второй таймер в режиме ведомого на однократное срабатывание (Slave timer, one-shot mode), который , в свою очередь, запускает АЦП.

Круто. Однако не вижу разницы - запускать таймер на однократное срабатывание или вставить задержку как у меня. Преобразование АЦП я всё равно запускаю "вручную".

Я вообще не очень люблю прерывания, поскольку в них можно легко запутаться. По мне надёжнее проверять флаг и потом запускать процедуру. Естественно, в процессах критичных к скорости обработки без прерываний не обойтись. Однако всё же "линейный" код проще в анализе. Для меня, по крайней мере.

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


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

43 minutes ago, MPetrovich said:

Круто. Однако не вижу разницы - запускать таймер на однократное срабатывание или вставить задержку как у меня. Преобразование АЦП я всё равно запускаю "вручную".

Я вообще не очень люблю прерывания, поскольку в них можно легко запутаться. По мне надёжнее проверять флаг и потом запускать процедуру. Естественно, в процессах критичных к скорости обработки без прерываний не обойтись. Однако всё же "линейный" код проще в анализе. Для меня, по крайней мере.

В моем предложении подразумевалось, что АЦП будет запускаться автоматически от SLAVE таймера.

И соответственно только одно прерывание от АЦП.

Меньше прерываний, меньше программной обработки, меньше загрузка процессора.

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


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

Я понял, Вы предлагаете организовать "аппаратную цепочку" - таймер ШИМ событием ССх толкает слейв-таймер, который настроен на одиночный импульс, слейв-таймер событием завершения импульса толкает АЦП, который по окончании конверсии выдает прерывание EOC, в котором можно считывать результат. Да, неплохо, согласен. И проц минимально грузится, поскольку всё самостоятельно делается "железом". Спасибо за идею.

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


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

8 minutes ago, MPetrovich said:

Я понял, Вы предлагаете организовать "аппаратную цепочку" - таймер ШИМ событием ССх толкает слейв-таймер, который настроен на одиночный импульс, слейв-таймер событием завершения импульса толкает АЦП, который по окончании конверсии выдает прерывание EOC, в котором можно считывать результат. Да, неплохо, согласен. И проц минимально грузится, поскольку всё самостоятельно делается "железом". Спасибо за идею.

Да, именно это я и имел ввиду.

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


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

1 hour ago, MPetrovich said:

вставить задержку как у меня

Задержки в прерываниях - дурной тон. Золотое правило - прерывание должно выполнить максимально быстро, и отдать управление процессору. Ведь кроме этого прерывания могут быть и другие. Да и основной процесс никто не останавливал.

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


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

Что то я запутался в регистрах триггеров))) у меня TIM4 настроен на ШИМ, а TIM2 я хочу использовать для генерации единичного импульса. Для этого я, если я правильно понял, должен врегистре TIM2_CR1 установить биты OPM; URS; UDIS; CEN, а в регистре TIM2_CR1 установить биты TS[2:0]=001 - Internal Trigger 3 (ITR3).

А для TIM4 установить в TIM4_CR2: MMS[2:0]=100 для OC1REF; 101 для OCREF и 110 для OC3REF как источник сигнала для запуска  TIM2.

Может чего то упустил?

 

Изменено пользователем MPetrovich
дополнение

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


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

В процессе настроек неожиданно для меня оказалось, что таймеров общего назначения в моём контроллере только три - TIM2; TIM3; TIM4. А вот TIM5 отсутствует, хотя в SPL для него все записи есть. Кроме прерываний - по ним то я и обнаружил его отсутствие. Вот же правда: век живи - век учись)))

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


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

Собрал наконец всю программу, запустил. Но... мотор крутит рывками и периодически стопорится. Снимаю длительность выбега от переключения обмоток до Zero-Cross и данные с АЦП на момент  Zero-Cross. Вывожу это всё в терминал. 

По данным с АЦП вроде бы все нормально - одно значение до пересечения нуля и одно после соответствуют ожидаемым, т.е. значения находятся по разные стороны от значения Zero-Cross и "меняются местами" каждое переключение обмоток: предыдущее либо больше, либо меньше следующего. А вот выбег от коммутации до Zero-Cross все время дёргается и может меняться в 2...3 раза по величине. Из-за этого и рывки мотора и стопорение, хотя скважность ШИМ не меняю. В чем дело - понять пока не смог...:dash1: 

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


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

10 hours ago, MPetrovich said:

В чем дело - понять пока не смог...

12 лет назад (2007-2009 года, можете поискать кучу моих тем того времени) я занимался тем, что "крутил" мотор. Коллекторный. На AVR. В те времена они были популярны. И по собственному опыту скажу, что вы сейчас решаете целый пласт проблем: схемотехника, теория автоматического управления, механика, измерения, безопасность, ЭМС... Это довольно непростая задача. Вам точно нужно привод разработать? Нет смысла готовый преобрести? Я тогда, в своё время, не совсем понимал серьёзности задачи. Плюс работал в университете, и это для меня было своеобразной целью-задачей-обучением. Вам то же самое нужно? Сейчас, по моим сромным оценкам, если бы я взялся за что-то подобное, минимум полгода понадобилось бы на разработку эскизного проекта. С учётом имеющихся наработок. Одной темой на форуме вы не отделаетесь)

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


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

Интересный обзор разных типов электродвигателей и принципов их регулирования. Задача непростая. Целая отдельная наука. Причем к каждому типу двигателя свой подход. У каждого свои плюсы и минусы. И нет ни одного идеального универсального решения. Там же ещё интересная статья в 3-х частях про разработку электропривода для БелАЗа есть.

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


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

12 лет назад (2007-2009 года, можете поискать кучу моих тем того времени) я занимался тем, что "крутил" мотор. Коллекторный"

Коллекторники я "кручу" давно уж без проблем.))) Там всего лишь один канал ШИМ, только ключ и драйвер правильно подобрать. Ну, если на реверс то тогда, конечно посложнее чуток - 4 ключа, но все равно это не сравнить с бесколлекторниками.

Я ранее давал ссылку на документ, по которому я строю свой регулятор, если любопытно - ознакомьтесь.

На данный момент задача состоит в организации регулировки длительности выбега в зависимости от скважности ШИМ. Главной проблемой является переход из асинхронного режима запуска к синхронному режиму коммутаций по положению точек перехода через ноль (zc) напряжения обратной ЭДС.

 

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


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

13 minutes ago, MPetrovich said:

Главной проблемой является переход из асинхронного режима запуска к синхронному режиму коммутаций по положению точек перехода ч

На форуме же есть подфорум по электроприводу. Вы его читали? Может быть вам задать вопрос там? Здесь-то вряд-ли вам уже помогут.

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


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

21 час назад, MPetrovich сказал:

По данным с АЦП вроде бы все нормально - одно значение до пересечения нуля и одно после соответствуют ожидаемым, т.е. значения находятся по разные стороны от значения Zero-Cross и "меняются местами" каждое переключение обмоток: предыдущее либо больше, либо меньше следующего. А вот выбег от коммутации до Zero-Cross все время дёргается и может меняться в 2...3 раза по величине. Из-за этого и рывки мотора и стопорение, хотя скважность ШИМ не меняю. В чем дело - понять пока не смог...:dash1: 

Вы так рассказываете "всё сделано и работает правильно, но мотор почему-то работает неправильно" :)

Предполагаю, что всё-таки что-то работает неправильно.

Надо заиметь больше диагностической информации, например вывести побольше событий в программе на свободные GPIO контроллера, подключить логанализатор синхронно с осциллографом и  внимательно анализировать происходящее.

 

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


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

21 час назад, MPetrovich сказал:

... мотор крутит рывками и периодически стопорится. Снимаю длительность выбега от переключения обмоток до Zero-Cross и данные с АЦП на момент  Zero-Cross. Вывожу это всё в терминал. 

По данным с АЦП вроде бы все нормально - одно значение до пересечения нуля и одно после соответствуют ожидаемым, т.е. значения находятся по разные стороны от значения Zero-Cross и "меняются местами" каждое переключение обмоток: предыдущее либо больше, либо меньше следующего. А вот выбег от коммутации до Zero-Cross все время дёргается и может меняться в 2...3 раза по величине. Из-за этого и рывки мотора и стопорение, хотя скважность ШИМ не меняю.

Данные с АЦП вы все выводите в терминал (на каждый шаг ШИМа) или выборочно? Если выводите все данные, то соответствуют они теоретическим кривым или не очень?
А до осциллографа добрались? С его помощью много чего можно полезного посмотреть. А так сдается, что вам или шумы и помехи все сбивают, или программная часть не совсем корректно отрабатывает.

Еще хотел спросить, а почему вы для управления мотором не применили специально предназначенный для этого TIM1. Понятно, что сейчас вы применили самый простой метод управления, где можно и не связанные каналы ШИМ дергать. Но этот метод не может работать при 100% коэф.заполнения. А при применении классических методов с измерениями при активном периоде ШИМа предпочтительно иметь синхронное выпрямление. Потери меньше. А для него нужен генератор "мертвого времени", а он только в TIM1. Да и вход BREAK лишним не будет.

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


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

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

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

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

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

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

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

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

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

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