-
Постов
303 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Waso
-
-
Как в PCB Filter сослаться на текущий слой? (он может быть любым). Нужно для того чтоб затенять обьекты находящиеся на других слоях для удобства разводки.. И вообще хотелось бы чтоб это выполнялось автоматически.
-
Вопрос в тему. AD.sum08. Как сделать чтобы фанаут подстраивался под ширину ножек микросхем? У меня в правилах выставлена минимальная ширина дорожки 0.25мм, предпочитаемая 0.4мм. Хочу чтоб от микросхем с шагом ног 0.5мм фанаут автоматически отводил шину линиями 0.25, и где место позволяет - рисовал бы уже дорожки шириной 0.4мм.
-
Давайте посчитаем целевой. Он сейчас нужнее. :)
1. Размах выходного напряжения - +/- 4В.
2. Время установления до величины 97% при перепаде на выходе макс/мин (что соотв. ошибке в 0,5 МЗР для 4-битного ЦАП) - 3 нС.
3. ВЫходное сопротивление - не более 10 Ом.
4. Нелинейность - не более 3% от полной шкалы (0,5 МЗР).
5. Активное сопротивление нагрузки - 51 кОм.
6. Ёмкость нагрузки - 12 пФ.
7. Напряжение источников питания +/- 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, а не подскажете как мне всетаки предельные значения выхода приблизить к питающему напряжению? Ато я только из-за этого оставляю зеркало...
-
Старички 315 и 361 у меня есть среди моделей в симуляторе. Что получилось для разных схем - см в приложении.Есть одна просьба. Можете заменить транзистор в источнике тока на что-нить вроде аналога КТ315 и привести графики на этой же частоте? Мне интересно.Нагрузка у меня 51кОм, 12пФ. Насчет точности я тоже упоминал гдето в середине -> +-10% по уровню для каждой ступеньки от идеального значения.
Ставил 4 резистора последовательно в каждую линию матрицы - не помогло. Да и в микрокэпе вроде как нет паразитной емкости/индуктивности резисторов. Я этого параметра не видел. Косяк однако...
Stanislav, как раз с расчетами я не шибко дружу. Если приведете методику в двух словах (а не готовые цифры) - скажу большое спасибо. :)
-
GetSmart, тоесть ОУ улучшает линейность, так? Немножко непонятен тогда принцип его работы, потомучто потенциал опорника он сравнивает с землей...
Вобщем полученными результатами я доволен. Так что всем спасибо. Но тема оказалась намного живее и интересней чем я предполагал. Поэтому если у кого есть какието советы или замечания - пожалуйста говорите.
Смущают меня только броски на середине лесенки. То что этот выброс больше остальных говорит о том что транзистор старшего разряда медленно закрывается. Хотя сидят они в одной микросхеме и нагружены одинаково. Что не так?
============================
Дошло. Чем больше тычок - тем больше транзисторов выключается в этот момент. Например переход 0111 -> 1000.
-
GetSmart, Вы меня опередили насчет виртуального нуля :)
А вот с вашей последней схемой чтото не так. Поскольку минус микросхемы сидит на -30В, выход будет прыгать только между -25 и -30В. И объясните пожалуйста смысл операционника - он стабилизирует только по температуре?
Чем плоха такая схема: (см рис). Будет ли работать стабилизация по температуре. (в симуляторе работает).
Я тут проверил масштабируемость по питанию. Легко масштабируется, меняется только сопротивление R60.
-
Нет вопросов. Как работает понятно и распределение тока нагрузки по нескольким каналам - тоже понятно. Отпал вопрос по этойже теме к схеме asdf. Промоделировал - работает. На практике микросхемы этой серии работали примерно до 60МГц. Но то была макетка с огромными монтажными емкостями, паразитными наводками и т.п. А по паспорту эти микросхемы должны держать 125МГц. Надеюсь что на плате они оправдают эти цифры, потомучто цифровая часть устройства собрана на них. (А есть российская логика быстрее?)2 WasoПожалуйста, посмотрите внимательно на схему этого ЦАПа и скажите, что в ней показалось неправильным/непонятным?
По схеме Станислава с моим вариантом усилка получается нехорошая "полочка" вверху (см.рис.1) Уже избавился от нее, сместив базу Q8 через диодно-резисторный делитель вниз на 0.6В.
К результатам на рис2 пришел перебрав варианты GetSmart-а. Кстати, если объединить транзисторы с ОБ в один, уменьшается размах, скорости прироста невидно. Если убрать эмиттерные повторители - нехватает нагрузочной способности микросхемы-источника двоичного сигнала - появляется полка посередине.
Burner, Ваша схема не работает. В точке соединения эмиттеров q2 и q4 выдает чепуху.
asdf, Как говорится, правильно собранная из исправных компонентов схема начинает работать сразу. Ваша сразу не заработала, потомучто номиналы резисторов я нафтыкал от фонаря. :)
-
Евгений Германович, ужос - это насчет скорости нарастания.
Burner, спасибо.
-
Думаю насчет потребления можно будет договориться, раз иначе никак.
-
Два дешифратора - потомучто 16 выходных уровней, а одна микросхема дает только 8. Я так понимаю каждый резистор матрицы R5 нужно подбирать для обеспечения линейности. Это конечно круто, но для меня лишнее. А вот почему нельзя было обойтись двоично-взвешенной матрицей резюков R-2R вместо верхних двух регистров - нипайму! %)
GetSmart, на вход данные подаются с 1554ИР35. Видно было не на осцилле, а на пресловутом микрокапе покачто. А если в нем плохо получается - в реале еще хуже будет. Если хорошо - есть шанс что заработает. =))) Кстате у предложенных Вами схем таже проблема со скоростью переключения. Но это на кт3129, а на 3169 я еще модели не нашел :( Еще курю каскодную схему по учебникам по вашему совету.
-
Okorok, да, нужна - спектр широкий нужен.
Евгений Германович, ужос... Но попробовать надо. Выброс - ну незнаю, таким, чтобы его легко можно было отфильтровать.
asdf, Токозадающая матрица - просто жэсть! Тут-то зачем дешифраторы с регистрами??
-
Stanislav, Cхема конечно получилась монструозная... Но достоинство ее в том что в ключевом режиме транзистор работает надежно, без выкрутасов. (не влияет уход параметров от температуры, наводок и пр.) Можно обойтись вообще без транзисторов - повесить резисторы на выход регистра (на вход данные и поступают с КМОП регистра), но далее нужно ставить ОУ или транзисторов несколько каскадов с полосой куда шире чем 100МГц (для адекватной передачи ступеньки), что меня и остановило.
Все еще ищу литературу по схемотехнике быстродействующих ЦАПов. Если чем поделитесь - буду признателен.
zzzzzzzz, если что - напишем :) Это по поводу ОКР. Но если это и будет - то только в далеком будущем.
Burner, так питание - не вопрос. Можно брать хоть 60 вольт. Я извиняюсь, ввел в заблуждение цифрами 0..30В. На самом деле размах 30В и плюс смещение определенное... Интересно посмотреть на схему.
Wise, спасибо за идею, посмотрю что получится из этого. (коммутируемые источники тока)
Okorok, непонимаю как это 50 МГц достаточно? 0_о Там надо хотябы пятьсот, чтоб ступеньку передать. И это минимум, допустимый с закрытыми глазами...
All, Евгений Германович, asdf, фронты - до 3нс, точность для каждой ступеньки +/-- 10% вверх и вниз. Высокочастотные выбросы допустимы.
GetSmart, отдельный низкий поклон за участие. Щас буду крутить/курить предложенные Вами варианты.
PS Мне еще почему усилительный каскад ненравится - в будущем будет заказ на подобную схему с заданным напряжением питания, скорее всего 12В. Ну и размах выходной там конечно будет поменьше. А пока это только первый этап ОКРа... Вот нужно до 30В размах для эксперимента, но зато питалово свое...
ЗЗЫ Господа-товарищи! Не ссорьтесь! У каждого свой опыт - что-то получалось, что-то нет...
-
Ну отчегоже - можно и так. Схема бы на порядок упростилась. Но боюсь что тяжко будет транзистору рабочую точку задавать. Возможно придется подбирать для каждого прибора. И нестабильность от температуры и других факторов появится... Но вообще я этот вариант еще не моделировал. Откинул почемуто сразу. Может и стоило бы попробовать...Дык сделайте на логике 5-вольт ЦАП, а потом его транзистором усильте.Блин, извиняюсь. Я же совсем забыл что в схеме столько ключей, сколько значений у ЦАПа. И то что там стоит дешифратор для управления ими. Беру свои слова обратно.
-
А что в этом плохого? Если поискать, много чего хорошего найти можно. Тем более, задача не тривиальная. Прибор предполагается со спцприемкой, очевидно?
Так мы не изза бедности же у буржуев не покупаем. (а из принципа - поддержать отеч. производителя! :ninja:
)
Да, с приемкой. А среди импортных комплектующих наверное можно былобы найти готовый такой цапик, ну и операционник ему на выход для раскачки...
GetSmart, а сильно хорошая линейность и не требуется :)
Designer56, +1
-
Не секрет. Я же сказал уже: 4-х разрядный 100МГц ЦАП. С размахом 0-30В на выходе.
А что Вы хотели услышать, если человек ориентируется только на отеч.базу...
-
GetSmart, Designer56 - Благодарю за советы. Буду пробовать.
alexkok - использовать микросхемы немогу, потомучто на выходе нужно получать размах до 30В. Для этого на входе стоят дешифраторы ИД7 с инвертированными выходами, которые управляют 16-ю pnp транзисторами. Дешифраторы питаются от 5 вольт а на выходе получается 0 - 30В.
-
Добрый день! (а если даже и не день...)
Необходимо построить 4-х разрядный 100МГц ЦАП на отечественной базе.
Отрывок схемы приведен в первом вложении.
Предпочтительно использовать транзисторы 2Т3129, у которых верхняя частота 200МГц. Проблема в том что при переключении возникает момент, когда один транзистор еще не закрылся, а другой уже открылся. Изза этого на выходе получается скачок напряжения. При низком сопротивлении в цепи коллектора, коллекторная емкость разряжается довольно быстро и этот скачок получается малым, его можно отфильтровать. Но изза ограничений по потребляемому току (до 20мА, 5В питание) я немогу ставить такие малые весовые сопротивления. А так ширина скачка становится соизмерима с шириной ступеньки и получается абракадабра на выходе. Шотка почемуто не спасает...
Как с такой проблемой борятся ЦАПостроители?
ЗЫ. Я понимаю что можно просто выбрать транзисторы на бОльшую частоту, с мЕньшим Ск. Но вот не нашел я таких в sot23 корпусе и с 5-й приемкой... :cranky:
-
Дописал в инициализацию
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_SYS);
Все ок.
-
После ручного сброса или сьема/подачи питания перестает работать шедулер. Циклится здесь:
do { EnableContextSwitch(); DUMMY_INSTR(); DisableContextSwitch(); } while(!IsContextSwitchDone());
Как исправить?
-
Ясно. Незнал, простите. Вобщем теперь реализация такая:
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);
}
ну и добавлена константа const word StackSize; в описание класса TBaseProcess.#define STACK_FILL_CONST 0xFFF7FFFF#define DEDUG_STACK
Из корыстно-альтруистических соображений хочу попросить включить это или нечто подобное в последующие версии, чтоп самому не править после каждого обновления, да и людям, уверен, пригодится. :rolleyes:
Выражаю благодарность авторам за сей продукт. Действительно легкая и красивая операционка!
-
Скажите, а у вас стек ниспадающий чтоле? 0_о Заполнил константой - смотрю - он от начала ею заполнен и только в конце появляются какието данные. Почему так решили сделать?
Там получается не два места, а по два на каждую конфигурацию (RAM, Flash и тп)...Локализовать это определение в одно место вместо двух (ассемблер, компилятор) -
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. Или вынести в конфиг.аш А лазить по настройкам проекта для этого - ИМХО неудобно.
-
Пересаживаюсь с 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. Других и нет.
На всякий случай приложил исходник.
Вообще прога занимается выбросом в порт данных, принятых через изернет.
Escape Fanaout
в Altium Designer, DXP, Protel
Опубликовано · Пожаловаться
Владимир, объясните пожалуйста подробнее. Или дайте ссылку на литературу. В хэлпе не нашел и сам пока не разобрался. Тип площадок для фанаута это что? PLC, BGA в Fanout control и тп? И где ширина дорожек для фанаута задется - тоже ненашел.