Страница 1 из 1
Программирование ESC регулятора
Добавлено: Чт апр 14, 2016 21:48:16
alexf58
Прочитал "Программирование ESC регулятора". ОК, задача выполнена, устройство запрограммировано. Но хочу высказать некоторые соображения.
Использование магических временнЫх констатнт требует их подгонки под конкретное устройство и не особо надежно. Это проходит для RS232 когда передается всего 8 бит. Если же бит много, то надо синхронизироваться как можно чаще. Более корректная программа должна отлавливать переходы 0 в 1 и обратно и каждый раз начинать считать время от перехода.
Re: Программирование ESC регулятора
Добавлено: Вт апр 19, 2016 22:44:26
boka1733
alexf58 писал(а):... хочу высказать некоторые соображения.
Использование магических временнЫх констатнт требует их подгонки под конкретное устройство и не особо надежно. Это проходит для RS232 когда передается всего 8 бит. Если же бит много, то надо синхронизироваться как можно чаще. Более корректная программа должна отлавливать переходы 0 в 1 и обратно и каждый раз начинать считать время от перехода.
Замечание верное по сути, но, только не к данной работе. Задача была понять протокол обмена программатора <> регулятора двигателя и его эмулировать "подручными" средствами.
В изученном протоколе нет синхронизации, поэтому пришлось исходить из минимальной длительности импульса. Для бОльшей надежности можно было-бы считывать три раза состояние порта за длительность импульса и применять мажоритарное определение ....однако, для 150 бит это слишком избыточно. Импульс "широкий" и просто ничего не успевает поплыть для однократного измерения в середине импульса.
Отлавливать переходы 1 в 0 ... в данном случае невозможно.
Последовательность , допустим, пяти единиц передается просто удержанием "1" в течение 5*tImp.
Как её получать? ведь за эти пять тактов нет ни одного перепада из 0 в 1 или наоборот.
Это в других протоколах так реализовано. Например RC-5 ИК пультов. Там действительно "1" передается перепадом 1>0, а "0" перепадом 0>1. Тут и надо применять прерывание по изменению состояния порта.
Re: Программирование ESC регулятора
Добавлено: Чт апр 21, 2016 06:14:25
alexf58
Не понятно почему "Отлавливать переходы 1 в 0 ... в данном случае невозможно."
Понятно, что при передаче 5 единиц подряд переходов нет, но что мешает отловить следующий переход, поделить время, пока сигнал был в "1" на примерное время одного импульса. Допустим получится 5. Дальше начать отсчет от этого перехода и, за одно, уточнить время одного импульса поделив этот интервал на 5.
Еще раз: раз у Вас все получилось, то и слава богу. Но Вы же писали что пришлось задержку подбирать.
Re: Программирование ESC регулятора
Добавлено: Вс апр 24, 2016 15:48:58
boka1733
alexf58 писал(а):
....Но Вы же писали что пришлось задержку подбирать.
Не ради флэйма отвечаю - задержку пришлось подбирать из-за особенностей компилятора Ардуино, а не алгоритма кодирования.
В этой среде время выполнения даже простой команды может быть в разы больше, чем команда на "чистом" С или ассемблере.
Поэтому паузу через delay пришлось уменьшить, чтобы идущие за ней команды "дотянули" импульс до требуемого.