termostat: Все сообщения за 21 Ноября 2005 года

 
ПнВтСрЧтПтСбВс
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

termostat

аксакал

может задача 3new курса тебе поможет ? там про это.

=====

Если ты считаешь "срабатывание" таймера - прерывание или переполнение то это зависит и от делителя и от числа заносимового в регистр таймера - с этого числа таймер считает до 255.

Т.е. чем больше число тем быстрей переполняется таймер.


Всеже нужна модель конденсатора для ВМЛАБа - оказалось что его модель говно. Обнаружил я баг при отладке ПИД алгоритма.

termostat

аксакал



Д.Б.> Выложена стaтья metero "Практика проектирования ракетомодельных двигателей для начинающих"
[»]
 



Еще не прочитал внимательно но вот обнаружил неточность:

Предположим, что труба может выдержать 8МПа ( около 80 кг/см2, 80 атмосфер). Закладываем запас прочности 150%, значит уверенно можно нагружать трубу давлением в 5МПа.
 


Я считаю что "запас прочности" это то НАсколько прочней.

Поэтому при нагрузке 5 для трубы держащей 8 запас
прочности будет (8-5)/5 = 0.6

или 60% но не 150 % ни как.

а коэф. запаса по прочности будет 8/5 = 1.6
=====

и про безопасность нужно бы в начало статьи поместить материал - щас он в конце.

termostat

аксакал

PID регулятор сделал - можно использовать в системах регулирования.

по АпНоуту Motorola AN1215.

конвертировал для CodeVisionAVR и симуляция в PROTEUS и в VMLAB

вычисление ПИД занимает ВСЕГО 640 мкС при кварце 8 МГц на ATmega16

======

Инерцию регулируемого объекта изображает конденсатор 0.1 мкФ (аналог массы или момента инерции)

Управляюще воздействие - это ток через резистор 1 МОм (аналог силе и моменту силы)

======

в VMLAB нашел баг - хотя симуляция идет правильно, но напряжение на конденсаторе не меняется если резистор превышает 250 КОм. Похоже это ошибка модели конденсатора.

======

Сделал симуляцию для PROTEUS - там все работает.

======

Результат в графиках Эксель

Верхний график показывает как проискодит установка из крайнего верхнего отклонения.

Нижний график показывает как меняется управляющий ШИМ сигнал.

Горизонтальная ось в 10-ках милиСек - т.е. 80 это 800 мСек.

======

точка куда надо привести регулируемую величину (напряжение на конденсаторе) - это результат АЦП = 500 при этом управляющий ШИМ сигнал имеет величину 503/1024

Форму кривой и колебательность процесса можно подстраивать меняя коэффициенты:

KP = 0.18; /* kp = .12, ki = 6.0, kd = .006, for 1 M ohm drive */
KI = 6.0;
KD = 0.009;

======


хорошая теория автоматических систем регулирования тут:

http://atm.h1.ru/root/theory/theory.html

настройка ПИД регулятора - тут:



Настройка параметров ПИД-регулятора || НПФ КонтрАвт. КИПиА для АСУ ТП: измерители температуры, пид-регуляторы, контроллеры, модули ввода-вывода


Разработка, производство и продажа оборудования КИПиА для автоматизации производства: терморегуляторы, пид-регуляторы и т.д.

// www.contravt.ru
 

 

termostat

аксакал

ROOT> Задача такая: получить данные с АЦП, обработать, вывести, начать цикл заново.

ROOT> Какие могуть быть ошибки? Уже неделю мучаю :)
ROOT> Схема в proteus, программа в CodeVision. [»]
 


посмотри задачу 5 и 8 курса МК и пример ПИД регулятора чуть выше архивчик.

termostat

аксакал

ROOT> Serge, спасибо
ROOT> У меня, в принципе, так же, только на С.
 


Ты пишешь на Си - это ГУД !

НаФИГА ж ты туда АСМа то напихрл ? ЗАЧЕМ ??? всякие "попы" "пуши" - компилятор то и нужен чтоб ими баловаться у себя "в уме".

Пример АЦП и в sample КодВижена есть.

termostat

аксакал

Из папки CVAVR\EXAMPLES\ADC8535

Вот так нужно - простенько:

code text
  1.  
  2.  
  3. // I/O register definitions for AT90S8535
  4. #include <90s8535.h>
  5. // delay functions
  6. #include <delay.h>
  7.  
  8. #define ADC_VREF_TYPE 0x00
  9. // ADC interrupt service routine
  10. interrupt [ADC_INT] void adc_isr(void)
  11. {
  12. // The LEDs will display the 8 most
  13. // semnificative ADC bits
  14. PORTB=(unsigned char) ~(ADCW>>2);
  15. // 20ms delay
  16. delay_ms(20);
  17. // Start a new AD conversion
  18. ADCSR|=0x40;
  19. }
  20.  
  21. void main(void)
  22. {
  23. // Port B initialization
  24. PORTB=0xFF; // all outputs
  25. DDRB=0xFF;  // all LEDs are initially off
  26.  
  27. // ADC initialization
  28. // ADC Clock frequency: 57.656 kHz
  29. // ADC Interrupts: On
  30. ADCSR=0x8E;
  31.  
  32. // Global enable interrupts
  33. #asm("sei")
  34.  
  35. // Select ADC input 0
  36. ADMUX=0;
  37.  
  38. // Start the first AD conversion
  39. ADCSR|=0x40;
  40.  
  41. // All the job is done by ADC interrupts
  42. while (1);
  43. }



=====

1) Начинать нужно всегда с поиска паки с примерами идущими с компилятторами и симуляторами !

2) Кроме того в ДШ на ATмеги есть куски кода и на Си

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru