zhuplev писал(а):Модератору - Не смог отредактировать предыдущее сообщение.[/attachment]
Сообщение нельзя редактирвать на следующий день... таймер форума переполнился))
zhuplev писал(а):не хочет срабатывать прерывание по переполнению таймера0.
В программе ктото отключил все прерывания... Global enable interrupts: #asm("sei")...

)) повнимательней...
zhuplev писал(а):Мне кажется виной этому ожидание приёма данных по UART...
версия 5 + версия 6 = версия 7: )))
Там оба варинта приёма данных по UART:
1- по опросу флага окончания приёма UART. (ждём 2,5 мс... время между пакетами).
2- прерывание по окончанию приёма UART. (ничего не ждём...).
Разницы в работе не заметил. Т.к. таймер переполняется не чаще 8 мс... а пакеты идут 2,5 мс... Т.е. пока таймер переполнится... UART уже 3 раза обновит данные)))
А вообще... чтобы не гадать... я специально ввожу в схему (программу) "контроль". Ты зачеи отключаешь осциллограф? На нём же видно как работает программа. Все пакеты, циклы, прерывания, обработчики прерывания... В схеме можно создавать кучу контрольных точек. Видна работа всей схемы и программы...
Ну ты устроил "качели" с ПИД регулятором))) Это он туда-суда качается пока выйдет на заданный режим оборотов двигателя... Я вообщето думал сделать простой стабилизатор оборотов... Ещё не до конца разобрался с этим ПИД... А не будет "дёрганий" при движении? Разгоняемся... потом джойстик резко на себя... ПИД пересчитывает новые данные скорости... - резкий провал... затем резкий подъём.. автоколебания скорости... до выравнивания скорости... 5...10 секунд... Время установки ПИД помоему слишком долгое.
А не проще просто измерить датчики холла... Причём измерять не по переднему или заднему фронту, а по перепаду на INT0. INT1. (скорость измерения в два раза больше) и подогнать ШИМ под скорость датчиков... через блок сравнения скорость TX<>датчики INT0. INT1... предварительно сверить с массивом коэффициентов дифференциала (поправка на руль)... - обычный стабилизатор оборотов двигателя.

Время установки оборотов моторов.. помоему будет быстрей.
Кстате... ещё нужен "блок ускорения". А то на полном ходу при резком дёргании назад ждойстика на пульте, будет блокировка колёс... неуправляемый занос

Цитата: "Вывод из заноса автомобиля с задним приводом... Для вывода заднеприводного транспорта из заноса, необходимо сразу перестать тормозить, отпустить педаль и одновременно резко повернуть в сторону заноса рулевое колесо. Это поможет вывести автомобиль из заноса... " ))
То что мосфеты могут сгореть от таких токов при резком реверсе - я вообще молчу)))
Можно добавить "ускоритель" или в RX или в БУ...
перед синтезом ШИМ, пропускаем через блок ускорителя///
Кстате... а защита от пергрузки ?
А что у нас с радиомодулем? Какая пропускная способность (импульсов в секунду)? Надо подкрутить программку под радио.. а то ничего у нас работать не будет))
Ну собственно основа есть... далее точная подгонка...
Для информации: Осциллограф видит ошибку.)) Если в процессе обработки данных, принятых по UART, произойдет прерывание по окончанию приёма следующего пакета UART, то будет ошибка принятых данных... (при прерывании программа переходит в обработчик... не закончив анализ предыдущих данных... а по возвращению из обработчика, программа продолжает обработку данных... только теперь уже новых данных... в итоге: старые данные + новые данные = ошибка данных...

)
А ещё, если срабатывает несколько прерываний (одновременно сработал первый датчик... второй... и пришли данные по UART...) обработчик прерываний ставит все прерывания в очередь и выполняет их поочереди... В итоге получаем ошибку измерения скорости двигателей - (обработчик прерываний: 4 мкс+ 4 мкс + 10 мкс ) ... 20 мкс - это максимальная ошибка измерения датчиков Холла. Это нормально?

Я понимаю что у нас не высокоточный станок с ЧПУ... но всетаки... )))
Вот почему мне не нравятся программы на прерываниях... без синхронизации... Осторожней с прерываниями!
