roboforum.ru

Технический форум по робототехнике.

AtMega16. ШИМ на Т/С1. Proteus.

Учиться можно на своих ошибках, но учиться на чужих — быстрее и дешевле ;)

AtMega16. ШИМ на Т/С1. Proteus.

Сообщение folk_fox » 10 июн 2011, 20:11

Необходимо сделать ШИМ на Т/С1 для изменения среднего напряжения на лампочке.
Вот код программы:

;=================================
.include "m16def.inc"

.org 0x00
rjmp reset
reset:
clr r25
out ocr1ah, r25
ldi r25, 255/2
out ocr1al, r25
ldi r25, 0b10000001
out tccr1a, r25
ldi r25, 0b1
out tccr1b, r25
cycle:
rjmp cycle
;====================================

Изменяя в строчке:

ldi r25, 255/2

значение регистра сравнения -> получаю ШИМ.

Т.о., как я ожидаю, на выходе OC1A напряжение должно ШИМить от 0 до 5 В.
Если я задаю значение в регистре сравнения 255/1 - соответственно на OC1A должно быть 5В.
Если задаю 255/2, то, как мне думалось, на OC1A должно быть 2,5 В.
Проблема в моделировании в Протеусе:
1) Если оставить вывод OC1A пустым и задать 255/1, то Вольтметр показывает напряжение 5В на нём (всё вроде бы правильно), а вот осциллограф упорно показывает 0.
2) Если к выводу OC1A подсоединить лампу и задать 255/1, то напряжение на выводе становится почему-то равным нулю и лампа соответственно не горит.
3) Если оставить вывод OC1A пустым и задать 255/2, то Вольтметр показывает напряжение 3,95В на нём (вместо 2,5 В, как вроде бы должно быть), а осциллограф показывает ШИМ, но напряжение в этом ШИМ колеблется от 2.5 В до 5 В (хотя вроде бы как должен от 0 до 5В колебаться), хотя и колеблется с правильной скважностью 50% (Согласно 255/2).
4) Ну и если повесить лампочку на вывод OC1A для случая 255/2, то и вольтметр и амперметр показывают 0.

Совершенно не пойму в чём косяки... то ли это особенности Протеуса, то ли и в реальном МК вывод OC1A будет так себя вести.
В приложенном Архиве содержится сам текст программы, hex-файл с программой, файл для Протеуса и скриншот с резултатами работы Протеуса и 2 листочка теории по организации ШИМ на Т/С1.
Заранее благодарю вас за помощь.
Вложения
PWM_on_TC1.rar
Приложенный архив
(3.01 МиБ) Скачиваний: 0
folk_fox
 
Сообщения: 2
Зарегистрирован: 09 июн 2011, 16:08

Re: AtMega16. ШИМ на Т/С1. Proteus.

Сообщение Vovan » 10 июн 2011, 22:27

Проект смотреть влом :oops: Однако при всем при том Вы не указали параметры "цепляемой" лампочки к порту - что есть почти недопустимо ибо лампочка для МК практически=КЗ. Лампочку нужно (как и любой другой потребитель) подбирать в соответствии с параметрами (по току и напряжению) порта (см. д\ш МК), а иначе лампочка просто кусок провода. Сделайте ей (лампочке) обвязку (типо транз ключа или ОУ) и будет Вам щастье... Возможно я не очень глубоко вник в суть проблемы, однако слова
Ну и если повесить лампочку (ноунэйм) на вывод OC1A
ставят в тупик не только меня, но и беднягу Протеуса.
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: AtMega16. ШИМ на Т/С1. Proteus.

Сообщение folk_fox » 10 июн 2011, 23:01

У лампочки можно задавать параметры... Я задал напряжение питания 5 В и сопротивление пробовал и 1k и 10k ставить (чтобы резюк не вешать)... А если брать транзистор, то какой? Я пробовал с парой транзисторов делать но на одном падало на КЭ 4 В, на другом 2,5 В, как будто он работает в усилительном режиме...

Добавлено спустя 23 минуты 25 секунд:
Я попробовал сделать с транзисторным ключом.. Всё равно получилось странно... Выходной ШИМ с OC1A колеблется вокруг ноля (от -1.05 до +1.05), а шим на лампочке весит над нулём и колеблется вокруг значения 3.47, что собственно видно и на вольтметре...

Изображение
folk_fox
 
Сообщения: 2
Зарегистрирован: 09 июн 2011, 16:08

Re: AtMega16. ШИМ на Т/С1. Proteus.

Сообщение HarryStar » 11 июн 2011, 02:15

Транзистор берите сразу IRL3705N чтоб не парится. Держит ток в десятки ампер, я подключал автомобильные фары через него, транзистор холодный, все ок. Напрямую к МК можно вместо лампочки подключить светодиод через резистор около 500 ом.

Незнаю, что вы там меряете, но явно не то. ШИМ представляет из себя последовательность импульсов одинаковой амплитуды. Для вольтметра постоянного тока это переменное напряжение, которое он может неправильно измерять. Чтоб получить разное напряжение на основе сигнала ШИМ, его надо подключить к RC цепочке(которая будет фактически усреднять значение) и снимать напряжение с конденсатора. Тогда оно будет нормально плавать от 0 до 5В. ВНИМАНИЕ: Для управления нагрузкой типа лампочки RC цепочка не нужна. Напряжение на нагрузке всегда или 0 или максимум(у вас 5В), в этом смысл ШИМа, промежуточных значений нет и не надо.
Аватара пользователя
HarryStar
 
Сообщения: 995
Зарегистрирован: 15 ноя 2010, 13:56
Откуда: Нижний Новгород
прог. языки: С, С++, РНР


Вернуться в Осторожно — грабли ;)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5