MAL4X Научно-технический форум разработчиков симуляторов и автоматики


Симуляторы перегрузок. DIY электроника. ЭВМ. Компьютерные сети.
Up

Разработка нового контроллера

Строим реалистичный симулятор перегрузок своими руками. Рекомендации. Советы.

Модераторы: Death_Morozz, null, Ale

Сообщение Ale » 06 апр 2012, 21:17

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


Это понятно. Но как быть с "частотниками"? у них управление однополярное, как я понял

(Добавление)
Хотя вопрос не корректный. Нужно обеспечить все способы управления, а не противопоставлять их Изображение
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1438
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 541 раз.
Поблагодарили: 572 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение AlexVr » 07 апр 2012, 08:06

Ale писал(а):Но как быть с "частотниками"? у них управление однополярное, как я понял


Практически у любого частотника с функцией реверса управление как однополярное, так и двухполярное, можно изменять джампером. Сами источники напряжения тоже есть, встроенные в сами частотники, а вот сколько они могут отдать в нагрузку - не проверял Изображение
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 07 апр 2012, 09:34

согласен.
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 170
Зарегистрирован: 06 июл 2011, 10:39
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баллы репутации: 20
Новичок

Сообщение AlexVr » 07 апр 2012, 10:55

Сильно не пинайте - http://x-simulator.de/forum/...oject-t3713.html

Товарищ строит sim на базе готовых плат Ардуино и Н-мостов. Сами платки весьма и весьма бюджетные. И с USB и нулевым положением Н-моста и с защитой. Аналог ардуинки можно купить за 20 баксов. Организовать выход на частотник - без проблем. Паять самому даже тот же контроллер Таноса - примерно столько же выйдет. Схема там такая:
Изображение
http://fotki.yandex.ru/users/alex-vr/view/511427/

Изображение
http://fotki.yandex.ru/users/alex-vr/view/511428/
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 07 апр 2012, 14:16

Вот программа, можете потестить
http://gamefront.com/files/2...519027/Setup.rar
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 170
Зарегистрирован: 06 июл 2011, 10:39
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баллы репутации: 20
Новичок

Сообщение AlexVr » 07 апр 2012, 14:51

Запустил - подвигал ничего не изменяется. При нажатии на СТОП - в окошке ошибок порта
-1073807202 Изображение
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 07 апр 2012, 16:32

а порты в программе определились ?
порты в системе не заняты другими програмами ?

Сендер и профилер запускать не нужно.

(Добавление)
Попробуй установить эту библиотеку
http://joule.ni.com/nidu/cds/vie.../id/2662/lang/en
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 170
Зарегистрирован: 06 июл 2011, 10:39
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баллы репутации: 20
Новичок

Сообщение AlexVr » 07 апр 2012, 17:11

Библиотеку установил, перезагрузился и заработало!
Pavel155, отличное начало!
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение AlexVr » 08 апр 2012, 06:55

Появился вот такой вариант калибровки и работы контроллера с энкодерами ОС:

Код: Выделить всё
unsigned int optoPin = A0;  unsigned int opto = 0;  unsigned int start = 0; //флаг, устанавливаемый после центровки двигателя  int count_L = 0;  const int pin_A = 12; // pin 12  unsigned char encoder_L_A;  unsigned char encoder_L_A_prev=0;    void setup() {  pinMode(9, OUTPUT); //устанавливаем pin 9 как выход  pinMode(12, INPUT); //Устанавливаем pin 12 как вход  }    void loop() {    // начало выполнения центровки двигателя.    If (!start) { //если первоначальная центровка еще не выполнена, т.е. start=0    analogWrite(9, LOW); //Включаем на ноге 0В, следовательно двигатель вращается назад.    while(opto<500){ //пока нет сигнала с оптопары. значение АЦП (от 0 до 1024). Какое значение приходит с оптопары?  opto = analogRead(optoPin); //опрашиваем порт A0  delay(100); //задержка, для опроса каждые 0,1 сек., чтобы проц не напрягался  }    analogWrite(9, 128); //Останавливаем двигатель. Значения от 0, он же LOW (выкл) до 255, он же HIGH (вкл).  delay(2000); //Остановка двигателя на 2 сек. Дадим возможность ему остановиться?  opto = 0;    analogWrite(9, HIGH); //Включаем на ноге 5В, следовательно двигатель вращается вперед.    while(opto<500){ //пока нет сигнала со второй оптопары  opto = analogRead(optoPin); //опрашиваем порт A0    encoder_L_A = digitalRead(pin_A); // считываем состояние выхода А энкодера    if((!encoder_L_A) && (encoder_L_A_prev)){ // если состояние изменилось с положительного к нулю  count_L++; //считаем количество импульсов энкодера при вращении от 0 до 180 град.  }  encoder_L_A_prev = encoder_L_A; // сохраняем значение А для следующего цикла  delay(5); //задержка, для опроса каждые 5 мс  }    analogWrite(9, 128); //Останавливаем двигатель.  delay(2000); //Остановка двигателя на 2 сек    count_L /= 2; //делим пополам общее количество импульсов    analogWrite(9, LOW); //Запускаем двигатель назад, для установки на середину    encoder_L_A_prev = 0;    while(count_L>0){ //пока счетчик не уменьшится до 0, т.е. двигатель не примет центральное положение    encoder_L_A = digitalRead(pin_A); // считываем состояние выхода А энкодера    if((!encoder_L_A) && (encoder_L_A_prev)){ // если состояние изменилось с положительного к нулю  count_L--; //уменьшаем количество импульсов на 1  }  encoder_L_A_prev = encoder_L_A; // сохраняем значение А для следующего цикла  delay(5); //задержка, для опроса каждые 5 мс  }    analogWrite(9, 128); //Останавливаем двигатель.    start = 1; //устанавливаем флаг, что центровка выполнена.  }    //Начало основной программы    }
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 08 апр 2012, 07:29

Подскажите, почему Танос в прошивке для аналогового управления применил 16-bit ?
Насколько это критично для управления ПЧ по аналогу ?
и еще, как можно из 2-х байтов 8-bit сделать байт на 16-bit ?
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 170
Зарегистрирован: 06 июл 2011, 10:39
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баллы репутации: 20
Новичок

Сообщение AlexVr » 08 апр 2012, 08:25

Pavel155 писал(а):Подскажите, почему Танос в прошивке для аналогового управления применил 16-bit ?
Насколько это критично для управления ПЧ по аналогу ?


Один байт (8 бит) может представлять 256 различных значений чего-либо

16-бит могут хранить 65,536 различных значений чего-либо

Дискретности 256 по входу ПЧ Таносу показалось мало. По факту это 5/256=0,02В - шаг регулировки, ну или 0,2 Гц.

Механический энкодер 30 импульсов на оборот за рабочий цикл в наших симах выдает (у меня допустим редуктор 1/40) 30*40/2=600 импульсов, контроллер их считает парами, итого дискретность 300 в первом приближении вот они 8 бит. Смысла в 16 не вижу.
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 08 апр 2012, 08:35

мне подогнали энкодер на 1000имп/оборот.
думаю мой вариант 16bit
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 170
Зарегистрирован: 06 июл 2011, 10:39
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баллы репутации: 20
Новичок

Сообщение AlexVr » 08 апр 2012, 08:58

Pavel155 писал(а):мне подогнали энкодер на 1000имп/оборот.
думаю мой вариант 16bit


Тогда ДАИзображение

Для размышлений - макс. амплитуда моей платформы 140 мм. Делим на 256, итого дискретность 0,5 мм. Вполне достаточно.
У тебя амплитуда где-то 400 мм.
Энкодер 30 имп. и 8 бит дадут дискретность 1,5 мм
Энкодер 1000 имп. и 16 бит дадут дискретность 0,04 мм и серьезно нагрузят проц...
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 08 апр 2012, 16:26

Энкодер 1000 имп. и 16 бит дадут дискретность 0,04 мм и серьезно нагрузят проц...

значит надо использовать проц с запасом.
что можете посоветовать ?
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 170
Зарегистрирован: 06 июл 2011, 10:39
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Баллы репутации: 20
Новичок

Сообщение AlexVr » 08 апр 2012, 18:30

Pavel155 писал(а):значит надо использовать проц с запасом.
что можете посоветовать ?


Атмега должен вытянуть, не стоит переживать.

Я смотрю буржуи массово переходят на платформу ардуино - где-то видимо разжились скетчем http://x-simulator.de/forum/...ridge-t3810.html

http://youtube.com/watch?v=y...feature=youtu.be


http://youtube.com/watch?NR=...mp;v=-s3lOkocCNE
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Пред.След.

Вернуться в X-SIMULATOR и RU-SIMULATOR & SimTools

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

cron
x

#{title}

#{text}