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


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

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

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

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

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

которое сохраняется до прихода СЛЕДУЮЩЕГО значения оси от компа

тогда почему, при постоянных данных с программы, когда я кручу энкодер, ШИМ уменьшается ?

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

Сообщение Ale » 12 апр 2012, 15:30

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

(Добавление)
тогда почему, при постоянных данных с программы, когда я кручу энкодер, ШИМ уменьшается ?


Все правильно, Данные идут постоянные, а энкодером вы как бы сбиваете положение оси. Ладно, давайте не будем спорить терминах. В конце концов я просто высказал свое виденье проблемы, и вовсе не утверждаю, что я прав 100%
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение Pavel155 » 12 апр 2012, 15:36

ИМХО: цикл программы использует 2 данные: UART и Энкодер. Эти данные программа получает через прерывание. Значит если прерываний по UART нет (программа дает постоянные данные), но на двигатель идет ШИМ сигнал, например 5 вольт, двигатель крутит энкодер, а тот в свою очередь через прерывания вставлет новое значение, тем саммым уменьшая ШИМ. И так до 0 или до новых данных с UART.
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 172
Зарегистрирован: 06 июл 2011, 10:39
Откуда: Саратов
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Баллы репутации: 20
Новичок

Сообщение Ale » 12 апр 2012, 15:39

ИМХО: цикл программы использует 2 данные: UART и Энкодер. Эти данные программа получает через прерывание. Значит если прерываний по UART нет (программа дает постоянные данные), но на двигатель идет ШИМ сигнал, например 5 вольт, двигатель крутит энкодер, а тот в свою очередь через прерывания вставлет новое значение, тем саммым уменьшая ШИМ. И так до 0 или до новых данных с UART.


Все верно. Но в программе НЕТ никакого регулирования, если нет данных по UART. Ведь новое значение ШИМ вычисляется только в цикле UART? Или я чего-то не понимаю?Изображение
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение Pavel155 » 12 апр 2012, 15:41

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

Сообщение Ale » 12 апр 2012, 15:49

while (getchar()== 0x41&getchar()== 0x42)//в этот цикл
{ // мы попадем ТОЛЬКО когда в буфере
// окажется принятый байт 255 - это 0xFF
getchar(); //ловим байт 0хFF (255)
//////////////////////////////////////////////////
//управление 1 осью
//////////////////////////////////////////////////


Павел, в основной программе но в теле цикла, в который по Вашему же утверждению:
// мы попадем ТОЛЬКО когда в буфере
// окажется принятый байт 255


(Добавление)
Если данных по UART не будет, двигатель будет крутиться до упора. Возможно Вы не этого хотели, но по факту получается так.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение Pavel155 » 12 апр 2012, 15:58

Там опечатка, для попадания в управления ШИМ надо выполнить
while (getchar()== 0x41&getchar()== 0x42)

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

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

Ale писал(а):Я вообще считаю, что в данном случае нам НЕ НУЖЕН линейный датчик обратной связи, кроме концевиков. О.. вот она, РЕВОЛЮЦИЯ.

Судите сами: Допустим, мы достаточно точно подобрали коэффициент, и можем с большой точностью задавать скорость перемещения оси. Тогда, умножив скорость на время мы получим дистанцию.


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

Сообщение null » 12 апр 2012, 16:46

AlexVr писал(а):Сугубо мое мнение - не учтен один очень важный момент "подобрали коэффициент" - вот в этом и проблема ......

Полностью тебя поддерживаю. Я вот с одним коэффициентом как я писал ранее, так и не решил своих проблем.
Русский X-Simulator
Изображение
За пределами форума. Мой инстаграмм.
Аватара пользователя
null
SIMER
 
Сообщения: 1041
Зарегистрирован: 03 мар 2010, 18:42
Откуда: Ростов-на-Дону
Благодарил (а): 219 раз.
Поблагодарили: 160 раз.
Баллы репутации: 138
ТехнарьТехнарь

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

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

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

Там опечатка, для попадания в управления ШИМ надо выполнить
while (getchar()== 0x41&getchar()== 0x42)

Если вы не попадете в тело программы, то вы не сможете задать сигнал ШИМ.
А вот если вы папали в тело, то выхода там нет. Он должен продолжаться до тех пор, пока не будет отключен МК.


Павел, я не согласен. Не будет работать Ваша программа без ПОСТОЯННОГО получения данных по UART.
Цикл While (условие) {...} выполняется только тогда (и до тех пор) когда условие = true
В противном случае программа в "тело" цикла не входит.

"Бесконечный" программный цикл делается вот так
While (1) {
.
.
.
}

У вас в коде программы стоит условие
while (getchar()== 0x41&getchar()== 0x42)
Внутрь цикла программа попадет только тогда, когда в буфере приема UART появится последовательность байт 0x41, 0x42. Это так. Проблема в том, что процедура getchar() как бы удаляет считываемый символ из входного буфера. И если больше по UART не прийдет эта последовательность байт, программа в цикл не попадет, и регулировать ШИМ не будет.

(Добавление)
Проверьте сами. Запустите все, а потом отключите софт симный или выдерните RS232. Только учтите, что движок (если он вращался) так и будет крутиться. А если нет - то Вы его энкодером уже не столкнете
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

Сообщение Pavel155 » 12 апр 2012, 17:50

Понял.
Как вариант:
While (1)
{
// Делаем выход ШИМ = 0

OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

while (getchar()== 0x41&getchar()== 0x42)
{
основная программа
}
}
Иногда пропадаю. Пишите в личку.
Аватара пользователя
Pavel155
SIMER
 
Сообщения: 172
Зарегистрирован: 06 июл 2011, 10:39
Откуда: Саратов
Благодарил (а): 0 раз.
Поблагодарили: 4 раз.
Баллы репутации: 20
Новичок

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

Нее. Это не то, что Вы хотите, видимо. Дело в том, что классический ШИМ не должен быть привязан к получению данных по UART. А должен работать по таймеру, по прерыванию от таймера. Т.е факт регулирования и факт установки конечного значения должны быть разнесены.
Аватара пользователя
Ale
Разработчик
 
Сообщения: 1477
Зарегистрирован: 01 фев 2011, 20:48
Откуда: Дубна
Благодарил (а): 570 раз.
Поблагодарили: 595 раз.
Баллы репутации: 277
ТехнарьТехнарьТехнарь

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

Pavel155 писал(а):Есть идеи как управлять ШИМом ?
Имеется ввиду преобразование ошибки в диапазон от 0 до 1024. И что делать с отрицательной ошибкой ?


Есть такой вариант - дать право приводу на ошибку (перелет) и сузить рабочий диапазон допустим по 5% с каждой стороны.
Пример весь диапазон 1000. Рабочий 50 - 950. Концевики стоят на 0 и на 1000.
график изменения напряжения на ШИМ 0-50 0В; 50-950 линейная зависимость от 0В до 5В;
950-1000 5В. Так не будет сбиваться определяемая при калибровке "средняя точка".
Аватара пользователя
AlexVr
SIMER
 
Сообщения: 449
Зарегистрирован: 05 апр 2010, 20:48
Благодарил (а): 23 раз.
Поблагодарили: 32 раз.
Баллы репутации: 71
Технарь

Сообщение Pavel155 » 12 апр 2012, 18:39

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

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

Пред.След.

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

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

Сейчас этот форум просматривают: Google [Bot] и гости: 24

cron
x

#{title}

#{text}