Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Микроконтроллеры (MCU) и микропроцессоры (MPU) > Зарядное уст-во


Автор: Alexei 16.7.2004, 07:56
Меня интересует можно ли чередовать периоды ШИМ: период со значением, период с нулем.Для того, чтобы сделать скважность 2 и более, не теряя разрешения.

Автор: PILOT 22.7.2004, 19:30
Поподробнее пожалуйста.

Разрешение ШИМа зависит от частоты работы генератора и кол-ва шагов в периоде.

СУВ.

Автор: Alexei 23.7.2004, 07:47
В "железе" это выглядело бы так:
1 Поделить вых сигнал ШИМ на 2
2 Сделать "И" с исходным.
Получится ШИМ поделеный на 2

Пока придумал: по прерыванию Таймера 0, включать - отключать выход ШИМ

Автор: PILOT 23.7.2004, 08:10
Вы хотите увеличить частоту ШИМ?

СУВ.

Автор: Alexei 23.7.2004, 11:21
Наоборот уменьшить , но главное увеличить скважность: длина импульса не должна превышать 1/2 периода, с сохранением разрешения(можно ограничить ШИМ 128 битами, но надо сохранить 255)
В "железе" делалось бы так:http://www.mura.pochta.ru/PWM.jpg
user posted image
Надо получить сигн3- программно.

Автор: PILOT 23.7.2004, 21:49
Я что-то не пойму...
используйте хоть 512, на выходе интегратор на операционнике.
И делайте любую скважность.

СУВ.

Автор: Alexei 24.7.2004, 07:38
Я хочу использовать тини26 в импульсном источнике, к выходу МК подключить ключ и L.
ШИМ там 8р - значит 256.
Скважность(период/длит имп) нужна > 2.
Короче, нужно получить сигнал , как бы поделенный на 2: пол периода ШИМ(0-256), пол - пауза.Как это сделать программно?



Автор: PILOT 24.7.2004, 09:35
Вы совершенно правильно отметили: "программно".

Таймер считает от 0 до 255. В ОCR вы заносите меняющееся значение.
В каждом втором прерывании по Сравнению устанавливаем логический ноль на ножке, в каждом втором прерывании по переполнению устанавливаем единицу на ножке.

СУВ.

Автор: Alexei 24.7.2004, 13:01
Цитата(PILOT @ 24.7.2004, 09:35)
Вы совершенно правильно отметили: "программно".

Таймер считает от 0 до 255. В ОCR вы заносите меняющееся значение.
В каждом втором прерывании по Сравнению устанавливаем логический ноль на ножке, в каждом втором прерывании по переполнению устанавливаем единицу на ножке.

СУВ.

Ну, это уж совсем -"ПРОГРАММНО!" biggrin.gif Но тоже вариант.
А если только подключать -отключать PWM по переполнению таймера, меняя бит COM1A1 или COM1A0 в TCCR1A ?
На эмуляторе работает.

Автор: PILOT 24.7.2004, 14:14
Не уверен что это корректно. Все-таки менять режимы с такой частотой...
Я бы сделал именно программно.

СУВ.

Автор: Alexei 26.7.2004, 20:51
Нет, программно не потянет.
Даже, если взять МК на 16 МГц , то при около 30 кГц (16мкс +16 пауза)
Время на 1 операцию соизмеримо с разрешением ШИМ sad.gif
Вот так- думаешь, что-нибудь на МК сделать, думаешь, а потом бац... sad.gif
И надо доделывать "жесткой" логикой.

Автор: PILOT 27.7.2004, 07:55
ээээ.
считаем ШИМом на частоте 16МГц от 0 до 255, получается частота выходного сигнала 62500 Гц = 62.5кГц
+ пауза 255 = 31кГц, и что вас не устраивает?
чтобы это получить в прерывании делаем то что я написал выше.
Если нужны импульсы, то так и оставляем, если нужно напряжение, то ставим интегратор (либо операционник с обратной связью, либо RC-цепь с буферным каскадом).

СУВ.

Автор: Alexei 27.7.2004, 16:40
Цитата(PILOT @ 27.7.2004, 07:55)
получается частота выходного сигнала 62500 Гц = 62.5кГц
+ пауза 255 = 31кГц, и что вас не устраивает?

СУВ.

Это устраивает, неустраивает , что придется потратить 10-20 тактов на каждый перепад, а их всего 255

Автор: PILOT 27.7.2004, 18:00
Так Вы же в прерывании их тратите (и их будет где-то 5-10), они не влияют на счет.

СУВ.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)