Перейти к содержанию
    

Waso

Свой
  • Постов

    303
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Waso


  1. Владимир, объясните пожалуйста подробнее. Или дайте ссылку на литературу. В хэлпе не нашел и сам пока не разобрался. Тип площадок для фанаута это что? PLC, BGA в Fanout control и тп? И где ширина дорожек для фанаута задется - тоже ненашел.

  2. Как в PCB Filter сослаться на текущий слой? (он может быть любым). Нужно для того чтоб затенять обьекты находящиеся на других слоях для удобства разводки.. И вообще хотелось бы чтоб это выполнялось автоматически.

  3. Вопрос в тему. AD.sum08. Как сделать чтобы фанаут подстраивался под ширину ножек микросхем? У меня в правилах выставлена минимальная ширина дорожки 0.25мм, предпочитаемая 0.4мм. Хочу чтоб от микросхем с шагом ног 0.5мм фанаут автоматически отводил шину линиями 0.25, и где место позволяет - рисовал бы уже дорожки шириной 0.4мм.

  4. Давайте посчитаем целевой. Он сейчас нужнее. :)

     

    1. Размах выходного напряжения - +/- 4В.

    2. Время установления до величины 97% при перепаде на выходе макс/мин (что соотв. ошибке в 0,5 МЗР для 4-битного ЦАП) - 3 нС.

    3. ВЫходное сопротивление - не более 10 Ом.

    4. Нелинейность - не более 3% от полной шкалы (0,5 МЗР).

    5. Активное сопротивление нагрузки - 51 кОм.

    6. Ёмкость нагрузки - 12 пФ.

    7. Напряжение источников питания +/- 5В.

     

    И повторюсь, мне интересно услышать рассуждения при расчетах, а не списать готовые цифры.

    Спасибо.

  5. asdf, +1

     

    Stanislav, простите, я непонимаю каких условий нехватает. Давайте я опишу методику как я ее вижу, а Вы меня поправите. Требуется построить 4-х разрядный ЦАП, который бы сочетал простоту (компактность), малое потребление и при этом обладал-бы как можно лучшими характеристиками. Причем простота и потребление в данной задаче всеже стоят на первом месте. Известна частота переключения - от 30 до 100МГц. Нагрузка 51кОм, 12пФ. Есть двуполярное питание, в испытательной модели до +-30В, в целевой - +-5В. На выходе ЦАПа нужно получить как можно бОльший размах напряжения, в идеале - меньший размаха питающих напряжений на 1-2В. Линейность, точность - конкретных цифр нет. Надо сделать на сколько возможно лучше без чрезмерного загромождения схемы. Вот такая задача.

     

    Рассчет. Для удобства возьмем питание +-5В. Благодаря симметричности будем рассматривать например только нижнюю половину. Начнем с выхода. R15 частично компенсирует зависимое от тока сопротивление эмиттера Т12. Если на транзисторе падает 0.6В (это от фонаря, а по хорошему надо лезть на ВАХ и определять...), пусть на R15 упадет 0.4В. При каком токе? На 100МГц сопротивление нагрузки 12пф будет 1/(2пFC) = 130 Ом. 4В/130 Ом = 32мА (все приближенно, с запасом). Тогда R15 = 0,4В/32мА = 12 Ом. В цепи базы Т12 ток в h раз меньше коллекторного. Пусть h=10. Следовательно макс ток зеркала T4,T10 - 4мА (запас!). Базовая цепь Т8 - 0.4мА. R13=(10B-2Ud4)/0.4мА. Напряжение Ud4 непонятно как выбрать. Это сумма падений на R12, к-э Т10(?) и б-э Т8 (0.6В ?). R12, R6 улучшают температурную стабильность зеркала, но и ограничивают максимальный ток. R12=R6=(Umin_r6 ?)/4мА. Ну и так далее. Мутно.

     

     

    Я понимаю GetSmart-a. Симулятор показал, что зеркала и каскады с ОЭ сглаживают ступеньку. Откуда тут возьмется быстродействие на техже транзисторах?

     

    GetSmart, а не подскажете как мне всетаки предельные значения выхода приблизить к питающему напряжению? Ато я только из-за этого оставляю зеркало...

  6. Есть одна просьба. Можете заменить транзистор в источнике тока на что-нить вроде аналога КТ315 и привести графики на этой же частоте? Мне интересно.
    Старички 315 и 361 у меня есть среди моделей в симуляторе. Что получилось для разных схем - см в приложении.

     

    Нагрузка у меня 51кОм, 12пФ. Насчет точности я тоже упоминал гдето в середине -> +-10% по уровню для каждой ступеньки от идеального значения.

     

    Ставил 4 резистора последовательно в каждую линию матрицы - не помогло. Да и в микрокэпе вроде как нет паразитной емкости/индуктивности резисторов. Я этого параметра не видел. Косяк однако...

     

    Stanislav, как раз с расчетами я не шибко дружу. Если приведете методику в двух словах (а не готовые цифры) - скажу большое спасибо. :)

    post-10470-1216961087_thumb.jpg

    post-10470-1216961112_thumb.jpg

  7. GetSmart, тоесть ОУ улучшает линейность, так? Немножко непонятен тогда принцип его работы, потомучто потенциал опорника он сравнивает с землей...

     

    Вобщем полученными результатами я доволен. Так что всем спасибо. Но тема оказалась намного живее и интересней чем я предполагал. Поэтому если у кого есть какието советы или замечания - пожалуйста говорите.

    Смущают меня только броски на середине лесенки. То что этот выброс больше остальных говорит о том что транзистор старшего разряда медленно закрывается. Хотя сидят они в одной микросхеме и нагружены одинаково. Что не так?

     

    ============================

    Дошло. Чем больше тычок - тем больше транзисторов выключается в этот момент. Например переход 0111 -> 1000.

  8. GetSmart, Вы меня опередили насчет виртуального нуля :)

     

    А вот с вашей последней схемой чтото не так. Поскольку минус микросхемы сидит на -30В, выход будет прыгать только между -25 и -30В. И объясните пожалуйста смысл операционника - он стабилизирует только по температуре?

     

    Чем плоха такая схема: (см рис). Будет ли работать стабилизация по температуре. (в симуляторе работает).

    Я тут проверил масштабируемость по питанию. Легко масштабируется, меняется только сопротивление R60.

    post-10470-1216894900_thumb.jpg

  9. 2 Waso

    Пожалуйста, посмотрите внимательно на схему этого ЦАПа и скажите, что в ней показалось неправильным/непонятным?

    Нет вопросов. Как работает понятно и распределение тока нагрузки по нескольким каналам - тоже понятно. Отпал вопрос по этойже теме к схеме asdf. Промоделировал - работает. На практике микросхемы этой серии работали примерно до 60МГц. Но то была макетка с огромными монтажными емкостями, паразитными наводками и т.п. А по паспорту эти микросхемы должны держать 125МГц. Надеюсь что на плате они оправдают эти цифры, потомучто цифровая часть устройства собрана на них. (А есть российская логика быстрее?)

     

    По схеме Станислава с моим вариантом усилка получается нехорошая "полочка" вверху (см.рис.1) Уже избавился от нее, сместив базу Q8 через диодно-резисторный делитель вниз на 0.6В.

     

    К результатам на рис2 пришел перебрав варианты GetSmart-а. Кстати, если объединить транзисторы с ОБ в один, уменьшается размах, скорости прироста невидно. Если убрать эмиттерные повторители - нехватает нагрузочной способности микросхемы-источника двоичного сигнала - появляется полка посередине.

     

    Burner, Ваша схема не работает. В точке соединения эмиттеров q2 и q4 выдает чепуху.

     

    asdf, Как говорится, правильно собранная из исправных компонентов схема начинает работать сразу. Ваша сразу не заработала, потомучто номиналы резисторов я нафтыкал от фонаря. :)

    post-10470-1216888076_thumb.jpg

    post-10470-1216889002_thumb.jpg

  10. Два дешифратора - потомучто 16 выходных уровней, а одна микросхема дает только 8. Я так понимаю каждый резистор матрицы R5 нужно подбирать для обеспечения линейности. Это конечно круто, но для меня лишнее. А вот почему нельзя было обойтись двоично-взвешенной матрицей резюков R-2R вместо верхних двух регистров - нипайму! %)

     

    GetSmart, на вход данные подаются с 1554ИР35. Видно было не на осцилле, а на пресловутом микрокапе покачто. А если в нем плохо получается - в реале еще хуже будет. Если хорошо - есть шанс что заработает. =))) Кстате у предложенных Вами схем таже проблема со скоростью переключения. Но это на кт3129, а на 3169 я еще модели не нашел :( Еще курю каскодную схему по учебникам по вашему совету.

  11. Okorok, да, нужна - спектр широкий нужен.

     

    Евгений Германович, ужос... Но попробовать надо. Выброс - ну незнаю, таким, чтобы его легко можно было отфильтровать.

     

    asdf, Токозадающая матрица - просто жэсть! Тут-то зачем дешифраторы с регистрами??

  12. Stanislav, Cхема конечно получилась монструозная... Но достоинство ее в том что в ключевом режиме транзистор работает надежно, без выкрутасов. (не влияет уход параметров от температуры, наводок и пр.) Можно обойтись вообще без транзисторов - повесить резисторы на выход регистра (на вход данные и поступают с КМОП регистра), но далее нужно ставить ОУ или транзисторов несколько каскадов с полосой куда шире чем 100МГц (для адекватной передачи ступеньки), что меня и остановило.

    Все еще ищу литературу по схемотехнике быстродействующих ЦАПов. Если чем поделитесь - буду признателен.

     

    zzzzzzzz, если что - напишем :) Это по поводу ОКР. Но если это и будет - то только в далеком будущем.

     

    Burner, так питание - не вопрос. Можно брать хоть 60 вольт. Я извиняюсь, ввел в заблуждение цифрами 0..30В. На самом деле размах 30В и плюс смещение определенное... Интересно посмотреть на схему.

     

    Wise, спасибо за идею, посмотрю что получится из этого. (коммутируемые источники тока)

     

    Okorok, непонимаю как это 50 МГц достаточно? 0_о Там надо хотябы пятьсот, чтоб ступеньку передать. И это минимум, допустимый с закрытыми глазами...

     

    All, Евгений Германович, asdf, фронты - до 3нс, точность для каждой ступеньки +/-- 10% вверх и вниз. Высокочастотные выбросы допустимы.

     

    GetSmart, отдельный низкий поклон за участие. Щас буду крутить/курить предложенные Вами варианты.

     

     

    PS Мне еще почему усилительный каскад ненравится - в будущем будет заказ на подобную схему с заданным напряжением питания, скорее всего 12В. Ну и размах выходной там конечно будет поменьше. А пока это только первый этап ОКРа... Вот нужно до 30В размах для эксперимента, но зато питалово свое...

     

    ЗЗЫ Господа-товарищи! Не ссорьтесь! У каждого свой опыт - что-то получалось, что-то нет...

  13. Дык сделайте на логике 5-вольт ЦАП, а потом его транзистором усильте.

    Блин, извиняюсь. Я же совсем забыл что в схеме столько ключей, сколько значений у ЦАПа. И то что там стоит дешифратор для управления ими. Беру свои слова обратно.

    Ну отчегоже - можно и так. Схема бы на порядок упростилась. Но боюсь что тяжко будет транзистору рабочую точку задавать. Возможно придется подбирать для каждого прибора. И нестабильность от температуры и других факторов появится... Но вообще я этот вариант еще не моделировал. Откинул почемуто сразу. Может и стоило бы попробовать...
  14. А что в этом плохого? Если поискать, много чего хорошего найти можно. Тем более, задача не тривиальная. Прибор предполагается со спцприемкой, очевидно?
    :biggrin: Так мы не изза бедности же у буржуев не покупаем. (а из принципа - поддержать отеч. производителя! :ninja: :lol: )

    Да, с приемкой. А среди импортных комплектующих наверное можно былобы найти готовый такой цапик, ну и операционник ему на выход для раскачки...

     

    GetSmart, а сильно хорошая линейность и не требуется :)

     

    Designer56, +1

  15. GetSmart, Designer56 - Благодарю за советы. Буду пробовать.

     

    alexkok - использовать микросхемы немогу, потомучто на выходе нужно получать размах до 30В. Для этого на входе стоят дешифраторы ИД7 с инвертированными выходами, которые управляют 16-ю pnp транзисторами. Дешифраторы питаются от 5 вольт а на выходе получается 0 - 30В.

  16. Добрый день! (а если даже и не день...)

    Необходимо построить 4-х разрядный 100МГц ЦАП на отечественной базе.

    Отрывок схемы приведен в первом вложении.

    Предпочтительно использовать транзисторы 2Т3129, у которых верхняя частота 200МГц. Проблема в том что при переключении возникает момент, когда один транзистор еще не закрылся, а другой уже открылся. Изза этого на выходе получается скачок напряжения. При низком сопротивлении в цепи коллектора, коллекторная емкость разряжается довольно быстро и этот скачок получается малым, его можно отфильтровать. Но изза ограничений по потребляемому току (до 20мА, 5В питание) я немогу ставить такие малые весовые сопротивления. А так ширина скачка становится соизмерима с шириной ступеньки и получается абракадабра на выходе. Шотка почемуто не спасает...

     

    Как с такой проблемой борятся ЦАПостроители?

     

    ЗЫ. Я понимаю что можно просто выбрать транзисторы на бОльшую частоту, с мЕньшим Ск. Но вот не нашел я таких в sot23 корпусе и с 5-й приемкой... :cranky:

    post-10470-1216360610_thumb.jpg

  17. После ручного сброса или сьема/подачи питания перестает работать шедулер. Циклится здесь:

            do
             {
                 EnableContextSwitch();
                 DUMMY_INSTR();
                 DisableContextSwitch();
             } 
             while(!IsContextSwitchDone());

    Как исправить?

  18. Ясно. Незнал, простите. Вобщем теперь реализация такая:

    TBaseProcess::TBaseProcess(TStackItem* Stack, word Stack_Size, TPriority pr, void (*exec)())

    : StackPointer(Stack), StackSize(Stack_Size), Priority(pr) , Timeout(0)

    {

    Kernel.RegisterProcess(this);

    #ifdef DEDUG_STACK

    //---------------------------------------------------------------

    // Fill Stack area with some value to be able later to define stack usage

    for (StackPointer-=(StackSize/sizeof(TStackItem)); StackPointer < Stack; *(StackPointer++) = STACK_FILL_CONST);

    #endif //DEBUG_STACK

    //---------------------------------------------------------------

    // Prepare Process Stack Frame

     

    *(--StackPointer) = (dword)exec; // return from interrupt address

     

    StackPointer -= 14; // emulate "push R0-R12, LR"

    #if __CPU_MODE__ == 1

    *(--StackPointer) = 0x003F; // SR value: system mode, FIQ & IRQ enabled, THUMB

    #else

    *(--StackPointer) = 0x001F; // SR value: system mode, FIQ & IRQ enabled, ARM

    #endif

    }

    template<TPriority pr, word stack_size>

    class process : public TBaseProcess

    {

    public:

    INLINE process():TBaseProcess(&Stack[stack_size/sizeof(TStackItem)], stack_size, pr, (void (*)())Exec){}

    #ifdef DEDUG_STACK

    word Used_Stack_Size();

    #endif //DEDUG_STACK

    OS_PROCESS static void Exec();

     

    private:

    TStackItem Stack[stack_size/sizeof(TStackItem)];

    };

    template<TPriority pr, word stack_size>

    word process<pr,stack_size>::Used_Stack_Size()

    {

    TStackItem* Idx = Stack;

    while(*(Idx++) == STACK_FILL_CONST);

    return ((Stack + (StackSize/sizeof(TStackItem))) - Idx)*sizeof(TStackItem);

    }

    #define STACK_FILL_CONST 0xFFF7FFFF

    #define DEDUG_STACK

    ну и добавлена константа const word StackSize; в описание класса TBaseProcess.

    Из корыстно-альтруистических соображений хочу попросить включить это или нечто подобное в последующие версии, чтоп самому не править после каждого обновления, да и людям, уверен, пригодится. :rolleyes:

     

    Выражаю благодарность авторам за сей продукт. Действительно легкая и красивая операционка!

  19. Скажите, а у вас стек ниспадающий чтоле? 0_о Заполнил константой - смотрю - он от начала ею заполнен и только в конце появляются какието данные. Почему так решили сделать?

    Локализовать это определение в одно место вместо двух (ассемблер, компилятор)
    Там получается не два места, а по два на каждую конфигурацию (RAM, Flash и тп)...
  20. C макросом я пока париться не стал.

    А со стеком вот что прикрутил:

            template<TPriority pr, word stack_size>
            class process : public TBaseProcess
            {
            public:
                INLINE process() : TBaseProcess(&Stack[stack_size/sizeof(TStackItem)], pr, (void (*)())Exec) { }
                OS_PROCESS static void Exec();

    dword Used_Stack_Size() {return (dword)(StackPointer - Stack);};

            private:
                TStackItem Stack[stack_size/sizeof(TStackItem)];
            };

    Потом в IdleProcessUserHook() использовал:

        debug_printf("EMAC stack %d  ",DataShower_Proc.Used_Stack_Size());
        debug_printf("DBG stack %d  ",DBG_Output_Proc.Used_Stack_Size());

    Как я понимаю, когда выполняется идл-процесс, окружение остальных процессов находится в их стеках и это какраз подходящее время чтобы узнать использованный размер. Поправте если не прав. А вообсче работает. :yeah:

    Как насчет прикрутить нечто подобное в исходник? :)

     

    И еще одно пожелание - ИМХО, удобнее задавать (дефайнить) тип используемого процессора прямо в файле device.h. Или вынести в конфиг.аш А лазить по настройкам проекта для этого - ИМХО неудобно.

  21. Пересаживаюсь с FreeRTOS на scmRTOS. Проц AT91SAM7X256. Поправил код программы, скомпилил. При загрузке J-link выдал такой перл:

    Loaded macro file: \scm\config\AT91SAM7_FLASH.mac
    JTAG speed is set to: 32 kHz
    Write memory error @ address 0xFFFFFC20, word access: Core error.
    Error in \scm\config\AT91SAM7_FLASH.mac at line 53, col 20: Operation error. 
    Error while calling macro execUserPreload.
    Failed to load debugee: \scm\Exe\slon.d79

    Подставил загрузочный макрос (.mac - файл) от фри - заработало. В этих макросах я пока не разобрался, такчто в чем конкретно проблема сказать не могу, но она есть.

     

    И еще. Как подсчитать необходимый размер стека для процесса? Вроде это суммарный размер всех процовых регистров плюс какоето число байт на каждый уровень вложенности функций? От кол-ва используемых ОЗУ-шных переменных зависеть не должно... Или как? Почему спрашиваю - пока не увеличил размер стека для одного из процессов - прога частенько выскакивала на Data Abort Vector. Теперь работает. Покачто. Хочется быть уверенным что она не слетит.

     

    И еще один глюк проявился - перестает срабатывать прерывание. Прерывание от EMAC. Других и нет.

    На всякий случай приложил исходник.

    Вообще прога занимается выбросом в порт данных, принятых через изернет.

    scm.zip

×
×
  • Создать...