Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

Простой генератор прямоуголньйх импульсов

Сб ноя 18, 2017 20:00:02

Привет дорогие друзья.
Подскажите как могу сделать 2-канальной генератор прямоуголньйх сигналов с изменяемьйе времена.
Основная функция - через 3 потенциометра задать времена Т1, Т2, Т3 в указанньйе на фото границьй.
Изображение

Тоест нужньйе 3 индивидуалньйе потенциометрьй для:
Т1 - период между сигналов, одинаков для оба канала.
Т3 - продолжительность сигнала, одинакова для оба канала.
Т2 - процентное соотношение времени дефазирование каналов: от =Т3 до 50%*Т1.
Для Т2 ето тонкий момент, потому чтоб нужно делить Т1 на процентьй в реальное время.

И если Т1 меняеться, нужно Т2 автоматически измениться според него.
Допускаеться заступать конца первого сигнала с начала второго, как видно в первая половина графики.

Точность и шаги изменения не критические, можно взять значения с верхнего диапазона (самьйе бьйстрие).

Не важно за какой МК писан - PIC, Atmel или STM, но понятно чтоб у него нужно есть 3 АЦП входа для потенциометров.
У меня есть все нужньйе програматорьй для них, а плата не проблем - могу сделать легко.
Например: PIC16F54, 505, 526, 57, 18313, 1503, 18323, 18Fxxx или AtTiny 13, 24, 26, 44, 85, 2313, AtMega8, 48, 88 или любьй другой, кто вам нравиться.
Про STM - есть 2 броя STM32F100C4T6. Нет Arduino.
Все осталньое могу купить с Алиекспреса, но предпочтаю сделать плата сам, не хочу ждать 20 дней доставка.

Если возможно как опция - отображать на дисплей примерно LCD 2х16 времена Т1 в RPM (оборотьй /мин), а Т2 и Т3 в мс или мкс.

Здесь находил что то похожее: http://arduino.ru/forum/programmirovani ... ent-239004 но не очень понятно.
Я сам не програмист, помогите с кода, спасибо заранее.

P.S. Исправил рисунок, теперь время изменения периодов вообще стали человеческие.
Последний раз редактировалось Altium Вс ноя 19, 2017 15:18:55, всего редактировалось 39 раз(а).

Re: Простой генератор прямоуголньйх импульсов

Сб ноя 18, 2017 21:20:53

10ns если не ошибаюсь 100MHz, значит в микроконтроллере должна быть внутри такая частота (или выше) для тактирования таймера (если задачу на таймере делать). PIC Tiny AtMega получается отпадают.
АЦП 10 бит это 1024 значения с потенциометра. АЦП 12 бит это 4096 значения с потенциометра.
T3 10nS-1mS = 10nS - 1000000nS это 999990 значений с шагом 1nS.
При 10 бит АЦП можно регулировать с дискретностью 999990/1024=976,552734375nS
T1 0-2mS еще больше.

Re: Простой генератор прямоуголньйх импульсов

Сб ноя 18, 2017 23:47:02

Altium, если вы замените 10ns на более вменяемую величину, то реализовать будет значительно проще.
Тем более дискретность АЦП (4096 отчетов для 12 битного) не позволит регулировать времянки с таким шагом.
Определитесь с минимальной дискретой по времени. Так ли вам нужно 10ns?
Я решал задачу с формированием сложной последовательности импульсов с дискретностью перестройки длительностей и фаз между ними 50нс на микроконтроллере STM32F103.
Задавались временные параметры импульсов по CAN интерфейсу, то есть не стояло проблемы дискретности АЦП.
Реализовать получилось при помощи каскадного включения таймеров. Чуть разогнав контроллер можно было выжать и 25нс...
А делать 10 нс... Либо контролер с большими частотами, либо FPGA. Ну или на аналоге сообразить.
Задача тяжело мне далась, но в итоге вылилась буквально в несколько строчек кода.
Для лучшего понимания процесса можно посмотреть аппликейшн от ST en.DM00236305.pdf AN4776 Application note General-purpose timer cookbook.
Но для не программиста задача ИМХО не подъемная. А альтруиста готового её решить найти будет сложно.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 00:13:16

Опс, ошибка.
Исправил фото с более нормалньйе время.
Они вообще даже не нужньйе столько жесткие.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 00:21:17

Такие времянки уже можно реализовать. Для задания, по мне, проще использовать энкодеры или кнопки ><. Типа такого видео

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 07:57:37

тож думал в начале FPGA, но имхо хорошо получится и на: простенький микроконтроллер (для задания параметров с потенциометров) + простенький CPLD типа EPM240.
Примеров импульсных генераторов на Verilog в сети вроде было типа: http://www.referencedesigner.com/tutori ... _ex_09.php
CPLD платы недорого у китайцев:
https://ru.aliexpress.com/item/U119-Alt ... 48979.html

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 08:44:19

Примерно...
Жирненький АВР (или МК с аналогичной/подобной конфигурацией таймеров "пошустрее")
Т0 - базовый период
Т1 - первый участок по одному компаратору, второй участок по второму, общий период по ICP - третий участок как разница между общим периодом и суммарным временем обеих компараторов...
Однако там плавность перестройки определяется частотой тактирования (в разумных пределах).
:roll:

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 10:44:35

ТС не сказал самого главного - какая необходима точность измеренных временных интервалов, и какова приемлемая дискретность изменения этих интервалов.
А то, к примеру, он хочет один из периодов - от нуля до ... А что в его понятии ноль ? Идеальная одновременность, или может и 10, 20, а может и 100 us будет вполне приемлемо.
Так же и с изменением, например, периода - от 100 us до 1000 us. А каков шаг изменения ? Может нужен не более 1 us, а может и 100 us будет достаточно.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 11:13:32

Да, пропустил сказать про шаг изменения Т1 - примерно с 2мс.
Точность и шаг дефазирования каналов Т2 - вообще не критично, можно с 200мкс и вьйше. В принципе, дефазирование каналов всегда нужно.
Шаг изменения Т3 - примерно 200мкс.
Все они не критические,.

И если есть возможность отобразить на дисплей время Т1 в RPM (оборотьй за минуту) и Т2 и Т3 в мкс, то будет супер.

У меня есть 2 броя STM32F100C4T6 платьй, а для доставка другие моделей с Алиекпресс надо ждать 20 дней.
Но если вьйберем вариант только с процессор типа Atmel/PIC - то я могу покупить любьй отсюда:
https://store.comet.bg/Catalogue/IC/Int ... AifQ%3D%3D
https://store.comet.bg/Catalogue/IC/Int ... AifQ%3D%3D
и сделать плата за 2 дня.
Последний раз редактировалось Altium Вс ноя 19, 2017 16:17:04, всего редактировалось 3 раз(а).

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 11:53:12

Вам бы в раздел "Работа" обратиться, там быстрее откликнутся. Не думаю, что такой проект будет дорого стоить.
Всё это делается элементарно на любом МК с парой-тройкой таймеров на борту.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 12:06:44

если все не критично может подойдет на тупых задержках - по быстрому на тини13 (асм подзабыл, на АБ еще помнится :) )
теперь так:
Изображение
в протеусе все задается 3 потенциометрами:
Изображение
суперпрограмма :) :
Изображение
hex:
Tiny13_Pulse2.zip
(401 байт) Скачиваний: 197

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 12:41:00

теперь так:
Немного не так :)
Начало T2 может быть до окончания T3. А в Вашем варианте это невозможно :)

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 12:54:38

Привет Олег и спасибо за своевременная реакция.
Я в первьй пост в последний раз поменял на рисунок время за изменения Т2. Передумал и оказалось нуль (польное совпадение) не нужна. Можно начинать дефазирование с 200мкс и вьйше.

А через потенциометрьй нужно менять Т1, Т2, Т3 точно как по моей схеме, у вас получаеться другой принцип регулирования.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 14:36:32

привет, Красимир!
2 мс - это 15000 RPM. не слишком ли круто?

12-битный АЦП тут не имеет смысла, так как и при 10-битном с помощью потенциометра не реально поймать точность установки ручки по 1/1024.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 15:35:57

Ну можно до 3мс минималньй период за Т1 в принципе.
Но как будем решать процентное соотношение для Т2 спрямо Т1, не знаю.

Re: Простой генератор прямоуголньйх импульсов

Вс ноя 19, 2017 20:35:37

T2 можно посчитать с помощью пропорции из школьной программы, T3 можно пренебречь (+-1 mS роли не сыграет):
Если T1 это АЦП1, X искомое T2:
(АЦП1 / 2) ~ 1024
X ~ АЦП2
----------
X = ((АЦП1 / 2) * АЦП2) / 1024 = (АЦП1 * АЦП2) / 2048
умножение и деление на ассемблере 16 бит чисел я забыл :( может кто возьмется...
Ответить