Radist » 26 июн 2011, 08:42
Имеем: два аналоговых датчика, находящихся над краями линии. Когда робот стоит ровно - код с них равен (неодинаковость датчиков робот компенсирует небольшим смещением на линии). Вычитаете из одного показания ацп другое - получаете отклонение от линии, знак покажет в какую сторону. Это рассогласование. Именно это является исходными данными для ПИД регулятора. Умножаете отклонение на П, разность с предыдущим отклонением умножаете на Д, складываете (ПД тоже неплохо работает) - получили рассогласование скоростей моторов. Записали данные в регистры ШИМ (учитывая максимальную скорость и ограничение снизу нулем), все цикл завершен. Когда с обоих датчиков приходят одинаковый код - мы на линии ровно, при вычитании ноль, рассогласование скоростей ноль, то есть оба мотора крутятся с максимальной скоростью. Если линия ушла, один датчик на черном (код будет маленьким), другой на белом (код большой), вычли, узнали знак, вычислили рассогласование скоростей, вернулись на линию.