FLProg
Вход на сайт
Логин:
Пароль:
Мы в VK
Поиск
Статистика


Яндекс.Метрика
Суббота, 03.12.2016, 07:41
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 2 из 3«123»
Модератор форума: support, Сергей 
Форум » Основной » Спросить у знатоков » ГЕНЕРАТОР В FLProg (Работа генератора в Proteuse)
ГЕНЕРАТОР В FLProg
Kocтик Дата: Пятница, 06.11.2015, 01:28 | Сообщение # 16
Лейтенант
Группа: Проверенные
Сообщений: 76
Награды: 1
Репутация: 0
Статус: Offline
Цитата oren ()
надо еще раз попробовать обратиться к модератору ,возможно он найдет время исправить код
Не надо никуда обращаться. Это расплата за универсальность кода.

Другими словами:
 digitalWrite(13, HIGH);   // Включаем вывод 13
  delay(0.001);              // Пауза секунд
  digitalWrite(13, LOW);  // Выключаем вывод 13
  delay(0.001);              // Пауза секунд

Теперь попробуйте скомпелировать генератор и посмотрите какой код выдаст Ида. И не забывайте что программа ходит по кругу (если нет прерываний). Потому чем длинее программа (больше круг) тем меньшую частоту выдаст генератор. МК просто не успевает отработать эту частоту.
Если очень нужно. Ищите в дополнительных блоках Бузер. Там генератор получше, и меандр почище. Думаю это максимум что можно выжать из Ардуино.
 
Alex54 Дата: Пятница, 06.11.2015, 08:05 | Сообщение # 17
Подполковник
Группа: Проверенные
Сообщений: 263
Награды: 10
Репутация: 1
Статус: Offline
Kocтик, вы про это :

Сам задал вопрос, сам отвечаю. Да 30кгц получаю и очень чистенькие. И выставление по частоте
очень точное. Не на пол периода как в генераторе ( таймере) а как положено.
Прикрепления: 5603649.jpg(166Kb)


С Уважением Alex

Сообщение отредактировал Alex54 - Пятница, 06.11.2015, 08:55
 
oren Дата: Пятница, 06.11.2015, 09:04 | Сообщение # 18
Сержант
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 0
Статус: Offline
Спасибо за помощь,но buzzer не имеет выхода для продолжения логической схемы,полезен лишь для использования платы в качестве генератора при нагрузке на один из внешних портов.
Сам же МК мне выдает любую(из нужных мне) частоту при написании кода :

digitalWrite(4, HIGH);   // Включаем вывод4
  delay(0.001);              // Пауза секунд
  digitalWrite(4, LOW);  // Выключаем вывод 4
  delay(0.001);              // Пауза секунд

А вот "голый" ГЕНЕРАТОР FLProg дает такой код:

pinMode(4, OUTPUT);
}
void loop()
{
if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = micros(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimerMicros ( _gen1P , 10 )) { _gen1P = micros(); _gen1O = ! _gen1O;}}
digitalWrite(4, _gen1O);
}
bool _isTimerMicros(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = micros();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
А результат разный- вот в этом я и пытаюсь разобраться,если Вам не затруднительно,помогите разобраться.
 
support Дата: Пятница, 06.11.2015, 09:53 | Сообщение # 19
Автор программы
Группа: Администраторы
Сообщений: 579
Награды: 30
Репутация: 21
Статус: Offline
Давайте я объясню. Разберём по строкам.

if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = micros(); } } else { _gen1I = 0 ; _gen1O= 0;}
  
Определение состояния входа EN (if (1) - у Вас константа). Запоминание текущего момента (_gen1P = micros()). перевод генератора в рабочее состояние (_gen1I = 1) Установка выхода в 1 (_gen1O = 1)

if (_gen1I) {  if ( _isTimerMicros ( _gen1P , 10 )) { _gen1P = micros(); _gen1O = ! _gen1O;}}

Если генератор в рабочем состоянии (if (_gen1I)) проверяем с помощью функции не настало ли время переключения (if ( _isTimerMicros ( _gen1P , 10 ) - у Вас период переключения 10 мс). Если время наступило, то  запоминаем текущее время ( _gen1P = micros(); - необходима для минимализации влияния временицикла прграммы, но такое влияние всё равно есть), и инвертируем выход (; _gen1O = ! _gen1O;)

bool _isTimerMicros(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = micros();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
 }


Функция определения конца периода времени с учётом переполнения аппаратного счётчика (аппаратный счётчик микросекунд считает до 4294967295 а потом сбрасывается в 0).


Разработчик программы FLProg
 
Alex54 Дата: Пятница, 06.11.2015, 10:38 | Сообщение # 20
Подполковник
Группа: Проверенные
Сообщений: 263
Награды: 10
Репутация: 1
Статус: Offline
oren

Так все правильно, пьезо динамик выдает частоту на внешний пин. Даже если сделать просто перемычкой
внешней,(с цифровым входом на вашу схему) если хотите работать от него. То вся логика не потянет свыше 24кгц. А так можно применять
его или несколько в зависимости от вашей программы. Делать допустим линейку частот кратную 10
здесь имеет смысл.

Сергей спасибо большое. Объяснили.

Гоню частоту в протэусе. 35кгц работает. Даже по нулям уход. Посмотрю где предел.
Этот пьезо динамик на 40кгц работает. Но уже частотка немного меньше. Далее гнать по частоте нет смысла. Но все равно это уже не 24кгц.
Я еще вот что хочу сказать. В Протэусе все модели контроллеров сделаны идеальными по всем параметрам. Это относиться только для котроллеров чисто итальянского производства.
Китайское железо имеет отличие.
Прикрепления: 8242183.jpg(308Kb) · 5004077.jpg(93Kb)


С Уважением Alex

Сообщение отредактировал Alex54 - Пятница, 06.11.2015, 11:59
 
Kocтик Дата: Пятница, 06.11.2015, 12:07 | Сообщение # 21
Лейтенант
Группа: Проверенные
Сообщений: 76
Награды: 1
Репутация: 0
Статус: Offline
support, Спасибо. Очень интересно. Но совсем не понятно. sad
Цитата Alex54 ()
Далее гнать по частоте нет смысла.
Думаю что бы подняться выше по частоте придется ставить  ГУН, а управлять и контролировать частоту через МК.
 
Alex54 Дата: Пятница, 06.11.2015, 12:22 | Сообщение # 22
Подполковник
Группа: Проверенные
Сообщений: 263
Награды: 10
Репутация: 1
Статус: Offline
Kocтик спасибо хоть подсказали что это за блок пьезо динамик. Я с начало имел ввиду что это просто
выход в большим вых. сопротивлением для согласования пьезо с цифр. выходом контроллера.
А тут вот как хорошо получается.

Теперь на 40кгц поработаем. Кстати выше по частотке надо посмотреть. А потом все эти Гуны интересно
разместить в контроллере. Кстати наш генератор в режиме симметр. мультивибр. с внешними
аналоговыми входами работает. Я делал программу нагрева для воды. Титан. Вот там я задавал
время нагрева теном от сети через оптрон. Регулировал и частоту и длительность. НА 50-70 ГЦ Все нормально работает.

На 50кгц-----------РАБОТАЕТ

Cергей вот объясните разницу в моделях пьезо-динамика и генераторов. И еще почему ВЫ ставите
на генераторах в режиме симм. мультив. пол периода частоты. Диапазон его и так маленький. Да вы
еще его растягиваете.
Прикрепления: 4341150.jpg(270Kb)


С Уважением Alex

Сообщение отредактировал Alex54 - Пятница, 06.11.2015, 13:22
 
Kocтик Дата: Пятница, 06.11.2015, 13:22 | Сообщение # 23
Лейтенант
Группа: Проверенные
Сообщений: 76
Награды: 1
Репутация: 0
Статус: Offline
Цитата Alex54 ()
нагрева для воды. Титан. Вот там я задавалвремя нагрева теном от сети через оптрон. Регулировал и частоту и длительность. НА 50-70 ГЦ Все нормально работает
Думаю в жизни долго работать оно не будет. Такие вещи регулируют компаратором. Чтобы вода не остыла и включений-выключений было поменьше. В серьезных аппаратах даже ограничения бывают, ну там 5-6 влючений в час. А у вас 50 раз в секунду. Посадите сеть, или спалите холодильник соседу.
 
Alex54 Дата: Пятница, 06.11.2015, 13:29 | Сообщение # 24
Подполковник
Группа: Проверенные
Сообщений: 263
Награды: 10
Репутация: 1
Статус: Offline
Kocтик Я ВАМ выложу эту программу. Что-бы вы ее увидели приложу в протэусе. Картинку. Ни каких
переключений в 50раз в сек. не происходит. Я просто регулировал время нагрева. И именно по компараторам. Там даже регулируется гистерезис между вкл. и выкл. реле. Единственное там в программе
реле включены на прямую к пинам контроллера. Это чтобы не увеличивать площадь программы.

Чуть позже выложу.


С Уважением Alex

Сообщение отредактировал Alex54 - Пятница, 06.11.2015, 13:38
 
oren Дата: Пятница, 06.11.2015, 13:40 | Сообщение # 25
Сержант
Группа: Проверенные
Сообщений: 42
Награды: 0
Репутация: 0
Статус: Offline
Большое спасибо АВТОРУ ПРОГРАММЫ за объяснение !!! Если я правильно понял,то в данной программе из-за переполнения аппаратного счётчика ,теоретически невозможно получить  с генератора меандр с длительностью импульса менее 50мс ? Или все же существует такая возможность?
 
Alex54 Дата: Пятница, 06.11.2015, 13:53 | Сообщение # 26
Подполковник
Группа: Проверенные
Сообщений: 263
Награды: 10
Репутация: 1
Статус: Offline
Kocтик

Проект программы.

Добавлено (06.11.2015, 13:53)
---------------------------------------------
Цитата oren ()


Группа: Проверенные
Сообщений: 11
Награды: 0  +
Репутация: 0  ±
Замечания: 0%
Статус: Online
Большое спасибо АВТОРУ ПРОГРАММЫ за объяснение !!! Если я правильно понял,то в данной программе из-за переполнения аппаратного счётчика ,теоретически невозможно получить  с генератора меандр с длительностью импульса менее 50мс ? Или все же существует такая возможность?


У вас ошибка менее 50мс. Нужно менее 50мкс.
Прикрепления: 0135631.jpg(431Kb) · 4912927.jpg(186Kb) · 2938215.jpg(334Kb)


С Уважением Alex

Сообщение отредактировал Alex54 - Пятница, 06.11.2015, 13:54
 
support Дата: Пятница, 06.11.2015, 13:55 | Сообщение # 27
Автор программы
Группа: Администраторы
Сообщений: 579
Награды: 30
Репутация: 21
Статус: Offline
Честно говоря я не проводил измерений, буду на вахта можно будет замерить максимальную частоту в проете с одним генератором. Но знаю точно что менее 4 микросекунд длительность импульса получить не удасться. Функция micros выдаёт значения кратные четырём

Разработчик программы FLProg
 
Kocтик Дата: Вторник, 10.11.2015, 22:10 | Сообщение # 28
Лейтенант
Группа: Проверенные
Сообщений: 76
Награды: 1
Репутация: 0
Статус: Offline
Цитата support ()
замерить максимальную частоту в проете с одним генератором. Но знаю точно что менее 4 микросекунд длительность импульса получить не удасться.

Генератор с регулируемоей частотой на ардуино.

Генератор выдает 8МГц. Если с ШИМом то до 4 МГц. Но остается загадкой зачем ШИМ на таких частотах. sad


Сообщение отредактировал Kocтик - Вторник, 10.11.2015, 22:11
 
kipiaxxx Дата: Среда, 11.11.2015, 11:38 | Сообщение # 29
Сержант
Группа: Проверенные
Сообщений: 40
Награды: 3
Репутация: 1
Статус: Offline
Цитата Kocтик ()
Генератор с регулируемоей частотой на ардуино.Генератор выдает 8МГц. Если с ШИМом то до 4 МГц.

Спасибо за ссылку! Проект интересный.
 
Kocтик Дата: Пятница, 13.11.2015, 21:33 | Сообщение # 30
Лейтенант
Группа: Проверенные
Сообщений: 76
Награды: 1
Репутация: 0
Статус: Offline
kipiaxxx, за всегда пожалуйста.
На днях (если выкрою несколько минут) попробую собрать и поганять его на частотомере. Жуть как интересно. Что оно покажет.

Добавлено (13.11.2015, 21:33)
---------------------------------------------
Сегодня проверил работу генератора
 Генератор с регулируемоей частотой на ардуино.

Впечатлен. Он действительно разгоняется до 8 МГц. Правда с увеличением частоты увеличивается шаг. И где-то с середины диапазона он (шаг регулирования) становиться неприлично большим. Но все равно простота исполнения перекрывает все недостатки.

 
Форум » Основной » Спросить у знатоков » ГЕНЕРАТОР В FLProg (Работа генератора в Proteuse)
Страница 2 из 3«123»
Поиск:

FLProg © 2016
Яндекс.Метрика