Программный ШИМ управления сервой на PIC16F628A

Aleksey_Gorelikov

Все что нужно - это таймер. А аппаратный шим или самому в прерывании по совпадению таймера ногой дернуть - пофиг.

AndyBig
Aleksey_Gorelikov:

аппаратный шим или самому в прерывании по совпадению таймера ногой дернуть - пофиг.

Это только если не задействованы никакие другие прерывания.

Fotilla

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

Term_PIC628_PWM.rar

AndyBig

Кстати, можно и питание серве отключать на время, когда ей не нужно менять положение. Тогда и дрожать впустую из-за джиттера она не будет 😉

mikki

В проге есть подпрограмма вывода на дисплей… померь сколько времени проходит от обращения до обращения к ней … наверняка 20мс±… не больше, иначе мерцание будет… вот сразу в ней перед выходом и воткни цикл по поднятию-опусканию ноги на рассчетное время… на работоспособности девайса лишняя 1-2мс не повлияют…
Только при расчете длины импульса введи небольшой гистерезис, чтобы серва не дрожала, как сказали выше…

AndyBig
mikki:

на работоспособности девайса лишняя 1-2мс не повлияют

Весь рабочий диапазон ширины импульса как раз составляет 1 мсек - от 1 до 2 мсек. Так что поднимать ногу еще можно раз в 20 мсек с плюс-минус парой мсек, а вот опускать ее надо в очень точно выверенный промежуток времени после поднятия. С нормальной сервой разница в пару мксек уже будет давать дрожание сервы.

mikki

1-2мс - это и есть диапазон поднятия-опускания ноги который нужно считать… я говорю что на общий цикл этот довесок не повлияет

Aleksey_Gorelikov
AndyBig:

Это только если не задействованы никакие другие прерывания.

Никто не мешает запретить другие прерывания, когда это нужно. А всякая некритичная ко времени фигня типа семисегментника и кнопок - может обрабатываться впору хоть в основном цикле или во время 20мс паузы. Ксто смотрел код “самодельного передатчика” - там вобще всего одно прерывание. 😃 Работает же. 😃

AndyBig

Да можно, конечно, кто спорит? Все можно, даже на мелкой логике собрать 😃