Pull to refresh
0
0

Embedded system engineer

Send message
WFI находится не в обработчике ISR EEPROM, а в основной программе

А какая разница, при каком значение PC и GCR была выполнена последовательность AL=1 и WFI? У вас выполняется IRET во вложенном прерывании, восстанавливается CC с I1 = 1 и I0 = 0, что при установленном AL приводит к спячке

  1. Так Вы же сами перевели контроллер на самый низкий приоритет в обработчике EEPROM ISR, тем самым позволили другим прерываниям вмешиваться в ход обработки первого прерывания. При входе во вложенное прерывание от таймера, в стеке сохраняется регистровый контекст, по которому контроллер находится в основном процессе. При выходе из вложенного прерывания в контроллере установлен бит AL и RETI, что приводит к тому, что и описано в документации, т.е. вход в WFI.


  2. Вопрос, зачем Вам понижать приоритет в обработчике окончания записи EEPROM, но при этом пытаться остаться в обработчике? Нестандартное решение -> нестандартное поведение.


  3. Workarounds #3. Вы уверены, что у Вас осталось вложенное прерывание? Может просто оно остается висячим до окончания EEPROM ISR?

Я не понял, у Вас обработчик прерывания окончания записи EEPROM вызывается в состоянии WFI? Если так, то вполне документированная работа, т.е. возврат в состояние WFI после вложенного прерывания.


you can set the AL bit before entering Low power mode (by executing WFI/HALT instruction). Consequently, the interrupt routine causes the device to return to low power mode., then the interrupt routine returns directly to Low power mode. The run time/ISR execution is reduced due to the fact that the register context is saved only on the first interrupt

Ух тыж, вот это я удачно заглянул!!!
Есть несколько вопросов по существу, а именно:


  • Каким порядком можно характеризовать постоянную времени ДГУ. Из сказанного
    синхронизируются между собой за 10-20 секунд

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


  • Описанные методики испытаний конечно интересны для "обывателя", но, извините за нескромный вопрос, а нет ли у Вас ПМИ?

Вопросы идут вот откуда. Мы делаем для заказчика ИБП на 100 кВт — 2 МВт. Заказчик спит и видит параллельную работу ИБП с ДГУ. Параллельная работа преобразователя (в составе ИБП) по типу обращенного инвертора напряжения на ДГУ сопряжена со сложностью идентификации динамики самого ДГУ в переходных режимах нагрузки. Грубо говоря, преобразователь синхронизируется с ДГУ и формирует синфазный ток. В силу известных принципов работы ДГУ, а именно уходу частоты генерируемого напряжения в случаях сброса/наброса нагрузки есть вероятность рассинхронизации преобразователя и ДГУ, что может привести к опрокидыванию инвертора. Нам, как разработчикам этих преобразователей, очень хочется понять специфику работы ДГУ в динамике, а еще лучше, характеристический полином замкнутой системы управления ДГУ.

Это точно! SoC c радиомодулями от TI очень вкусно выглядят, но их цена в 2 раза выше, чем NORDIC + STM8L, например. Да и если прикинуть, то автономность устройства на 10 лет представляется сомнительной необходимостью. Скорее всего, через 2 года уже будет выгоднее использовать новые технические решения, чем вести поддержку 10-летних устройств.

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

Задача — разработать, собрать и протестировать устройство, позволяющиее реализовать контур управления с заданием тока применительно к этому двигателю

Зачем Вам устройство стабилизации тока якоря? Это двигатель, а не катушка индуктивности. Он должен крутиться! И на заданных оборотах выдавать нужный момент, который в свою очередь пропорционален току якоря. Попробуйте почитать труды Шрейнера Р. Т., например "Системы подчиненного регулирования электроприводов".


Ну а по поводу методики изложения — вообще каша какая-то. Вот к пример фраза:


Это красивая экспоненциальная сходимость без разнообразных колебаний, поэтому такая форма и была выбрана

Неужели в пособиях по ТАУ теперь так принято?

невозможный (C^2!=A^2+B^2)
в каком смысле невозможный?
Я бы рискнул сделать ставку на то, что 99% бабушек смогут пройти этот тест!
А когда планируете расширить элементную базу? Интересуют модели приводов, солнечных панелей, химических накопитилей, полупроводниковых приборов и ШИМ-контроллеров. Неплохо бы еще и осциллографы, желательно гальванически развязанные и с цифровыми анализаторами.
Однозначно в закладки. Спасибо, особенно за MIDI!
японский бог, вот это надо ж так закрутить было!!! без текилы не разберешься
контроллер GPIO? Наверно не стоит небольшой набор секвенциальной синхронной логики называть контроллером. Мне кажется, что в таком стиле можно и таймерный модуль назвать контроллером, хотя по сути там не больше десятка регистров и мультиплексоров. Но это вопрос конечно же терминологии и конкретной реализации.

По статье имею следующий комментарий:
Попытки программно управлять ногами контроллера с максимальной скоростью очевидно имеют предел, значительно меньший чем позволяют заточенные под это периферийные устройства. Тот же модуль выходного сравнения с привязкой на DMA очевидно даст точность, не хуже периода тактирования таймера. На входную последовательность в том же таймере есть модуль захвата. Обвязываем его с DMA и получаем высокую производительность.
Использование стандартных библиотек в контроллере для высокоскоростного программного управления ногами этой микросхемы, на мой взгляд, разработчиками этих библиотек и не предполагалось. А зачем, ведь есть аппаратная периферия, которая все это сделает, а CPU при этом может, например, кофе попить.
Имея опыт разработки аппаратных проишивальщиков/загрузчиков могу с большой долей уверенности сказать, что в любом контроллере в режиме Under-reset должен осуществляться опрос портов встроенного дебагера. Дебагер ждет появления определенной входной последовательности на выделенной для этого ноге, при этом тактируется по заводским настройкам. В зависимости от задачи, иногда ведь приходится задействовать и пины отладочного модуля в пользовательском режиме. Причем с конфигурацией через так называемые option-bits, которые загружаются еще до попадания на вектор Reset. Чтоб была возможность перепрошить контроллер каждый производитель просто обязан предусмотреть вход в отладочный режим в состоянии reset'a. Конечно же, если речь не идет об однократно-программируемых. Другое дело, что указанный внутрисхемный отладчик не полностью реализует необходимую последовательность подключения.
Хм, а как тогда классифицировать метод, который подразумевает анализ входных и выходных данных, когда сущность объекта исследования не раскрывается, то есть по сути он представляется как некий «черный ящик», по поведению которого восстанавливается модель объекта?
Я почему-то именно так представлял реверс-инжиниринг и в программной индустрии, без дампов памяти.
А насколько правильно такой метод называть reverse-engineering? Это же в чистом виде дизасэмблер с полным раскрытием сущности «черной коробочки»
А во сколько раз тогда будет ослабление импульса на такой RC-цепочке, если источник питания будет с постоянной времени 2800 мс?
А качественный фильтр тут не спасет. Если импеданс источника питания выше чем у фильтра, то весь импульсный характер тока будет сказываться на форме напряжения у источника.
Для начала, неплохо было бы читателя «инитиализировать» в плане общей постановки задачи и выбора методов решения. Что, зачем и в строгой логической последовательности из 1 в 2, а затем в 3. А теперь на примерах:

… порядок следования старшего и младшего байт у этого датчика обратный

У меня с ходу два предложения для Вас (если весь этот эпос о стиле программирования не просто фарс):
1. DMA или если его на АРМ-подобном МК нет, то
2. Цикл через луковичку.

Красивый код:
— Оптимален (с точки зрения использования памяти и количества циклов, требуемых на его выполнение)

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

Математика, конечно, тут тяжелая

Позвольте возразить, математика тут представляется на уровне 4 класса. Одни алгебраические операции. А вот код, через который они реализованы, надо еще прожевать… Попробуйте вставить предшествующую формулу и всем все сразу же станет понятно.

Где тут многопоточность? И где тут оверсемплинг?

ЗЫ Присоединяюсь ко всем вышеуказанным замечаниям.

А еще такой модификатор говорит линковщику перенести данные во Flash сектора, если речь идет о встраиваемых системах. В микроконтроллерах процедура изменения flash-секторов несколько сложнее, особенно для более ранних поколений, где вообще ПЗУ прошивалась ультрафиолетом. Но то было раньше, а сейчас это часто используется для указания места хранения больших таблиц данных, например значений тригонометрических функций. Можно конечно и через линковщик выделить, но приписать const гораздо быстрее. Обычно, в МК ram-памяти значительно меньше, чем flash`ки. Так что для embedded систем const очень даже константный, а не просто в помощь программисту.

Information

Rating
Does not participate
Location
Новосибирск, Новосибирская обл., Россия
Date of birth
Registered
Activity