Собираю себе домой мини-лабораторный блок питания для питания всяческих поделок. Надобность в устройстве назрела давно. Хоть и собирается и отлаживается в железе все на работе (а там есть где разгуляться), все же иногда нужно пару разных напряжений и дома. Останавливаться подробно на самом БП не вижу особого смысла, это компиляция импульсных стабилизаторов собранных по даташитам (регулируемый 0…25в на TL494, импульсные «качественные» 5в на ноутбучном MAX798 и отрицательные слаботочные -5в на MC34063). А вот вольтметр-амперметр, как устройство довольно востребованное в радиолюбительском «блокопитаниестроении», пожалуй заслуживает отдельной статьи.

Повторять свое же собственное устройство во-первых скучно, во-вторых места было мало. Габаритно мне очень подходил двухстрочный дисплей 2×8 символов на базе HD44780, как легко доставаемый, относительно недорогой и довольно удобный в эксплуатации. Сначала хотел переделать свой же проект на другой индикатор, но немного подумав решил пойти другим путем… Как известно среди русскоговорящего (и не только) радиолюбительского населения бывшего СССР самыми популярными являются микроконтроллеры производства Microchip (семейство PIC) и Atmel (ATtiny, ATmega). И хотя в мире существует еще масса производителей МК (TI, Maxim, ST и т.д.), тем не менее именно Microchip и Atmel составляют 99% радиолюбительских (некоммерческих) проектов. Всегда считал это не совсем справедливым. Есть масса новых МК (и не только) о которых мы может быть и слышали, и даже в некоторых случаях интересовались и более того любим пообсуждать на любимых форумах. Но до конкретной реализации, готовых конструкций дело практически никогда не доходит. Вот и решено было собирать на чем-то отличном от вышеприведенных грандов.

К семейству STM8 от ST Microelectronics приглядываюсь уже давненько, как и многие раздобыл комплект STM8-discovery для «моргания светодиодом», почитал много чего интересного по форумам. Так как имею специальность (согласно диплома) кроме физики и информатики еще и педагогическую, то соответственно замечательно понимаю некоторые аспекты обучения которые могли бы способствовать лучшему усвоению нового материала. Потому и решил не допускать распространенных ошибок – взял контроллер попроще и в качестве задачи поставил – изготовление законченного устройства. Как показала практика так научиться чему-либо проще. Сесть и бесцельно изучать работу, к примеру, АЦП тот еще подвиг… Ну и конечно же значительно упрощало дело наличие некоторых познаний в AVR – все ж таки не с нуля изучать.

Итак, что же понравилось, а что нет в новых МК. Не расценивайте это как обзор архитектуры STM8, а просто как вступление-размышление-сравнение программиста с подобными МК AVR. Применительно к ASM, естественно.

ЗА

ПРОТИВ

РАВЕНСТВО

Удобный по подключению и использованию программатор / отладчик. При покупке в составе плат Discovery весьма умерен в стоимости.

Хоть и протокол SWIM является открытым, STLink придется только покупать. Собрать самостоятельно не получится. В этом плане Atmel c великим множеством самодельных программаторов выглядит привлекательнее. А еще показательнее в этом плане Microchip с полностью открытым Pickit2.

Среда разработки ST Visual Develop примерно равна по «удобству», дизайну и структуре AVR Studio 4.1x.

Соотношение цена / навороты (периферия, килобайты и т. д.) явно не в пользу Atmel. Да и в целом ценоформирование гуманнее. Один только STM8S003 за 0.5$ чего стоит. Примерный аналог популярной mega8, а при этом в полтора раза дешевле.

Практически отсутствует выбор корпусов DIP и с малым количеством выводов (tiny13, tiny24). Половина контроллеров с мелким шагом в 0.5мм, что очень неудобно для начинающих.

Многие ругают ST Assembler за кривой синтаксис и т. д. И т. п. Я был бы более честен — он просто другой, не такой, как тот, к которому вы привыкли в AVR (или PIC).

Пожалуй одно из основных достоинств: одно семейство — один мануал. т. е. Регистр отвечающий за настройки, к примеру, АЦП во всем семействе STM8S имеет одно и то же название и биты расположены в нем одинаково. Atmel тут просто без комментариев…

Порты бывают разных типов: High Sink (до 20ма), обычные (низкоточные), и с открытым коллектором. И все бы ничего, если бы не такой нюанс. Например на 48-ногом STM8S105 я не обнаружил ни одного ПОЛНОГО порта с HS выводами. Т.е. Затея с подключением семисегментного индикатора связана с довольно неприятным нагромождением в программе. Вывести значение в один порт было бы гораздо проще… К слову в STM8S003K3 которому, я практически уверен, суждено стать бестселлером и прямым конкурентом mega8 такой полный порт есть.

В целом можно было бы сказать что грандиозного преимущества по производительности STM8 по отношению к AVR не предлагает. Потому они находятся в одной нише как по применению, так и по многим параметрам.

Обращение к памяти, eeprom, регистрам происходит одними и теми же командами, т. е. они все лежат в едином адресном пространстве. В случае AVR я делал так:

inc r16. В случае с STM8, я просто могу «обозвать» ячейку памяти r16 и проводить с ней те же фокусы. Весьма и весьма впечатляет. Немножко дико после AVR – ячейка из eeprom читается или пишется одной строчкой на ASM.

На простых версиях STM8S семейства образцовое напряжение наглухо соединено с напряжением питания, что налагает определенные требования на источник питания и, возможно поставит острее вопрос об использовании ОУ c rail-to-rail выходом. У AVR тут все несколько гибче и богатство выбора больше.

Не решился писать этот пункт в «+»… Славноизвестные фуз-биты в AVR есть конечно и у STM8, но практически все изменения доступны программисту изнутри программы, а потому повторяющему проект, об этих AVR-ужасах в 99% случаев можно забыть.

Очень большая часть комманд является 16-бит ориентированными. т. е. МK то конечно восьмибитный, но, например сложение, двух 16-битных слов производится одной строчкой.

 

Количество команд и примерный синтаксис во многом сходен с AVR, потому привыкание дается легко.

Аппаратное деление. Ну я «оттянулся» от души, скажу вам. Не то, чтобы нельзя было в AVR в столбик поделить. Но тут уж больно все шикарно происходит.

 

 

Настраивается все, что только можно. Такого обилия настроек я себе даже представить не мог. Например предделитель для таймера может быть любым числом от 1 до 32768. Слабо?! А сканирование и буферизация в АЦП чего стоит?!!

 

 

Продуманные инструкции. Есть много такого, чего в AVR откровенно хотелось бы. Например: BCPL перевернет битик в указанном месте на противоположный. Так просто светодиодом еще нигде не мигалось. Или BTJT (Bit Test Jump True) проверит бит в указанном месте и пошлет программу по указанному адресу если он true. У Atmel конечно это все реализуемо skip’ами… Но осадок все равно, как говорится, остался.

 

 

Есть еще множество моментов которые и хотелось бы осветить, но для вступления, я думаю, более чем достаточно.

Вольтметр – амперметр с аналоговой шкалой на STM8S103F - схема

Итак собственно о проекте. Амперметр-вольтметр на базе STM8S103F (STM8S103F3P6 в моем конкретном случае) и индикаторе WH0802A. Измеряемое напряжение 0…100в, разбито на два диапазона 0…10в и 10…100в. Измеряемый ток – 0…9.99A. Отличительной особенностью данного устройства является возможность отображения измеряемого тока не только в цифровом виде, но и в виде аналоговой шкалы с максимальным значением 1, 2, 5 и 10А. Опытные радиолюбители не дадут мне соврать и подтвердят, что в некоторых случаях стрелочный прибор значительно информативнее и полезнее, чем цифровой. И если значение напряжения в блоке питания – величина абсолютная, точнее постоянная то потребляемый ток иногда полезно наблюдать «в динамике». Чтобы было понятнее вот фото в интерьере:

Шкала имеет 35 делений, цена деления для каждого диапазона соответственно разная. Формат отображения «цифровой», «шкала 1A», «шкала 2A», «шкала 5A», «шкала 10A» переключаются циклически единственной кнопкой. Включение устройства с зажатой кнопкой – запустит процесс калибровки. Текущее отображение сохраняется в eeprom, нажатия озвучиваются динамиком. Вот в общем-то и все.  Конструктивно все собрано на плате размером в сам индикатор. В моем случае входной усилитель был расположен на основной плате блока питания, но возможный «полный» вариант платы также присутствует внизу в файлах. Для программирования МК используются четыре провода интерфейса SWIM. И если землю и питание можно припаять в произвольных местах, то для SWIM и RST предусмотрены «пятачки». Хотел бы заметить что подключение VCC из разъема SWIM является обязательным и не является при этом источником питания для целевого устройства. Это скорее вход. Также отдельно бы хотелось отметить о подключении устройства к целевому блоку питания. Участки цепей которые выделены на схеме жирным – должны быть выполнены максимально толстыми и короткими проводами. Динамик ставить вовсе не обязательно, на нормальную работу устройства он никак не влияет. ОУ AD8542 можно заменить на любой (в том числе одиночный) с входами и выходами (!!!) Rail-to-rail. Как вариант подошел бы MCP6022.

Налаживание устройства сводится к запуску калибровки для отсечения постоянной составляющей смещения ОУ (установка нуля) и подборе резисторов R10 для амперметра, R4 для нижнего диапазона и R6 для верхнего диапазона вольтметра. Хотелось бы обратить внимание на возможные «грабли» с фактическим номиналом стабилитронов VD1, VD2. Поставив по привычке на 5,1в – я получил фактическое ограничение в районе 4,9…4,95в, т.е. меньше чем напряжение питание, а значит и меньше чем образцовое напряжение АЦП, что конечно же исказило измерения. Потому стабилитроны указаны как 6.2в. Можно поставить и 5,6 но нужно обязательно проверить какой это окажется экземпляр.

Ну и как всегда на закуску фузов не будет… Все уже учел программист в прошивке. А будет возможный рисунок печатной платы (отличается от моего «железного» экземпляра):


Архив для статьи "Вольтметр – амперметр с аналоговой шкалой на STM8S103F"
Описание: Файл прошивки микроконтроллера, макет печатной платы SprintLayout5
Размер файла: 23.85 KB Количество загрузок: 349 Скачать