ОСРВ Windows-3

Функциональный ШИМ генератор на Питоне

В прошлой статье ШИМ использовался для поворота шагового двигателя, но оказалось, что запаса по частоте вполне хватает для создания например, низкочастотного функционального генератора. Более того, если использовать двойной Н-мост с Али (типа L298N), генератор можно сделать мощным, двухканальным, с возможностью сдвига фаз да еще и биполярным и все это за сто рублей -).

Причем если его нужно использовать чисто как сигнальный генератор, то ШИМ можно сгладить обычной RC цепочкой, если нет, то сглаживание надо обеспечить на нагрузке. Если необходимо задействовать оба канала то не забываем о гальванической развязке, один канал можно запустить через трансформатор. Короче тут никакой специфики нет вовсе. Вернее она обычная радиотехническая-).

Более детально напряжение на трансформаторе:

Очень хорошо видно из чего синус получается, сглаженное — желтенькое. Более общий план:

Программно тоже ничего особенного, для формирования допустим синусоидального импульса, половина периода превращается в массив длительностей пропорциональных амплитуде,

            dlit1 = [[((m.sin((3.141/kol_razb_pp)*k))*30)*q__] for k in range (kol_razb_pp)]
            dlit1_ = []
            dlit1_ = np.append(dlit1_,dlit1)
            print('sin')

затем эти длительности становятся длительностями импульсов фиксированной амплитуды, воспроизводящихся с одной частотой(см выше). Эта частота (kol_q__ — kol min per v shim количество минимальных времен q__ в периоде ШИМ) задается в окошке с таким же названием, в соседних размер массива – количество элементов массива (kol_razb_pp – количество разбиений полупериода) и минимальная единица времени в количествах которой все меряется(q__ — min edin vremeni).
Вертикальный слайдер изменяя q__ (квант времени) изменяет частоту – при движении вверх уменьшает, вниз соответственно увеличивает. Горизонтальный слайдер задает сдвиг второго сигнала относительно первого в долях периода, достигается это тем что счет элементов массива и соответственно вывод происходит со сдвигом относительного первого. Так второй сигнал можно сдвинуть на половину периода относительно первого. Галка 180 delay инвертирует первый сигнал относительно второго, так можно сначала получить задержку на 180 градусов, а потом ползунком добавить до 360.

Вывод импульсов производится в отдельном потоке, передача в поток значений длительностей — через глобальные переменные, вернее через глобальный массив. Вот с этой передачей была одна сложность, а именно нормально передать массив действительных чисел оказалось можно только через numpy:

import numpy as np
……
dlit1_ = np.append(dlit1_,dlit1)

иначе они передавались как строки и были сложности с конвертацией, короче повозиться пришлось.
Ну в общем получилось:



При перестройке фазы видно что сигнал дергается, ну винда есть винда-), но потом работает стабильно. Тут мы сначала престроили на 180, вернули, скачком добавили 180 и «плавно» дотянули до 360, потом скачком обратно на 180 и плавно на исходную. Через пень колоду, но получилось).
Для тех кто еще не догадался или не читал статью про двигатели, тут тоже используется inpout32.dll и lpt порт. Да, он встречается все реже, но встречается и если уж на то пошло, на том же Али купить pci версию lpt порта не проблема, зато будет возможность использовать битбанг. Конечно утилитка тестовая, сыроватая, но вполне работает-) Получить частоту можно порядка килогерца. Вообще я планирую использовать этот генератор в другом проекте, надеюсь, что частоты хватит, уж очень неохота тащить промышленный генератор с работы, да и все равно его придется умощнять, а тут все в одном флаконе).

P.S. В принципе на Али есть еще более дешевые варианты H-мостов, на основе L9110 стоят уже просто смехотворные 30 рублей, но правда и рабочее напряжение до двенадцати вольт.
  • +3
  • 18 октября 2018, 11:01
  • basil
  • 1
Файлы в топике: generator.zip

Комментарии (16)

RSS свернуть / развернуть
(Windows, lpt, Python, ШИМ) != (ОСРВ Windows)
+2
Windows != ОСРВ
+1
Сейчас купить, например, STM32F103 не составит труда. Подключить его через USB к ПК. Накатить FreeRTOS. B Windows создать GUI для управления STM32F103 + FreeRTOS, т.е. контроллером под управлением ОСРВ. GUI можно писать на С, С++, С#, Java, Python, Matlab, Labview… От такого проекта вы получите больше опыта и знаний.
0
Безусловно опыта с таким проектом будет больше, но и проект сложнее, и порог вхождения выше и реализация дороже. Кому что нравится. Мне тут интересно было попробовать именно голый Питон, как оказалось именно его нетяжесть хорошо добавила «осрвитости» винде.
0
Тут интересно, что винда оказывается в состоянии демонстрировать некоторые свойства осрв, что предположить в такой степени было довольно трудно, а управление через гуй контроллером это вещь ожидаемая и логичная.
0
Собственно, в этой статье продолжение этой темы, а основные количественные результаты в предыдущей статье про железный тест.
0
Тут интересно, что винда оказывается в состоянии демонстрировать некоторые свойства осрв
Ровно до того момента, когда винда решит поставить апдейт или запустить какой-нибудь ещё процесс.
+1
Конечно, ещё в сотый раз винда — не осрв, но лёгкое Питон-приложение очень сильно расширяет возможности реального времени. Ну дёрнется сигнал, и будет дальше работать. Для лабораторной практики пойдет, ну понятно где это некритично.
0
Ну конечно надо иметь в виду где критично, а где нет. Я ещё раз о чем, — лабвьюшники как-то объясняли(статья какая-то была), что невозможно вообще(!!) достичь более-менее отклика быстрее чем герц пятьдесят, но оказывается с Питоном это лучше чем чуть ли не на два(!) порядка.
0
ЧПУ вроде бы до сих пор на подобном изврате гоняют.
Так-то, если винда 2К/XP, не засрана всякими авастами и прочим мусором, работать будет. Решение, впрочем, не для ванильной семёрки, постоянно лезущей в инет, ставящей апдейты с ребутом, зачем-то непрерывно шарящей по диску…
0
Про ОСРВ, ссылка из Википедии:
Windows CE (так же известна как WinCE) — это вариант операционной системы Microsoft Windows для наладонных компьютеров, смартфонов и встраиваемых систем. Сегодня Windows CE (Compact Edition / Compact Embedded) не является «урезанной» версией Windows для настольных ПК, она основана на совершенно другом ядре и является операционной системой реального времени с набором приложений, основанных на Microsoft Win32 API.
0
Да, конечно никто не считает винду настоящей осрв, никаких надежд на этот счёт я не питаю. Более того об этом уже говорилось в постах к предыдущим статьям по этому вопросу. Другое дело что степень осрвитости так сказать-))) у винды гораздо выше чем принято думать. Лично я сталкивался с вопросами управления двигателем под Протеусом и Лабвью, и безусловно с ними каши не сваришь, а с Питоном сваришь. Посмотрите видео к предыдущей статье, — двигатель-то крутицца-). Понятно что тем не менее винда все равно не осрв. Это просто заголовок привлекающий внимание. Видимо удачный. Привлек.
0
Кстати в статье про железный тест, каждая точка графиков возникала по эвенту, посмотрите, картина совершенно регулярная, другое дело что долго ли эта регулярность просуществует. Соответственно вполне допустимо считать Винду осрв в течении довольно ограниченных времён, во время работы с нересурсоемкими приложениями. А вот управлять атомной станцией или истребителем не надо. Соответственно и в лабораторной практике в некритичных ситуациях этим вполне можно пользоваться считая с некоторой натяжкой что это осрв.
+1
считая с некоторой натяжкой что это осрв.
На самом деле любая ОС может быть РВ, если она успевает реагировать на события в системе в течении требуемого интервала времени. Так что да, в конкретных условиях и винда может оказаться ОСРВ.
0
Где-то читал, возможно на башорге: «боюсь, когда у меня сломается новомодный бачёк для унитаза, открыв его я там обнаружу плавающую ардуину, которая определяет уровень воды в бачке по датчику GPS». Как-то так. Этот, кхм, ШИМ, ну его нафиг такой. Гарантии чёткости никакой.
+2
)))
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.