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

Структурная реализация ПИД

В оригинальном AN964 PWM работает на 31.2 KHz, а цикл PID - на 256 Hz

А как это сделать на одном таймере

Вынудили меня все таки посмотреть даташиты :)

PIC16F684 покруче будет, у него три таймера и один из них 16-и разрядный.

И памяти поболе раза в два.

Так что советую не заниматься мазохизмом, а взять МК чуть получше.

 

Делать на одном таймере 31 kHz - это 32 мкс период прерывания - и в нем счетчик/делитель на 120 - конечно можно,

но все будет впритирку, могут быть пропуски обработки.

Все это не слишком критично, но выглядит не очень красиво.

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


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

Tanya про модулятор не понял, но идею забыть о таймере уловил. Если действительно вычислять не по прерыванию таймера, а сразу как закончилось предыдущее вычисление - то есть без прерываний гонять цикл постоянно, может с добивкой фиктивными операциями для замедления, то пропорциональная составляющая должна отлично это перенести, вот с остальными похуже. Но если у меня один цикл вычисления (в зависимости от разных условных переходов) будет выполняться примерно одинаковое количество тактов, то можно и так попробовать. Но скорее всего это будет плавать, и Д/И составляющие будут сильно скакать, особенно Д. Все-таки я склоняюсь к своему же варианту 2 - таймер на частоту побольше для ШИМ, а запрашивать датчик и вычислять значение каждое n-е прерывание по этому же таймеру. Причем, n может быть и 255.

 

Baser вот, вижу поняли мой стартовый посыл первого поста :) Не очень красиво, говорите? А что там - 100 раз ввалиться в прерывание таймера просто декрементировать счетчик, проверить на 0 и выйти если не 0 - неужели так будет мешать? Ну там несколько тактов на переход по icall/reti... Имхо, на данном камне - самый компромиссный вариант? Лучше, чем ШИМ с частотой опроса и опрос в цикле без таймера имхо.

 

ЗЫ к тому же не обязательно разгонять ШИМ до 31 КГц, может и 1 КГц при 256 Гц частоте опроса хватит. А это всего 3 лишних раза ввалиться в прерывание декрементировать счетчик - и снова вернуться к прерванному на середине расчету выходного значения :) Если будет пищать на этих 1 КГц - будет не баг а фича :)

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


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

Tanya про модулятор не понял, но идею забыть о таймере уловил.

Можно немного почитать... про АЦП. Немного поясню. Управление ( для простоты рассмотрим простой случай) добавляет или вычитает каждый цикл какое-то число, и если сумма больше нуля, включается (пусть будет так) печка и вычитается некоторая константа оттуда же. Когда управление опять накопится, опять включается - один импульс. Получится более плавное управление по сравнению с ШИМом.

Вы бы сначала погоняли свое управление (фиктивно) для определения времени вычислений...

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


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

Погоняю конечно. Но у меня могут быть достаточно радикальные изменения в коде, которые еще не однозначно решены. Писать я буду на ассемблере (кто там про мазохизм писал? ;)), и к примеру аппаратного умножения на моем камне нет (снова про мазохизм), надо будет умножать вручную. Так я пока даже не знаю, буду ли я 10 бит на 10 бит из АЦП умножать в 3 байта результата или возьму только по одному старшему байту из АЦП, а 2 младших бита отброшу... А от этого время вычислений будет меняться сильно. Я пока с общей структурой уже можно сказать определился с помощью участников этой темы. А например как управлять двигателем вправо-влево по двум выходам ШИМ (на моем камне 2 выхода ШИМ) я пока даже не представляю. В прототипе на PIC16F684 для управления двигателем использовано 4 вывода МК - у меня столько нет лишних. Но я подозреваю, что и двумя можно обойтись - один по часовой (второй при этом 0), второй - против (первый при этом 0).

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


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

(кто там про мазохизм писал? ;))

Я в такие игры лет 15 назад наигрался от отсутствия дешевых ресурсов на МК, больше не хочу :)

Возмите что ль маленький STM32, ну или на крайний случай PIC24 - приятная архитектура ;)

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


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

Baser согласен, если упрусь в препятствия непреодолимой силы - скрепя сердце возьму камень чуть мощнее :) Но пока все-таки попробую на этом. Все мои сложности - от некоторого пока недопонимания отдельных моментов, контроллер меня почти не ограничивает - 4 входа АЦП, 2 выхода ШИМ - ровно столько сколько мне всего надо. Ну один таймер (вроде придумал как обойти), ну нет умножения (но тактов при 256 Гц опроса должно хватить на все вычисления). Так то можно и Ардуину взять и на Си написать, транжиря ресурсы. Но сейчас мне интересна именно такая игра.

 

ЗЫ есичо, я на той же Тини-13 некоторое время назад написал на асме тестировщик реле - замер времен прилета/улета/дребезга при подаче переключающего напряжения, с точностью до 10мкс и выводом таблицы результатов серии измерений в форматированном десятичном виде по вручную (!) реализованному USART (через ногодрыгание с нужными таймингами) на комп через терминал. Использовал почти весь флеш под кот. Так что кое-какой опыт мазохизма есть, но нельзя останавливаться на достигнутом :)

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


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

В прототипе на PIC16F684 для управления двигателем использовано 4 вывода МК - у меня столько нет лишних. Но я подозреваю, что и двумя можно обойтись - один по часовой (второй при этом 0), второй - против (первый при этом 0).

 

Вы с двигателем... осторожнее. ШИМ по напряжению - очень грубо и неправильно. Нужно током управлять - момент пропорционален току ведь... А еще там противоэдс - если полярность поменять все может сгореть, а мотор - разрушиться.

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


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

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

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


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

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

 

amaora Формальского читал, линеаризованную модель составлял, оптимальное управление рассчитывал (через моменты инерции и т.п.), но в данном конкретном случае - Вы правы, простейший ПИД с настройкой коэффициентов безо всякой сложной теории. Если удастся победить управление двигателем постоянного тока через ШИМ, то остальное думаю осилю.

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


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

Возьмите ATtiny24 там два таймера, в два раза больше памяти, больше портов и он не на много дороже, к тому же если памяти не хватит то на ATtiny44, ATtiny84 можно портировать без труда.

Вдруг захочется дополнительные кнопки, светодиоды - а портов свободных нет.

Ну и на СИ можно свободно писать не мучаясь с асмом.

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


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

Я в такие игры лет 15 назад наигрался от отсутствия дешевых ресурсов на МК, больше не хочу :)

Возмите что ль маленький STM32, ну или на крайний случай PIC24 - приятная архитектура ;)

STM8S003 - 17р в розницу, а уж кишков на порядок больше

 

и космик бесплатный с этого года

 

 

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


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

Если хочется именно AVR, то я бы как следующую ступень после тини13 рассматривал бы tiny2313

остальные варианты не распространены достаточно широко, купить их можно не везде... цены чуть выше всегда(даже на ali)

Грубо говоря, после tiny2313 стоит сразу рассматривать mega8

Это такие камни которые можно найти на каждом углу, дешево и сердито)

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


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

...возьмите XXX ...

...не мучаясь...

 

Отстаньте вы от человека! Он же сразу сказал - это спорт такой.

Что-то вроде "я напишу hello world в N байт", только следующий уровень :-)

 

Если _Ivana хватит упорства и знаний затолкать всё это в тиньку, он будет на порядок больше молодец, чем реализация того же ПИДа на stm32discovery.

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


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

Тогда все просто :)

Забить на прерывания и ловить флаг таймера в общем цикле.

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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