Pull to refresh

Comments 61

Плата симпатичная, но вот флюс стоит отмыть.
согласен. но пока не обзавелся средствами смывки
Идем в ближайший хозмаг и покупаем денатурат и бензин-галоша. Смешиваем 3:1.… Профит!
Применение PIC было принципиально? Есть ведь копеечный STM32F100С как раз с двумя ЦАП.
То что есть под рукой то и пихается видимо.
Я вот при наличии пары десятков мега8/16 то-же врятли бы стал пихать СТМ-ки :)
Там конечно в одном абзаце все описано
>>В каталоге microchip я не смог подобрать подходящего микроконтроллера имеющего два ЦАП на борту, а внешние ЦАП имеют не малый ценник и слишком много лишнего функционала.
Т.е. покупка все равно планировалась, но
>>Микроконтроллер PIC16F1829 уже был в наличии.
Т.е. из того что было, но
>>Поэтому приобрел сдвиговые регистры 74HC595 и резисторы для матрицы R2R.
Все равно покупалось, и
STM32f100c4 54грн (http://kosmodrom.ua/el.php?name=STM32F100C4T6B)
vs
HC595 6.25*4=25грн (http://kosmodrom.ua/el.php?name=M74HC595RM13TR)
плюс три десятка 1% резисторов 10грн/сотня плюс пик даже не знаю, но пусть он уже есть, но все равно покупался и думаю был подороже чем стм32 сейчас.
В сухом остатке плата проще, проц дешевле, можно поиграться с новой архитектурой если раньше до этого не успел.
на текущий момент у меня есть опыт работы только с PIC.
спасибо за совет, давно смотрю в сторону STM. обязательно попробую.
Прошу прощения, если кто уже спрашивал, но почему R-2R, а не ШИМ? Большая скорость обновления тут не нужна, но зато ШИМ линейнее.

Кстати, в STM32F100Cx есть т.н. advanced control timer, который в числе прочего поддерживает прямую аппаратную обработку энкодера. Т.е., крутим энкодер — а значение в регистре таймера само меняется соответственно механическому положению крутилки. Ну и два двенадцатибитных ЦАП. Но конечно, фактор "есть под рукой" понятен и естесственнен; про STM32 это я так, к слову.

на текущий момент у меня есть опыт работы только с PIC.

На самом деле, разные контроллеры-то идейно мало чем отличаются друг от друга, так что если есть опыт работы с PIC, перейти на STM будет несложно. Главное, не ведитесь на StdPeriphLib, STM32MX Cube и прочие протезы для мозга, которые по маркетинговым причинам в изобилии предлагает ST. Читайте даташит, после него — reference manual. Дальше качайте среду разработки по вкусу (я предпочитаю EmBlocks), и вперед. Все как и везде — регистры, биты, прерывания. Остальное решается внимательным чтением документации, ничего сверхъестесственного.
Главное, не ведитесь на StdPeriphLib, STM32MX Cube и прочие

Вот тут я с вами не соглашусь. Standard Peripheral Library — шикарная вещь! Лично для меня она понятна, функции скрывают несущественные детали по работе с регистрами. На виду остаётся только суть. Производительность труда растёт. Помнить все регистры и их биты слишком сложно. Плюс переносимость кода между большим семейством Cortex-M процессоров. Да, код немного больше будет.
Более того, похожие библиотеки есть у Миландра и Техаса. Это с чем я лично работал. Имея опыт работы с SPL можно быстро перейти на аналоги, например MDR у Миландра. Если бы SPL не была так хороша, то про неё давно забыли (забили) бы, imho.
У стандартных библиотек частенько есть один косяк: while ( !( getsomereg(REG9999) & BITMASK_SOME ) ); что не очень хорошо — можно словить вечный цикл, причём хорошо, если это вскроется во время отладки, а если по шине какой-нибудь прилетит ошибочное значение в процессе эксплуатации? Юзать эту либу можно и нужно, но надо либо делать многозадачность и городить обработку таких приколов, либо переписывать эту кучу циклов.
У чужих библиотек всегда один недостаток — непонятно, что внутри, а потому неизвестно, какие сюрпризы можно словить. Потому надо изучать код. Однако как правило проще и быстрее написать свой.

Standard Peripheral Library — шикарная вещь!

Да-да, а Ардуино так вообще верх совершества.

Производительность труда растёт.

"Время разработчика дороже чипа" — знакомая песня. Люди (и разработчики тоже) склонны любить то, что позволяет им не включать мозг. Бизнес склонен любить то, что позволит выпустить устройство через неделю, пускай оно и будет ужасно неоптимально — покупатель не разберется. В итоге имеем то, что имеем. И ситуация год от года становится печальнее.

Помнить все регистры и их биты слишком сложно.

А помнить все функции StdPeriph_Lib и все поля ее стуктур проще? И в том, и в другом случае не надо помнить ничего кроме основного принципа. Просто надо держать под рукой документацию и не стесняться в нее заглядывать.

Более того, похожие библиотеки есть у Миландра и Техаса.

Это говорит только о том, что и они вынуждены прогибаться под требования рынка, возникающие из соображений, имеющих корень в алчности инвесторов. TI так и вообще под Arduino косить начали (Energia).

Имея опыт работы с SPL можно быстро перейти на аналоги, например MDR у Миландра.

Имея опыт программирования контроллеров вообще, можно быстро перейти на любой другой контроллер — была бы документация и toolchain.

Если бы SPL не была так хороша, то про неё давно забыли (забили) бы, imho.

Из той же серии — "если бы курить было так вредно, все бы давно бросили", верно?

В целом, я не имею желания разводить тут холивар. Вы высказались, я высказался. А теперь пойдемте писать код, каждый по-своему.
но почему R-2R, а не ШИМ?

не уверен что ОУ нормально это воспримет, особенно учитывая низкую частоту ШИМ.

Главное, не ведитесь на StdPeriphLib, STM32MX Cube и прочие протезы для мозга, которые по маркетинговым причинам в изобилии предлагает ST.

я не очень люблю готовые библиотеки и даже свой код проверяю после компиляции в ассемблере, но если они хорошо реализованы, то почему бы нет? главное проверить что они делают именно что нужно.
Потому-что через r2r можно рисовать сиськи (с)Dihalt :)
http://easyelectronics.ru/img/starters/DAC-R-2R/siske.png
не уверен что ОУ нормально это воспримет, особенно учитывая низкую частоту ШИМ.

Я имел в виду, предварительно его отфильтровав. Скажем, поставить фильтр саллена-кея второго порядка с частотой среза этак 5 кГц при частоте ШИМ порядка 30 кГц. На выходе будет чудесный постоянный уровень, правда меняться будет медленно — ну так быстро тут и не надо.

если они хорошо реализованы

C этим у StdPeriph_Lib есть определенные проблемы.

главное проверить что они делают именно что нужно.

Как правило, за время проверки чужого кода такого типа можно написать свой.
Если использовать резисторы с одной ленты, то можно брать и 5% точностью. Это у них указана точность номинала сопротивления, а воспроизводимость от экземпляра к экземпляру в пределах одой партии и тем более одой ленты очень высокая. Использовать один резистор в качестве R и парочку в качестве 2R.

Схемы нет в статье, это очень печально. Какой-то левый файл под TinyCAD — очень несерьёзно.
Посему кстати непонятно какой битности реализован ЦАП? 10, 12 или 16 бит?
Можно ещё было посмотреть в сторону цифровых потенциометров(на каждый канал 6 битный(точная подстройка)+8 битный(грубая))… они хоть и дороже но не надо было бы паять целый массив SMD-резисторов.
Если использовать резисторы с одной ленты, то можно брать и 5% точностью.

у меня было две ленты на 1 и 2 кОм

Схемы нет в статье, это очень печально.

схема есть картинкой под спойлером "После доработки"

Какой-то левый файл под TinyCAD — очень несерьёзно.

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

Посему кстати непонятно какой битности реализован ЦАП? 10, 12 или 16 бит?

два ЦАПа по 16 бит

Можно ещё было посмотреть в сторону цифровых потенциометров(на каждый канал 6 битный(точная подстройка)+8 битный(грубая))… они хоть и дороже но не надо было бы паять целый массив SMD-резисторов.

смотрел. и даже пробовал AD5292. решил что лучше самому сделать R2R
Мне кажется вы усложнили задачу и схему. Есть же дешевый 12-битный ЦАП у microchip MCP4922 с управлением по SPI. Впрочем это дело вкуса. Задача решена, это главное.
А чем схема с AD5292 вам не понравилась?
нужно писать код работы с устройством, ждать инициализацию, ждать выполнение команд. сложность только в изготовлении платы, в остальном — простой код, высокая скрость работы (можно не думать, успеет ли отправиться команда прежде чем придет второй импульс от энкодера).
Пользоваться то можно чем угодно, только выкладывать на всеобщее пользование лучше в более распространённом формате PNG например или PDF. Чтобы можно было как минимум посмотреть.

Ежели 16 бит, то как с линейностью и монотонностью характеристики код-напряжение? Даже на R-2R матрицах довольно проблематично добиться приемлемых характеристик, а для блока питания вполне хватило бы даже 12 бит что сократило бы количество необходимых регистров до 3-х.

>картинкой под спойлером «После доработки»
Никогда бы не догадался что схема именно там…
Ежели 16 бит, то как с линейностью и монотонностью характеристики код-напряжение?

на 16 не проверял. смотрел для 8 бит на макете — было хорошо.

для блока питания вполне хватило бы даже 12 бит что сократило бы количество необходимых регистров до 3-х.

изначально планировалось разместить именно 3 регистра между энкодерами и использовать по 12 бит. но при разводке платы показалось не удачным решением. в итоге выбрал вариант с 4 регистрами и передачей данных параллельно в 2 SPI-канала, что увеличило скорость в 1.5 раза и избавило от необходимости складывать полубайты.
Ежели 16 бит, то как с линейностью и монотонностью характеристики код-напряжение?

добавил в конце статьи раздел с графиками, замерял только используемый диапазон в уже собранном БП.
Мне кажется, или с платы флюс не смыт?
Лучше смыть, даже если не активный и не требует смывки, со временем пыли поналипает, очень неаккуратно будет.
согласен, но оно же внутри и не видно
в идеале было бы хорошо покрывать лаком или как минимум тем же фоторезистом оставляя только места под пайку… но это пока только желания
Дело не в видно или нет, а в том, что остатки флюса могут и будут подъедать дороги и совсем не диэлектрик. И со временем в неотмытой плате может поселиться барабашка.
канифоль принципиально не смываю если для себя, работает как лак, хотя механически и не стойкий
Рад узнать, что R2R ЦАП на 74HC595 — рабочая идея.
А как насчет цифровых потенциометров, не возникало желание использовать их?

И еще, опорное ЦАПа (оно же питание 74HC595) снимается с AMS1117-5.
Режет глаз отсутствие конденсаторов, на выходе AMS1117-5 и около 74HC595.
А как насчет цифровых потенциометров, не возникало желание использовать их?

возникало и даже пробовал AD5292. но с ними ложнее работать, чем просто отправить 2 байта в буфер. и как мне показалось, обвязка схемы сложнее.

Режет глаз отсутствие конденсаторов, на выходе AMS1117-5 и около 74HC595.

тоже долго думал, ставить или нет. решил что стабилизации 12В будет достаточно, а выходные 5В плавать не должны.
решил что стабилизации 12В будет достаточно, а выходные 5В плавать не должны.

Конденсаторы ставятся не для стабилизации, а (в цифровых схемах) для подавления помех, возникающих за счет переключения логических элементов внутри цифровых микросхем. Конденсатор рядом с цифровой микросхемой должен быть всегда и обязательно — это правило хорошего тона. Типовой номинал — 100 нФ, керамика (у керамических конденсаторов низкий ESR). Работать, как видно, будет и без этого, но ухудшится надежность и электромагнитная совместимость.
Регулятор же без конденсаторов определенной емкости и типа может возбуждаться. Проявляться может повышенными шумами по питанию или даже нагревом с выходом из строя. Надо смотреть, разрешено ли в документации использовать регулятор без конденсаторов.
это актуально для подобных простых схем? можете посоветовать что почитать в данном направлении?
я думаю это не единственный недостаток в плане помех

Регулятор же без конденсаторов определенной емкости и типа может возбуждаться.

а тут не совсем понял, о каком регуляторе речь?
Стабилизатор напряжения это классический регулятор с обратной связью по выходному напряжению, у него как у любого регулятора есть границы устойчивой работы вне которых он будет срываться в генерацию. Так вот одним из условий работы регулятора в пределах границ устойчивости может являться наличие конденсатора на выходе, причем как можно ближе к выводам ибо дорожка представляет собой индуктивность и с конденсатором сложится в последовательный колебательный контур, который на резонансной частоте не выполняет функцию гашения колебаний, а значит способствует самовозбуждению стабилизатора…
Еще для стабилизатора по этой же причине может являться важным условием чтобы конденсатор на входе был больше конденсатора на выходе.
Вообще, если не лезть в теорию и не особо задумываться, где там какие контура, можно сказать, что, как и любая система с обратной связью, регулятор напряжения не будет возбуждаться тогда, когда петлевое усиление на частоте, при которой в цепи ОС наблюдается инверсия фазы, будет меньше единицы. А инверсия фазы начнет наблюдаться уже для частоты, для которой задержка распространения сигнала со входа на выход равна половине периода. Вот на этой частоте система и загенерирует, если петлевое усиление будет больше единицы. Вся мудреная теория сводится к этому. Конденсатор либо сдвигает фазу, либо служит элементом емкостного делителя, обеспечивая устранение условий генерации — либо отодвигается момент инверсии фазы, либо снижается усиление.
Да, это актуально всегда. Одна и та же микросхема всегда шумит одинаково (при одинаковой частоте переключений), что в простой схеме, что в сложной. В принципе, можно было бы встраивать этот конденсатор прямо внутрь микросхемы (выпускают же операционные усилители со встроенными элементами частотной компенсации), но этого не делают потому, что в разном окружении требования к развязывающим конденсаторам могут разниться, хотя чаще всего хватает керамики 100 нФ, как я уже писал выше. Да и конденсатор достаточно громоздкий элемент в масштабах кристалла. Сделать на кристалле конденсатор емкостью в десятки нанофарад будет сложно, дорого и неэффективно, а монтировать его по гибридной технологии — опять же дорого (усложнение техпроцесса). Потому остается ставить внешние конденсаторы.

Речь идет о регуляторе напряжения, AMS117-5. Кстати я почитал даташит на него, и выяснил, что конденсаторы вы не поставили очень, очень зря. Вам просто повезло, что он еще работает, правда, непонятно насколько повезло — надо бы ткнуться осцилографом и посмотреть, не генерирует ли он. Ибо на странице 4 читаем:

The circuit design used in the AMS1117 series requires the use of
an output capacitor as part of the device frequency compensation.
The addition of 22μF solid tantalum on the output will ensure
stability for all operating conditions.
When the adjustment terminal is bypassed with a capacitor to
improve the ripple rejection, the requirement for an output
capacitor increases. The value of 22μF tantalum covers all cases of
bypassing the adjustment terminal. Without bypassing the
adjustment terminal smaller capacitors can be used with equally
good results.
To further improve stability and transient response of these
devices larger values of output capacitor can be used.


То есть мои предостережения — четко ваш случай.

Насчет почитать — должен сразу извиниться, сходу я не могу назвать ни одной книги или статьи на русском. Если с английским нормально, то вот Dave Jones очень доходчиво рассказывает про развязывающие конденсаторы (YouTube, eevblog). Насчет стабильности наверное можно почитать Linear Circuit Design Handbook от Analog Devices.
Есть на русском книжка, «Конструирование высокоскоростных цифровых устройств. начальный курс чёрной магии.» ISBN 5-8459-0707-8 (рус.)
Там поднимается эта тема и более актуальные, поясняется почему это важно в цифровых схемах даже на частотах в десятки килогерц.
большое спасибо за ссылки.
часть даташита AMS1117 о стабилизации я действительно упустил из виду. проверил осциллографом выходное напряжение, была генерация на 7кГц с амплитудой 0.5 вольта.
после установки танталового конденсатора 22мкФ напряжение стабилизировалось. за компанию поставил емкости 100нФ максимально близко к линиям питания регистров.
А что, там внутри правда всё на рассыпухе? Двадцать первый век, однако…
Простите, но на чем должно быть? Петлю ОС завести в/через контроллер?
Ну видели блок питания от писюка? Там рассыпухи раза в два меньше, а то и в три. При том, что там мощность в разы больше и не одно выходное напряжение, а три с половиной.
Задачи разные, параметры разные. Да даже принцип работы разный!
Ага, шим посложнее будет, нежели линейный регулятор.
Смотря какой ШИМ, смотря какой линейный регулятор. Прецизионный линейный лабораторный источник гораздо сложнее импульсного зарядника для телефона.
компьютерный БП на 90% состоит из «рассыпухи» и то ещё вопрос считать шимку рассыпухой или нет. :)
Вообще чем больше рассыпухи тем лучше — ремонтнопригодность в разы выше.
Вам найти погоревшую деталь среди горы ей подобных проще, чем поменять одну микросхему? Тогда я вам по-человечески завидую.
Конечно проще, эта одна микруха может быть вообще без маркировки и что-то по спецзаказу (привет китайцам) а ещё оно может быть и с прошивкой :)
Ну видели блок питания от писюка? Там рассыпухи раза в два меньше, а то и в три.

мне кажется у вас ошибочное представление о количестве рассыпухи в БП.

вот для примена несколько фото
HY3005D


БП ПК попроще


посложнее



даже в том что попроще, если и меньше, то не на много
При выключении ранее установленные напряжения и токи не сохраняются? Это же жутко неудобно.
Были мысли сделать сохранение, но в итоге сделал при старте ток на максимум, напряжение на 5 вольт. По личному опыту работы с БП, эти значения наиболее используемы.
С другой стороны, это решается программно и ничто не мешает в любой момент добавить сохранение и прошить МК (ну кроме того, что нужно разбирать БП).
Вообще это фигово… кратковременный провал напряжения в розетке и светодиод 3.6в@350мА подключенный к блоку питания уже дымится… т.к. он снял ограничение по току.
Кстати еще одна фигня, ладно там с другими сигнальными выводами но сигнал сброса регистров у тебя подключен к контроллеру без подтяжки. А это значит что N-е время после подачи питания на схему пока отработает BOR контроллера, задержка сброса, инициализация регистров контроллера сброс внешних регистров не гарантирован а значит на их выходе может оказаться произвольное напряжение… подключенная схема будь даже на 5В к выходу блока питания в считанные милисекунды может оказаться под напряжением в 30В — для многих элементов этого времени достаточно чтобы сгореть.
Поставь подтягивающие резисторы на сигнальные входы регистров, хотябы на вход сброса так чтобы он находился в активном состоянии пока вывод контроллера находится в неопределённом состоянии.
кратковременный провал напряжения в розетке

с перебоем напряжения — это интересный кейс, надо подумать. тут еще нужно посмотреть, что сам БД делает в это время.

сигнал сброса регистров у тебя подключен к контроллеру без подтяжки

учитывая даташит, подтягивать сброс не имеет смысла, т.к. он сбрасывает только внутренний регистр. нужно подтягивать OE к 1, а после прогрузки МК программно переводить его в 0.

Поставь подтягивающие резисторы на сигнальные входы регистров

на все ставить не нужно. если сделать как выше с использованием OE, то состояние любых управляющих входов не имеет значения.
В момент подачи напряжения активный сброс с самого начала обнулит регистры, а потом они же скопируются и на выход. И кстати, OE достаточно легко держать в неактивном состоянии при подаче напряжения питания необходимое время при помощи супервизора питания и RC-цепочки, например 100мс после подачи питания, за которое все переходные процессы закончатся, МК проснётся(а если не проснётся? неудачная прошивка, сбой ФЛЕШ-памяти и т.д.) и обнулит регистры уже штатным способом.
Всё-таки надо бы продумать вопрос о безопасном состоянии регистра на момент подачи питания вне зависимости от контроллера — что будет если включить блок питания с отсутствующим контроллером?
потом они же скопируются и на выход

не совсем понял, как они скопируются на выход? кто-то должен перевести из 0 в 1 сигнал STCP.

Всё-таки надо бы продумать вопрос о безопасном состоянии регистра на момент подачи питания вне зависимости от контроллера

нужно подтягивать OE к лог.1 резистором. тогда до инициализации МК на выходах ЦАП будет 0В.
На сигнал сброса — подтяжку вниз, на STCP — подтяжку вверх. Тогда при подаче питания регистры обнулятся и скопируются.
на STCP еще нужна емкость, чтобы подтягивался не сразу. но тут еще придется рассчитывать параметры RC, чтобы включался не слишком быстро но и не слишком долго.
кстати, в канале регулировки напряжения есть емкость, ограничивающая резкое изменение, а заодно дает задержку для загрузки МК при включении.
Япона мать, гораздо проще было поменять переменники в регулировке.
Для чего городить контроллер, если никакого нового функционала вообще нет?
Соглашусь с вами если энкодеры сломаются так же быстро, как и реостаты. Основная цель/причина описана в предисловии — быстрый выход из строя реостатов. Из дополнительного — увеличилась точность и линейность регулировки. А дополнительный функционал при наличии МК запрограммировать не составит труда. Возможные улучшения перечислены в конце статьи.
С переменными резисторами нового функционала нет и не будет.
А с МК регулировкой — тут уже фантазия начинает играть.
ВАХ например снимать или вообще генератор сигналов сделать )

И это, кстати, ответ на вопрос автора:
это актуально для подобных простых схем?
Актуально, ведь невозможно предсказать насколько может усложниться простая схема

Я конечно понимаю, что это не путь Джидая, но в своём двухканальном HY3005D-2 источнике питания просто заменил переменные резисторы на качественные многооборотные от BROUNS 3590S-2-103L, 10 кОм. Цена на сегодняшний день 660 руб/штука в розницу. Пришлось ещё параллельно поставить постоянный резистор. В результате получил аутентичное устройство. Возможно комплектуха и чуть дороже обошлась, но сколько времени сэкономил при этом!
Sign up to leave a comment.

Articles