dimka76 63 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба 29 minutes ago, MPetrovich said: Да, в прерывание. Например мне нужно переждать переходный процесс после отключения активного уровня ШИМ - примерно 5мкСек , чтобы потом АЦП измерил напряжение. Я понимаю, что обработчик прерывания нужно завершить побыстрее, но в моём случае задержка необхлдима. От таймера ШИМ запускаете второй таймер в режиме ведомого на однократное срабатывание (Slave timer, one-shot mode), который , в свою очередь, запускает АЦП. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба 10 minutes ago, dimka76 said: От таймера ШИМ запускаете второй таймер в режиме ведомого на однократное срабатывание (Slave timer, one-shot mode), который , в свою очередь, запускает АЦП. Круто. Однако не вижу разницы - запускать таймер на однократное срабатывание или вставить задержку как у меня. Преобразование АЦП я всё равно запускаю "вручную". Я вообще не очень люблю прерывания, поскольку в них можно легко запутаться. По мне надёжнее проверять флаг и потом запускать процедуру. Естественно, в процессах критичных к скорости обработки без прерываний не обойтись. Однако всё же "линейный" код проще в анализе. Для меня, по крайней мере. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба 43 minutes ago, MPetrovich said: Круто. Однако не вижу разницы - запускать таймер на однократное срабатывание или вставить задержку как у меня. Преобразование АЦП я всё равно запускаю "вручную". Я вообще не очень люблю прерывания, поскольку в них можно легко запутаться. По мне надёжнее проверять флаг и потом запускать процедуру. Естественно, в процессах критичных к скорости обработки без прерываний не обойтись. Однако всё же "линейный" код проще в анализе. Для меня, по крайней мере. В моем предложении подразумевалось, что АЦП будет запускаться автоматически от SLAVE таймера. И соответственно только одно прерывание от АЦП. Меньше прерываний, меньше программной обработки, меньше загрузка процессора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба Я понял, Вы предлагаете организовать "аппаратную цепочку" - таймер ШИМ событием ССх толкает слейв-таймер, который настроен на одиночный импульс, слейв-таймер событием завершения импульса толкает АЦП, который по окончании конверсии выдает прерывание EOC, в котором можно считывать результат. Да, неплохо, согласен. И проц минимально грузится, поскольку всё самостоятельно делается "железом". Спасибо за идею. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 63 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба 8 minutes ago, MPetrovich said: Я понял, Вы предлагаете организовать "аппаратную цепочку" - таймер ШИМ событием ССх толкает слейв-таймер, который настроен на одиночный импульс, слейв-таймер событием завершения импульса толкает АЦП, который по окончании конверсии выдает прерывание EOC, в котором можно считывать результат. Да, неплохо, согласен. И проц минимально грузится, поскольку всё самостоятельно делается "железом". Спасибо за идею. Да, именно это я и имел ввиду. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 6 мая, 2020 Опубликовано 6 мая, 2020 · Жалоба 1 hour ago, MPetrovich said: вставить задержку как у меня Задержки в прерываниях - дурной тон. Золотое правило - прерывание должно выполнить максимально быстро, и отдать управление процессору. Ведь кроме этого прерывания могут быть и другие. Да и основной процесс никто не останавливал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 6 мая, 2020 Опубликовано 6 мая, 2020 (изменено) · Жалоба Что то я запутался в регистрах триггеров))) у меня 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. Может чего то упустил? Изменено 6 мая, 2020 пользователем MPetrovich дополнение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 7 мая, 2020 Опубликовано 7 мая, 2020 · Жалоба В процессе настроек неожиданно для меня оказалось, что таймеров общего назначения в моём контроллере только три - TIM2; TIM3; TIM4. А вот TIM5 отсутствует, хотя в SPL для него все записи есть. Кроме прерываний - по ним то я и обнаружил его отсутствие. Вот же правда: век живи - век учись))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 10 мая, 2020 Опубликовано 10 мая, 2020 · Жалоба Собрал наконец всю программу, запустил. Но... мотор крутит рывками и периодически стопорится. Снимаю длительность выбега от переключения обмоток до Zero-Cross и данные с АЦП на момент Zero-Cross. Вывожу это всё в терминал. По данным с АЦП вроде бы все нормально - одно значение до пересечения нуля и одно после соответствуют ожидаемым, т.е. значения находятся по разные стороны от значения Zero-Cross и "меняются местами" каждое переключение обмоток: предыдущее либо больше, либо меньше следующего. А вот выбег от коммутации до Zero-Cross все время дёргается и может меняться в 2...3 раза по величине. Из-за этого и рывки мотора и стопорение, хотя скважность ШИМ не меняю. В чем дело - понять пока не смог... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба 10 hours ago, MPetrovich said: В чем дело - понять пока не смог... 12 лет назад (2007-2009 года, можете поискать кучу моих тем того времени) я занимался тем, что "крутил" мотор. Коллекторный. На AVR. В те времена они были популярны. И по собственному опыту скажу, что вы сейчас решаете целый пласт проблем: схемотехника, теория автоматического управления, механика, измерения, безопасность, ЭМС... Это довольно непростая задача. Вам точно нужно привод разработать? Нет смысла готовый преобрести? Я тогда, в своё время, не совсем понимал серьёзности задачи. Плюс работал в университете, и это для меня было своеобразной целью-задачей-обучением. Вам то же самое нужно? Сейчас, по моим сромным оценкам, если бы я взялся за что-то подобное, минимум полгода понадобилось бы на разработку эскизного проекта. С учётом имеющихся наработок. Одной темой на форуме вы не отделаетесь) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба Интересный обзор разных типов электродвигателей и принципов их регулирования. Задача непростая. Целая отдельная наука. Причем к каждому типу двигателя свой подход. У каждого свои плюсы и минусы. И нет ни одного идеального универсального решения. Там же ещё интересная статья в 3-х частях про разработку электропривода для БелАЗа есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MPetrovich 6 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба " 12 лет назад (2007-2009 года, можете поискать кучу моих тем того времени) я занимался тем, что "крутил" мотор. Коллекторный" Коллекторники я "кручу" давно уж без проблем.))) Там всего лишь один канал ШИМ, только ключ и драйвер правильно подобрать. Ну, если на реверс то тогда, конечно посложнее чуток - 4 ключа, но все равно это не сравнить с бесколлекторниками. Я ранее давал ссылку на документ, по которому я строю свой регулятор, если любопытно - ознакомьтесь. На данный момент задача состоит в организации регулировки длительности выбега в зависимости от скважности ШИМ. Главной проблемой является переход из асинхронного режима запуска к синхронному режиму коммутаций по положению точек перехода через ноль (zc) напряжения обратной ЭДС. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 61 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба 13 minutes ago, MPetrovich said: Главной проблемой является переход из асинхронного режима запуска к синхронному режиму коммутаций по положению точек перехода ч На форуме же есть подфорум по электроприводу. Вы его читали? Может быть вам задать вопрос там? Здесь-то вряд-ли вам уже помогут. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
HardEgor 90 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба 21 час назад, MPetrovich сказал: По данным с АЦП вроде бы все нормально - одно значение до пересечения нуля и одно после соответствуют ожидаемым, т.е. значения находятся по разные стороны от значения Zero-Cross и "меняются местами" каждое переключение обмоток: предыдущее либо больше, либо меньше следующего. А вот выбег от коммутации до Zero-Cross все время дёргается и может меняться в 2...3 раза по величине. Из-за этого и рывки мотора и стопорение, хотя скважность ШИМ не меняю. В чем дело - понять пока не смог... Вы так рассказываете "всё сделано и работает правильно, но мотор почему-то работает неправильно" :) Предполагаю, что всё-таки что-то работает неправильно. Надо заиметь больше диагностической информации, например вывести побольше событий в программе на свободные GPIO контроллера, подключить логанализатор синхронно с осциллографом и внимательно анализировать происходящее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Baser 5 11 мая, 2020 Опубликовано 11 мая, 2020 · Жалоба 21 час назад, MPetrovich сказал: ... мотор крутит рывками и периодически стопорится. Снимаю длительность выбега от переключения обмоток до Zero-Cross и данные с АЦП на момент Zero-Cross. Вывожу это всё в терминал. По данным с АЦП вроде бы все нормально - одно значение до пересечения нуля и одно после соответствуют ожидаемым, т.е. значения находятся по разные стороны от значения Zero-Cross и "меняются местами" каждое переключение обмоток: предыдущее либо больше, либо меньше следующего. А вот выбег от коммутации до Zero-Cross все время дёргается и может меняться в 2...3 раза по величине. Из-за этого и рывки мотора и стопорение, хотя скважность ШИМ не меняю. Данные с АЦП вы все выводите в терминал (на каждый шаг ШИМа) или выборочно? Если выводите все данные, то соответствуют они теоретическим кривым или не очень? А до осциллографа добрались? С его помощью много чего можно полезного посмотреть. А так сдается, что вам или шумы и помехи все сбивают, или программная часть не совсем корректно отрабатывает. Еще хотел спросить, а почему вы для управления мотором не применили специально предназначенный для этого TIM1. Понятно, что сейчас вы применили самый простой метод управления, где можно и не связанные каналы ШИМ дергать. Но этот метод не может работать при 100% коэф.заполнения. А при применении классических методов с измерениями при активном периоде ШИМа предпочтительно иметь синхронное выпрямление. Потери меньше. А для него нужен генератор "мертвого времени", а он только в TIM1. Да и вход BREAK лишним не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться