Генератор с длительностью импульсов 20us с частотой 80Khz

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Генератор с длительностью импульсов 20us с частотой 80Khz

Сообщение Chip_step »

Привет всем. Вот пытаюсь сделать генератор импульсов 20us и с частотой 80Khz.
вот не могу понять как реализовать линейную регулировку частоты 80hz - 80Khz.
Мой код:

Код: Выделить всё

#include <mega32a.h>

//#define PORT_PWM PORTA.0
//#define BIT_pwm 0

volatile unsigned char t_pwm=5;  
static unsigned char count=0;

// Timer1 overflow interrupt service routine
 interrupt [TIM1_OVF] void timer1_ovf_isr(void)
 {
  TCNT1H=0xFF60 >> 8;
  TCNT1L=0xFF60 & 0xff;

  count++;
  if(count>=t_pwm){
  PORTA.0=1;
  #asm("nop")
   #asm("nop")
    #asm("nop")
     #asm("nop")
      #asm("nop")
       #asm("nop")
        #asm("nop")
         #asm("nop")
  PORTA.0=0;       
  count=0;
    // PORTA.0^=(1<<BIT_pwm);
  }
 } 
 
 

 
 
 
 
 
 
void main(void)
{

PORTA=0x00;
DDRA=0xff;



// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 0,01 ms
// Timer1 Overflow Interrupt: On
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1H=0xFF;
TCNT1L=0x60;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

TIMSK=(0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (0<<OCIE1A) | (0<<OCIE1B) | (1<<TOIE1) | (0<<OCIE0) | (1<<TOIE0);



#asm("sei")


while (1)
      {

      }
}
Реклама
Аватара пользователя
Alex-lab
Потрогал лапой паяльник
Сообщения: 308
Зарегистрирован: Ср ноя 20, 2013 11:29:26
Откуда: Манчестер
Контактная информация:

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Alex-lab »

На частоте 80кГц период 12.5мкс. Как вы хотите 20 получить?
При решение наиболее сложных задач, большинство, как правило, ошибается...
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Dimon456 »

Clock value: 16000,000 kHz, без переключения делителя можно перекрыть диапазон от ~250Гц до 50кГц(20us).
Ниже 250Гц потребуется делитель переключать.
Ну а примерный код выглядит так
Спойлер

Код: Выделить всё

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inverted PWM
// OC1B output: Disconnected
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);
TCNT1=0x00;

ICR1 = 0x140; // от 0x140 до 0xFFFF

OCR1A = 0x13F; // 20us
Аватара пользователя
Chip_step
Родился
Сообщения: 19
Зарегистрирован: Сб янв 30, 2021 16:34:46

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Chip_step »

По длительности импульса, не критично в меньшую сторону до 10uS.
ШИМ аппаратный не подходит, так как он жёстко привязан к портам МК.
Реклама
Эиком - электронные компоненты и радиодетали
parovoZZ
Мудрый кот
Сообщения: 1759
Зарегистрирован: Пт июн 01, 2018 07:28:45

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение parovoZZ »

В Attiny841 ни что ни к чему не привязано.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Аlex »

Chip_step писал(а):линейную регулировку частоты 80hz - 80Khz
80 Khz = 12.5 us период.
79 Khz= 12,65822784810127 us период.
Я уже не говорю о периоде на частоте 79999 hz, и разницы его с 80Khz.

Вопрос. Вы адекватно себе представляете задачу ?
Chip_step писал(а):ШИМ аппаратный не подходит
Уверены, что он бы Вас спас ?

PS: И причём тут вообще 20 us ? С какой стороны и к чему их приклеить ?
Реклама
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Dimon456 »

Chip_step писал(а):ШИМ аппаратный не подходит, так как он жёстко привязан к портам МК.
:dont_know:
Спойлер

Код: Выделить всё

ISR(TIMER1_COMPA_vect)
{
	PORTD &= ~(1<<0);
}

ISR(TIMER1_COMPB_vect)
{
	PORTD |= (1<<0);
}


// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Disconnected
// OC1B output: Disconnected
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer Period: 0,0625 us
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: On
TCCR1A=(0<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (1<<WGM11) | (0<<WGM10);
TCCR1B=(0<<ICNC1) | (0<<ICES1) | (1<<WGM13) | (1<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10);

ICR1 = 0x140; // от 0x140 до 0xFFFF

OCR1A = 0x13F; // 20us	

OCR1B = 0;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK = (0<<OCIE2) | (0<<TOIE2) | (0<<TICIE1) | (1<<OCIE1A) | (1<<OCIE1B) | (0<<TOIE1) | (0<<OCIE0) | (0<<TOIE0);

sei();
OCR1A = ((20 * 16)-1) или сколько вам там нужна длительность импульса.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение BOB51 »

"Линейной" регулировки на простом делителе/ШИМ в указанном диапазоне (80Гц-80КГц) не получить - будет с повышением частоты изменяться шаг перестройки. Чем выше частота, тем грубее перестройка.
Если шаг перестройки в 20-50Гц на диапазоне за 10Кгц и выше устраивает - можно на основе Т1 "быстрый ШИМ" попытаться соорудить (и то если речь идет о разумной длительности импульса).
Альтернатива только DDS.
8)
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Reflector »

[uquote="BOB51",url="/forum/viewtopic.php?p=3977847#p3977847"]"Линейной" регулировки на простом делителе/ШИМ в указанном диапазоне (80Гц-80КГц) не получить - будет с повышением частоты изменяться шаг перестройки. Чем выше частота, тем грубее перестройка.[/uquote]
Чем грубее перестройка, тем выше погрешность, в том числе линейной перестройки. Ничего же не мешает менять частоты с шагом, допустим, ~100 Гц.
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Dimon456 »

За чем такие сложности, DDS, ~100 Гц? Есть же NE555.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15575
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение BOB51 »

"хотелка" топикстартера - 80Гц-80КГц...
:dont_know:
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Dimon456 »

Reflector писал(а):Чем грубее перестройка, тем выше погрешность, в том числе линейной перестройки.
Не такая уж это и существенная ошибка
СпойлерИзображение
Шаг перестройки частоты 200Гц
Ошибка указана в Герцах
тем более это не специализированный инструментальный чип.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Sergi »

Можно попробовать по принципу PLL. Например управляемый генератор на 555 с делителем на 16 и в цепи обратной связи МК для расчета регулировок. Наверное можно получить шаг менее 10 Гц во всем диапазоне. 80000,79990,79980....
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6312
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Jack_A »

И какая же будет точность/стабильность на 555? Тут шаг перестройки 10Гц на 80кГц покажется не очень удачной шуткой.
Изображение
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Sergi »

Я написал про принцип ФАПЧ и ГУН. Выходная частота вычисляется как умноженная на К(целое) опорная частота. В данном случае 10Гц. Как это реализовать есть много способов,например ЦФАПЧ. На чем - желание и право выбора ТС.
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Sergi »

В простом случае нужно три таймера. Т0- с внешним входом, на него подаём сигнал с гун.
Т1- опорный ,делит внутреннюю частоту до 10 гц,по нему срабатывает прерывание.
Т3- для цап, вместе с rc фильтром формирует напряжение управления гун.
Гун с необходимой перестройкой по частоте, возможно многодиапазонный.
В прерывании от т1 вычисляется разница между т0 и заданной частотой. Это сигнал ошибки для ПИ регулятора.регулятор выдаёт управляющий код в т3 и далее на гун.
Схему гун на 555 смотреть в гугл.

Добавлено after 51 minute 9 seconds:
Re: Генератор с длительностью импульсов 20us с частотой 80Khz
Если в МК есть ещё один таймер с внешним входом можно упростить гун. Сделать с перекрытием в 3, 70-200 кгц и далее на дополнительный таймер с делением на 2-500 и с выхода брать нужную частоту. И все это почти не грузит ядро, только прерывание 10 раз в секунду. Для полного функционирования нужно 6(8) ног МК. 2- на spi дисплей, 2- на кнопки +/-,2- вход т0,выход т3 и если по богатому, 2- вход/выход дополнительного таймера.
В зависимости от гун и таймеров можно повысить точность установки до 1 гц.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Ivanoff-iv »

есть тиньки с PLL на 64МГц для таймера.... может на такой будет проще собрать?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Sergi
Мучитель микросхем
Сообщения: 412
Зарегистрирован: Ср янв 04, 2012 11:57:40
Откуда: Алчевск

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Sergi »

А еще есть 74hc4046
Аватара пользователя
Zhuk72
Сверлит текстолит когтями
Сообщения: 1231
Зарегистрирован: Ср янв 29, 2014 08:41:31
Откуда: Баку
Контактная информация:

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение Zhuk72 »

Это обязательно должно быть на АВР сделано?
Каждый имеет право на свое личное ошибочное мнение.

У меня было тяжелое детство - я до 14 лет смотрел черно-белый телевизор.
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25297
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Re: Генератор с длительностью импульсов 20us с частотой 80Kh

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=3977847#p3977847"]Альтернатива только DDS.[/uquote]
Это не альтернатива. Это БЕЗальтернатива. :)))
Нужно взять МК с NCO модулем.
Ответить

Вернуться в «AVR»