Страница 80 из 135 ПерваяПервая ... 3070787980818290130 ... ПоследняяПоследняя
Показано с 791 по 800 из 1349

Тема: Hardella IDE

  1. #791

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Владимир, вы в ФБ Steper корректировку частоты (периода) делаете в каждом такте ?
    В нашем полку прибыло. Отлично. Вместе нам будет веселей. Я тут тоже озадачен решением нетривиальной задачи по управлению ШД.

    Я в Hardella делаю свой ФБ для непрерывного регулирования частоты вращения ротора ШД. У меня вот такая формула для расчета текущего значения периода получилась: T = T0/(1+T0*a*t);

    Тут присутствует операция деления и это мне не нравится. Владимир, что можете посоветовать ?
    Последний раз редактировалось Вольд; 11.03.2017 в 16:08.

  2. #792

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    В нашем полку прибыло. Отлично. Вместе нам будет веселей.
    Да я только начинаю знакомится с Hardella. Хорошо, что есть у кого что спросить.

  3. #793

    По умолчанию

    Цитата Сообщение от IVM Посмотреть сообщение
    Да я только начинаю знакомится с Hardella. Хорошо, что есть у кого что спросить.
    А я уже поработал с Hardella и вошел во вкус, чего и вам желаю. Все у вас получится если сильно захотите.

  4. #794

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    Тут присутствует операция деления и это мне не нравится. Владимир, что можете посоветовать ?
    Если присмотреться, то видно, что PRU_STEPPER на этапе разгона/торможения тоже выполняет операцию деления.
    Поэтому, либо её оставлять в PRU, либо деления/умножения делать в "быстром таймере"

  5. #795

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    Если присмотреться, то видно, что PRU_STEPPER на этапе разгона/торможения тоже выполняет операцию деления.
    А на пальцах не объясните как в PRU_STEPPER выполняется операция деления ?

  6. #796

    По умолчанию

    Цитата Сообщение от Владимир Ситников Посмотреть сообщение
    либо деления/умножения делать в "быстром таймере"
    PRU тактируется с частотой 1 Мгц (1 мкс), а прерывание по быстрому таймеру чаще 100 мкс лучше не делать. Т.е. частоты несоизмеримы. По этой причине каждую микросекунду корректировать Т не получится.
    Последний раз редактировалось Вольд; 11.03.2017 в 16:54.

  7. #797

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    PRU тактируется с частотой 1 Мгц (1 мкс), а прерывание по быстрому таймеру чаще 100 мкс лучше не делать. Т.е. частоты несоизмеримы. По этой причине каждую микросекунду корректировать Т не получится.
    А обязательно ли корректировать каждую микросекунду?

    Можно раз в 100мкс обновлять "новую цель" и чтобы PRU шпарило к ней.
    Либо просто "раз в 100мкс вычислять новый интервал между импульсами", либо "раз в 100мкс вычислять новый интервал + прибавку к нему". При этом PRU будет каждые 100мкс получать более-менее правильные значения, а между делом линейно наращивать/сокращать интервал на полученное же значение.

    Тогда деление в PRU не понадобится, а достаточно будет простого t1 := t1+dt;

  8. #798

    По умолчанию

    Вот исходная формула: T = T0/(1+T0*a*t);, ее можно привести к виду: T = T0 + ΣdT.
    T0 - текущий период известен, t - время разгона/торможения известно (изначально жестко задано), n - количество тактов известно (т.к. t известно), dT - приращение на каждом такте известно. Т.е. на каждом такте прибавляем к T0 накопленную сумму, суммируем от 0 до n. В основной программе один раз раcчитывается и передается в PRU dT и n
    Последний раз редактировалось Вольд; 11.03.2017 в 17:34.

  9. #799

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    T = T0 + n * dT - вот она заветная формула. T0 - текущий период известен, t - время разгона/торможения известно, n - количество тактов известно, dT - приращение на каждом такте известно.
    "Проблема" в том, что для правильной физики процесса формула должна быть не для задержек, а для частоты.
    Т.е. частота должна расти линейно, а задержки будут расти как разница корней.

    Другое дело, что если обновлять T0 раз в 100мкс, то никто не заметит подлога и наверняка будет всех устраивать.


    PS. В моём блоке PRU_STEPPER реализована корректировка длительности каждого импульса только из-за того, что так было _проще_ сделать. Да, да. Именно проще всю программу написать в PRU, т.к. тогда её гораздо проще отлаживать. По крайней мере мне. Запускаешь на эмуляторе и всё видишь.

    Если же делать половину программы в "100мкс таймере" и "половину в PRU", то отлаживать становится сложнее, т.к. у меня нет "эмулятора КДС кода".
    Например: в КДС программе можно и нужно использовать нормальные деления REAL'ов. А мой эмулятор делался для PRU, в котором дробных вообще нет.

  10. #800
    Пользователь Аватар для rovki
    Регистрация
    03.01.2010
    Адрес
    Чехов
    Сообщений
    12,123

    По умолчанию

    Цитата Сообщение от Вольд Посмотреть сообщение
    T = T0 + n * dT - вот она заветная формула. T0 - текущий период известен, t - время разгона/торможения известно, n - количество тактов известно, dT - приращение на каждом такте известно. Т.е. на каждом такте прибавляем к T0 накопленную сумму.
    А что сразу не было заметно ,что кусочная апроксимация проще вычисления (деления, итд) кривой ???Я думал для продвинутых это очевидно
    электронщик до мозга костей и не только

Страница 80 из 135 ПерваяПервая ... 3070787980818290130 ... ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •