| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Микроконтроллеры (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 ![]() Надо получить сигн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 | ||
Ну, это уж совсем -"ПРОГРАММНО!" А если только подключать -отключать PWM по переполнению таймера, меняя бит COM1A1 или COM1A0 в TCCR1A ? На эмуляторе работает. |
| Автор: PILOT 24.7.2004, 14:14 |
| Не уверен что это корректно. Все-таки менять режимы с такой частотой... Я бы сделал именно программно. СУВ. |
| Автор: Alexei 26.7.2004, 20:51 |
| Нет, программно не потянет. Даже, если взять МК на 16 МГц , то при около 30 кГц (16мкс +16 пауза) Время на 1 операцию соизмеримо с разрешением ШИМ Вот так- думаешь, что-нибудь на МК сделать, думаешь, а потом бац... И надо доделывать "жесткой" логикой. |
| Автор: PILOT 27.7.2004, 07:55 |
| ээээ. считаем ШИМом на частоте 16МГц от 0 до 255, получается частота выходного сигнала 62500 Гц = 62.5кГц + пауза 255 = 31кГц, и что вас не устраивает? чтобы это получить в прерывании делаем то что я написал выше. Если нужны импульсы, то так и оставляем, если нужно напряжение, то ставим интегратор (либо операционник с обратной связью, либо RC-цепь с буферным каскадом). СУВ. |
| Автор: Alexei 27.7.2004, 16:40 | ||
Это устраивает, неустраивает , что придется потратить 10-20 тактов на каждый перепад, а их всего 255 |
| Автор: PILOT 27.7.2004, 18:00 |
| Так Вы же в прерывании их тратите (и их будет где-то 5-10), они не влияют на счет. СУВ. |