реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Fast PWM на AVR
Валентиныч
сообщение Mar 18 2006, 14:01
Сообщение #1


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Парочка вопросов к уважаемой публике.
1) Можно ли на Меге 8 (f(clc)=8 МГц, Timer2) организовать PWM с программной регулировкой частоты (от 20 до 200 кГц) и скважности (с дискретностью не хуже 5 %) ШИМ-сигнала?
2) Если можно - то КАК ЭТО СДЕЛАТЬ (какие настройки таймера использовать)?

Сообщение отредактировал Валентиныч - Mar 18 2006, 14:03


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
DS
сообщение Mar 18 2006, 14:09
Сообщение #2


Гуру
******

Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250



Насколько я помню, аппаратный режим ШИМ с частотой, больше, чем 1/256 тактовой организовать нельзя.
"Руками" 200 Кгц с 5% тоже - Вам надо будет отрабатывать все с точностью 2 такта. Если взять 20 Мгц версию AVR и на ассемблере сильно потрудиться, может и получиться.


--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 18 2006, 16:32
Сообщение #3


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Спасибо, был в этом уверен, требовалось подтверждение.
Тогда другой вопрос.
Позволяет ли СТС мода для таймера 2 той же микросхемы одновременно задать нужную частоту ( в пределах f/256) и скважность? Или можно задать только частоту, при неизменной выходной скважности 2 (меандр)?

Сообщение отредактировал Валентиныч - Mar 18 2006, 16:37


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
DS
сообщение Mar 18 2006, 16:52
Сообщение #4


Гуру
******

Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250



Если писать в OCR 2 раза за период, то можно управлять и частотой и скважностью. Соотвественно зависит от Ваших возможностей отреагировать на прерывание по CM

Сообщение отредактировал DS_ - Mar 18 2006, 16:53


--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 18 2006, 17:03
Сообщение #5


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Нет, это не реально. sad.gif
А как организовать инкремент значения OCR, чтобы, допустим, каждые 5 периодов ШИМа менять его частоту? Придется использовать прерывания этого таймера?

Сообщение отредактировал Валентиныч - Mar 18 2006, 17:06


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
Stanislav
сообщение Mar 18 2006, 17:09
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 4 363
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 987



Может, Вам всё-таки ЧИМ нужна? Если ширина импульса фиксирована, это можно попытаться устроить...


--------------------
Самонадеянность слепа. Сомнения - спутник разума. (с)
Go to the top of the page
 
+Quote Post
DS
сообщение Mar 18 2006, 17:09
Сообщение #7


Гуру
******

Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250



Так аппаратный ШИМ практически на фиксированной частоте работает. Разве что прескейлер менять. А там где 2, где 4 раза шаг. В моде CTC, если Вы ШИМ делаете - переписывание значения ОСR и так при каждом прерывании - см. datasheet.

Сообщение отредактировал DS_ - Mar 18 2006, 17:10


--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Mar 18 2006, 17:34
Сообщение #8


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(Stanislav @ Mar 18 2006, 22:09) *
Может, Вам всё-таки ЧИМ нужна? Если ширина импульса фиксирована, это можно попытаться устроить...

Подскажете - буду рад, самому реализовать не удается.

Цитата(DS_ @ Mar 18 2006, 22:09) *
Так аппаратный ШИМ практически на фиксированной частоте работает. Разве что прескейлер менять. А там где 2, где 4 раза шаг. В моде CTC, если Вы ШИМ делаете - переписывание значения ОСR и так при каждом прерывании - см. datasheet.
Не всегда - допустим, у Тини 15, если память не изменяет, имеется OCRA и OCRB - это позволяет "конструировать" и частоту ШИМ и его скважность одновременно. В Мегах такой фишки не нахожу. sad.gif


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
DS
сообщение Mar 18 2006, 17:39
Сообщение #9


Гуру
******

Группа: СуперМодераторы
Сообщений: 3 096
Регистрация: 16-01-06
Из: Москва
Пользователь №: 13 250



Так это же 1 таймер. В Меге он 16 разрядный. 2 в Tiny нет вообще, кажется.

Для ЧИМ на втором таймере, похоже тоже понадобиться 2 записи на период.

Сообщение отредактировал DS_ - Mar 18 2006, 17:41


--------------------
Не бойтесь тюрьмы, не бойтесь сумы, не бойтесь мора и глада, а бойтесь единственно только того, кто скажет - "Я знаю как надо". А. Галич.
Go to the top of the page
 
+Quote Post
defunct
сообщение Mar 18 2006, 18:38
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Вот пример реализации ЧИМ + ШИМ на Tiny13 (OCR0A - регулирует частоту, OCR0B - ширину импульса):

Код
.include <tn13def.inc>
.def AL = R24
.def AH = R25

.equ  Period = 100;
.equ  SwitchPoint =  20;

;--------------------------------------------------
; Макрос настройки таймера T0 на работу в режиме ОС
; с длительностью периода = Period, и скважностью шириной импульса определяемой SwitchPoint
.macro INIT_TIMER0
    ldi  AL, (Period); Длительность периода
    out  OCR0A, AL

    ldi  AL, (SwitchPoint); Скважность
    out  OCR0B, AL

    ldi  AL, (1 << WGM01);  Режим CTC по достижению OCR0A
    out  TCCR0A, AL

    ldi  AL, 1
    out  TCCR0B, AL;   Режим подсчета тактов (Prescaler = 1)

    ldi  AL, (1 << OCIE0A)|(1 << OCIE0B); Разрешить оба прерывания по достижению OCR0A и OCR0B
    out  TIMSK0, AL
.endmacro
;---------------------------------------------------
.cseg

;===================================================
; ENTRY POINT
;===================================================
.org 0
    rjmp  Start
    reti; IRQ0 Handler
    reti; PCINT0 Handler
    reti; Timer0 Overflow Handler
    reti; EEPROM Ready Handler
    reti; Analog Comparator Handler
    rjmp  TIM0_COMPA; Timer0 CompareA Handler
    rjmp  TIM0_COMPB; Timer0 CompareB Handler
    reti; Watchdog Interrupt Handler
    reti; ADC Conversion Handler

START: //
    ldi   AL,low(RAMEND); Main program start
    out   SPL, AL
    ldi   AL, $FF
    out   DDRB, AL

    INIT_TIMER0; Инициализация таймера

    sei


;****************************************************
; Основной цикл программы
;****************************************************
MainCycle:          
    rjmp  MainCycle  

    
;****************************************************
; Обработчик прерывания TMR0 (Timer 0 OC)
;****************************************************
TIM0_COMPA:; Timer0 Compare A Handler
    cbi   PortB, 0
    reti

;****************************************************
; Обработчик прерывания TMR0 (Timer 0 OC)
;****************************************************
TIM0_COMPB:; Timer0 Compare B Handler
    sbi   PortB, 0
    reti


Удачи

Цитата
В Мегах такой фишки не нахожу.

В мегах то же самое только на таймере 1. Поле для конструирования частот и ширины куда больше т.к. таймер 16-бит. если не нужно использовать все 16 разрядов, то можно производить запись соответственно только в младшую часть регистров OCR1AL, OCR1BL..

Сообщение отредактировал defunct - Mar 19 2006, 06:54
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 01:27
Рейтинг@Mail.ru


Страница сгенерированна за 0.0146 секунд с 7
ELECTRONIX ©2004-2016