|
|
|
|
GM: ...в итоге получается 2R +2R || 2R = 3R = 150 Ом. Нет, в ЦАП на токовых ключах матрицы как таковой не будет. Будет набор источников тока по количеству разрядов, с двоичным распределением токов. Нагрузка в виде резистора одна на всех. Если включается какой-то разряд, то соответствующий ему ключ подключает нагрузку к определённому ИТ. В зависимости от двоичного кода ток в нагрузке равен сумме токов подключенных к ней ИТ. Соответственно, напряжение на нагрузке пропорционально сопротивлению и протекающему через него тока. GM: Да, кстати, каким боком будет подключаться отрицательный источник напряжения к выходу? Ха! А это упустил из виду...  Ну ни чего, придумаем что нибудь. Tadas: А может быть я невнимательно вчитался, и речь идет только о нарастающей пиле, а не о синусойде ? Вообще-то, я всё время подразумеваю пилу...  Как сигнал, прямо показывающий и линейность всех каскадов и их частотный диапазон. На нём всё это проверять удобно. |
|
|
DWD: Вообще-то, я всё время подразумеваю пилу... В таком случае критичным будет быстродействие ключей. В моменты времени, когда один ключ уже выключился, а другой еще не включился, на нагрузке будут провальчики. |
|
|
ATLab: Работу программы проверил приемом в терминальной программе на втором компьютере и расчетами на калькуляторе, вроде все совпадает с требованиями Вашего письма. Проверил, программа в полном объёме не работает. 1) Частоту синуса устанавливает. 2) Не обеспечивает перехода на треугольник. Причём нажатие соответствующей кнопки показывает, что пакеты посылаются через раз, как впрочем и для синуса (У меня есть встроенный контроль - программа после приёма пакета альтернирует сд1). 3) Свип свипирует только один раз, при нажатии на кнопку "установить". 4) Иногда свипирует узкую полосу в районе 538 кГц, хотя установлено 20-20000 и метка 2000. Может и ещё чего есть, я дальше не смотрел. |
|
|
Tadas: В таком случае критичным будет быстродействие ключей. В моменты времени, когда один ключ уже выключился, а другой еще не включился, на нагрузке будут провальчики. В принципе, быстродействие при переключении будет определяться быстродействием выходных ключей МК. Но в этом случае "провальчики" Вас не тревожат...  Проблема в другом... В качестве ИТ пробую интегральные линейные стабилизаторы напряжения, но не все они могут отрабатывать высокие частоты переключения. Выйти из положения можно либо установкой буферного нагрузочного резистора с учётом добавачного тока через него (для малых токов), либо установкой второго ключа с буферным резистором, на который будет ответвляться ток при выключении разряда. Всё это обеспечит постоянство работы стабилизатора и его скоростные характеристики уже будут безразличны. |
|
|
GM: Проверил, программа в полном объёме не работает. По ссылке http://atlab.narod.ru/files/pictures020.zip лежат картинки с копиями экрана терминальной программы (которой я на втором компьютере контролировал посылки) для разных режимов работы: - programm.png - установки частот, которые передавались DDS; - sin+triangle.png - пакеты, которые передавались DDS при поочередном нажатии кнопок "Синус" и "Треугольник", видно что байты команд чередуются, т.е. переключение должно быть; - sweep.png - пакет, который передается DDS при каждом нажатии "Установить" или при включении ГКЧ; пакет состоит из трех посылок: 1. выдача конечной частоты свипирования Fкон 2. выдача частоты метки Fметки 3. выдача начальной частоты Fнач Между посылками пауз нет. Если что-то не так, подробно поясняйте, как нужно. GM: 1) Частоту синуса устанавливает. 2) Не обеспечивает перехода на треугольник. Причём нажатие соответствующей кнопки показывает, что пакеты посылаются через раз, как впрочем и для синуса (У меня есть встроенный контроль - программа после приёма пакета альтернирует сд1). Это Вы неправильно нажимали кнопки: - вследствие недоработки интерфейса в программе есть возможность тыкать одну и ту же кнопку выбора формы сигнала, например "Синус", т.е. кнопки получились вроде как с независимой фиксацией, а должны были быть с зависимой; - следствием этого и явился эффект, когда при нажатии одной и той же кнопки выбора формы пакет команды посылается через раз, но так и должно быть по логике: а) кнопка НАжата - ушел пакет б) кнопка ОТжата - пакета нет и т.д. GM: 3) Свип свипирует только один раз, при нажатии на кнопку "установить". 4) Иногда свипирует узкую полосу в районе 538 кГц, хотя установлено 20-20000 и метка 2000. Не знаю, что и сказать, у меня свип идет постоянно, хотя частоты проверить не могу, нечем. |
|
|
Будем разбираться. Для выдачи команд я использовал программу Realterm рел.2.0.0.57, до этого была другая терминальная программа, я её забраковал, она в конце пакета слала добавочные символы типа нуля, возврата катерки, что-то такое. Слать-то она слала, но не отображала их при приёме. Может быть у вас тоже самое с вашим wTerm? Результат работы свипа я видел своими собственными глазами - вот на экране линия, нажимаешь "установить" - появляется генерация, генерация заканчивается - опять линия на экране. Процесс повторяемый, но почему другие частоты? Предполагаю, программа цепляется за середину пакета, и, думая, что это начало, начинает принимать остаток, поэтому устанавливаются дикие частоты. Думаю, стоит выдержать 1-2 мс интервал между пакетами. Или временно посылать отдельные пакеты для начала, конца и метки. |
|
|
Возьмите версию 0.21 http://atlab.narod.ru/files/ddscontrol_021.zip там в ini файле добавлена переменная, которая задает величину паузы между посылкой команд в Sweep и подправлен интерфейс кнопок - сделаны с зависимой фиксацией. GM: Или временно посылать отдельные пакеты для начала, конца и метки. Это не спасет, при включении Sweep все равно надо посылать пакет из трех команд установок. wTerm использую уже довольно долго, не замечал за ним "вольностей": всегда честно показывает то, что пришло и передает то, что указано. Она небольшая и free, можете ее взять http://atlab.narod.ru/files/wterm.zip |
|
|
ATLab: при включении Sweep все равно надо посылать пакет из трех команд установок Не обязательно, поскольку я старался воплотить в программе концепцию "немедленное исполнение". Как только тинька получила пакет, она его немедленно исполняет. Есть, правда, некоторая опасность, что будет послана частота fНАЧ больше fКОН, ошибки не будет, всё исполнится, просто частота будет расти-расти-расти, дойдёт до 1000 кГц, встретится с зеркалкой и пойдёт дальше, вплоть до 2000 (зеркалка при этом будет двигаться от 1000 к 0), потом она перейдёт ноль и начнет двигаться до fКОН, здесь будет перегрузка всех частот, начнётся новый цикл. Как-то так. Ну тут ответственность полностью на управляющей программе. Кстати вот подумал, что неплохо бы ограничить выдачу частоты 1000 кГц, чтобы не было "соблазнов" работать с зеркалкой. Ну или отвести ей место в конфигфайле...на будущее. Вы ощутите прелесть подобного подхода, когда начнёте менять границы свипирования fНАЧ, fКОН (или просто fМЕТ) с помощью валкодера, будет полное впечатление, что вы вращаете верньеры обычного аналогового свип-генератора. |
|
|
Нашёл причину "невключения" треугольника, в описании ошибочно указан бит 6, а надо - 7. Моя невнимательность, прошу прощения. А вот в режиме свипа ошибка уже в вашей программе. Иногда программа встаёт в клинч, команд не посылает, ни на что не реагирует. Если я ее сниму, и включу realterm, то тиня отрабатывает команды правильным образом. Например, после подачи команд 0x29,0xCD,0xCC,0x0C,0x00 (fНАЧ=100 кГц), 0x89,0x66,0x66,0x26,0x00 (fКОН=300 кГц) генератор исправно свипирует от 100 до 300 кГц, видно на спектранализаторе. |
|
|
Возьмите версию 0.22 http://atlab.narod.ru/files/ddscontrol_022.zip - изменена команда включения "треугольника" - изменен порядок выдачи команд в пакете sweep - убран код контроля за опустошением буфера передачи COM порта. Пробуйте. GM: А вот в режиме свипа ошибка уже в вашей программе. Иногда программа встаёт в клинч, команд не посылает, ни на что не реагирует. Если я ее сниму, и включу realterm, то тиня отрабатывает команды правильным образом. Например, после подачи команд 0x29,0xCD,0xCC,0x0C,0x00 (fНАЧ=100 кГц), 0x89,0x66,0x66,0x26,0x00 (fКОН=300 кГц) генератор исправно свипирует от 100 до 300 кГц, видно на спектранализаторе. В программе есть контроль за опустошением буфера передачи COM порта - полезная вещь и проверенная в других проектах: там объем передачи был сотни тысяч команд управления. Зависаний ни разу не было. Впрочем, проблем нет - я убрал этот контроль, хотя я думаю, что проблема в Вашем компьютерном железе. У Вас COM порт на 1. материнской плате 2. плате расширения PCI 3. шнурке USB? Я опробовал все три, при этом шнурок USB пришлось тщательно выбирать тестированием перед покупкой: - брал с собой в магазин нетбук с wTerm - на DB9 шнурка ставил заглушку (перемычку-кольцо) TX->RX - на максимальной скорости (а потом и на паре скоростей помедленнее) передавал и тут же принимал произвольный двоичный файл размером около мегабайта, - после приема сохранял принятую копию в файл - сравнивал по содержанию исходный и принятый файл. В результате такой проверки в одном магазине из 5 шнурков двух различных фирм проверку не прошел ни один. Пришлось идти в другой магазин, там проверка прошла с первого раза, правда шнурок стоил вдвое дороже. |
|
|
|
|