Нестабильность из-за задержек

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Нестабильность из-за задержек

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

да, я это знаю :) собственно поэтому тот первый таймер и не делал с точностью до такта... а сейчас больше теоретические замашки...
думаю, что 20кГц на выходе смогу достичь...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Аватара пользователя
Starichok51
Модератор
Сообщения: 19039
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Re: Нестабильность из-за задержек

Сообщение Starichok51 »

Reflector писал(а):А ничего что у встроенного генератора tiny13 точность ±2% после калибровки?
точность внутреннего генератора тут совершенно ни при чем - всегда можно поставить внешний кварц.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

Re: Нестабильность из-за задержек

Сообщение dgrett »

Reflector, Да они тут с джиттером воюют. DS18B20 тоже выдаёт 00625 градуса, а на деле плюс-минус лапоть.
Я всё-всё узнAю и стану профессором.
Reflector
Поставщик валерьянки для Кота
Сообщения: 2089
Зарегистрирован: Вс июн 19, 2016 09:32:03

Re: Нестабильность из-за задержек

Сообщение Reflector »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4022699#p4022699"]точность внутреннего генератора тут совершенно ни при чем - всегда можно поставить внешний кварц.[/uquote]
До того как написать, что tiny13 по-прежнему достаточно Ivanoff-iv также говорил, что будет в эту тиньку утрамбовываться код... Зачем его утрамбовывать, если не собираешься делать именно на ней? В протеусе смысла выбирать тиньку вообще никакого, если же собирать в реальном железе, то кварц не поставишь, а без него любая попытка измерений генерируемого сигнала будет упираться в нестабильный встроенный генератор...
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Нестабильность из-за задержек

Сообщение Dimon456 »

Ivanoff-iv писал(а):Где такое :shock: как увидеть?
Вот
СпойлерИзображение
Измерьте желтый участок
Пример
СпойлерИзображение
Частота МК 16МГц (точное значение 16252928 Гц)
Частота сигнала 7981 Гц
Частота прерывания таймера 262144 Гц
Расчетный джиттер 1/262144 = 3,81 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,015625 Гц

Еще раз хочу напомнить NCO-модуль в PIC качается от 16МГц, а AD9833 от 25МГц.
На stm32f030 (тактовая 72МГц) мне удалось выжать 3МГц (частота прерывания таймера).

Для сравнения, разгоняем протеус
ИзображениеЧастота МК 520МГц (точное значение 520093696 Гц)
Частота сигнала та же, 7981 Гц
Частота прерывания таймера 8388608 Гц (чуть больше 8 МГц)
Расчетный джиттер 1/8388608 = 0,12 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,5 Гц

Рисунки gif, анимация.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Нестабильность из-за задержек

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

Ээээ, меня за усы тянуть не надо! что такое джиттер я в курсе
у меня где ты такой джиттер нашел?

Добавлено after 1 minute 43 seconds:
тини13 - психологическая граница :)
код не взорвётся, нсли я его в другой проект утяну...
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Нестабильность из-за задержек

Сообщение Dimon456 »

Ivanoff-iv писал(а):у меня где ты такой джиттер нашел?
СпойлерИзображение
Без комментариев.
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Нестабильность из-за задержек

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

а там кнопка настройки частоты не нажата?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Нестабильность из-за задержек

Сообщение Dimon456 »

Ivanoff-iv, я изначально говорил, что это делитель
СпойлерИзображениес ростом частоты растет погрешность
мало того еще и господину Reflector говорил - заставьте таймер в stm32 работать в режиме сумматора.
Ivanoff-iv, я могу синтезировать частоту
СпойлерЧастота МК 16МГц (точное значение 16252928 Гц)
Частота сигнала 7981 Гц
Частота прерывания таймера 262144 Гц
Расчетный джиттер 1/262144 = 3,81 мкс, 1 прерывание таймера
В данном примере используется 24 битный сумматор, шаг (шаг сумматора) перестройки 0,015625 Гц
от 0,015625 Гц до 131072 Гц с шагом 0,015625 Гц на всем протяжении диапазона.
Помимо того еще и не только с генерировать синус но и любой другой сигнал (пилообразный, треугольный, пользовательский).
Аватара пользователя
Ivanoff-iv
Друг Кота
Сообщения: 7077
Зарегистрирован: Пт ноя 11, 2016 05:48:09
Откуда: Сердце Пармы

Re: Нестабильность из-за задержек

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

Да, соглашусь, это хоть и не простейший, но делитель... сейчас его переделываю... на С желаемых характеристик добиться не смог, не хочет содержимое прерывания гарантированно укладываться в 128 тактов МК... хотя там одно условие, одно суммирование и одно присвоение... (я знаю почему оно не влазит... можно не объяснять).
по синтезу частоты: у МК остается время на что-то ещё?
Для тех, кто не учил магию мир полон физики :)
Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Dimon456
Мудрый кот
Сообщения: 1849
Зарегистрирован: Вс дек 25, 2016 08:34:54

Re: Нестабильность из-за задержек

Сообщение Dimon456 »

Ivanoff-iv писал(а):я знаю почему оно не влазит
да все там влазит, даже 20кГц вытягивает.
Reflector хотел что бы я его от 72Мгц кочегарнул, вот кочегарнул, пусть смотрит
СпойлерИзображение
СпойлерТестовый код Атмега168 Тактовая МК 16 МГц

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

#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <util/delay.h>

#define Fclk 16000000UL

#define Out() (PINB=(1<<0))            //переключение ножки
       unsigned int  Frq=10;           //текущая частота

register uint16_t  Tim asm("r6");   // r6 r7
register uint8_t  Ost asm("r8");   //  r8

register uint16_t  countS asm("r10");   // r10 r11

unsigned long int  tTim;//=12000000/Frq;  //вычисляем период
unsigned char tOst;//=tTim;               //последний байт (до256)

void Calc(void)                        //вычисляем период и довесок
{
tTim=8000000UL/Frq;
tOst=tTim;
tOst>>=1;                              //делим на 2
tOst|=0x80;                            //прибавим 128 (вычисляем довесок)
//у нас 2 довеска - сумма их как-раз и получится 1 полный оборот и остаток (но их пришлось делить на 2 т.к. трудно обработать 2 близко стоящих прерывания)
tTim>>=8;                              //делим период на 256
cli();
Tim=tTim;                              //выводим в буфера
Ost=tOst;
sei();
};

ISR(TIMER2_COMPA_vect)   // Шаг 0,0625 us
{   
if (countS) {countS--;}
else
  {
  countS=Tim;                          //взводим таймер обратно
  Out();                               //работаем работу
  };
  OCR2A=(countS<2)? Ost:0xff;          //выбираем скорость таймера

}

int main()
 {
   // Write your code here
// Function: Bit7=In Bit6=In Bit5=In Bit4=In Bit3=In Bit2=In Bit1=Out Bit0=Out
DDRB=(1<<DDB7) | (1<<DDB6) | (1<<DDB5) | (1<<DDB4) | (1<<DDB3) | (1<<DDB2) | (1<<DDB1) | (1<<DDB0);
// State: Bit7=T Bit6=T Bit5=T Bit4=T Bit3=T Bit2=T Bit1=0 Bit0=0
PORTB=(0<<PORTB7) | (0<<PORTB6) | (0<<PORTB5) | (0<<PORTB4) | (0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0);

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 16000,000 kHz
// Mode: CTC top=OCR2A
// OC2A output: Disconnected
// OC2B output: Disconnected
// Timer Period: 0,0625 us
ASSR=(0<<EXCLK) | (0<<AS2);
TCCR2A=(0<<COM2A1) | (0<<COM2A0) | (0<<COM2B1) | (0<<COM2B0) | (1<<WGM21) | (0<<WGM20);
TCCR2B=(0<<WGM22) | (0<<CS22) | (0<<CS21) | (1<<CS20);
TCNT2=0x00;
OCR2A=0x00;
OCR2B=0x00;


// Timer/Counter 2 Interrupt(s) initialization
TIMSK2=(0<<OCIE2B) | (1<<OCIE2A) | (0<<TOIE2);

sei();

Frq=10060;
Calc();

while (1)
      {
      }
 }
Как это был делитель так он и остался делителем.
Усе. Точка на этом.
Ответить

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