Автор Тема: Четыре независимых генератора частот на разных ногах AVR  (Прочитано 8783 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
Имеем atmega328 на 16 мгц.
Надо: на четырех трех портах независимо генерить меандр с произвольной частотой 1..16000 гц, считая при этом кол-во импульсов и параллельно умудряясь гонять данные через UART.
Может у кого-нибудь есть идеи, или наработки?
Предупреждая вопросы: ворочу контроллер управления осями фрезера. Готовое не предлагать, это крайний случай.

Оффлайн ToxiN

  • Модератор
  • *****
  • Сообщений: 886
  • Репутация: 21
  • Григорий, г.Орел
  • Поблагодарили: +93
Предлагаю более извращенский вариант: три отдельных контроллера на чем-нить попроще и один общий, который усе обрабатывает и с компом по телефону болтает.

и добавил...
А еще ИгорьПалыч, глянь здесь, может, идея полезна будет
easyelectronics.ru/upravlenie-mnozhestvom-servomashinok.html
« Последнее редактирование: 08 Ноября 2015, 16:03:08 от ToxiN »

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
Тоже вариант, но увязать их воедино будет весьма непросто. Ибо ровный круг провести по двум осям - это нужно раздавать пинки этим "отдельным", и получится немногим проще. А драйвера двиглов имеют управление step-dir, что малость ограничивает пространство для манёвра

и добавил...
Сервомашины не требуют частот. Частота сигнала фиксированная, обычно 50 Гц, а сама рулёжка выполняется длительностью импульса. Посему - не то

Оффлайн ToxiN

  • Модератор
  • *****
  • Сообщений: 886
  • Репутация: 21
  • Григорий, г.Орел
  • Поблагодарили: +93
Я не про сервы, а про общий смысл формирования хрен-знает-чего на всех копытах разом.

и добавил...
Это тебе в Тушино надо. С товарищем Шендриком из Вымпела пообщаться :) у него 4 вентильных дрыгателя с одной ПЛИСины рулятся с отслеживанием ускорений и положения.

и добавил...
В смысле положения руля (или закрылка, не знаю, как они правильно зовутся)
« Последнее редактирование: 08 Ноября 2015, 16:16:46 от ToxiN »

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
ПЛИС
На этом тему Вымпела можно закрывать, ибо
Имеем atmega328 на 16 мгц.


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

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5223
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
Althair, предложу что то более современное использовать вместо аврки...

Оффлайн boroda

  • Наш человек
  • ****
  • Сообщений: 475
  • Репутация: 8
  • Александр, Шурик, Борода из города Челябинск
  • Поблагодарили: +179
АВР-ка тут уже не покатит, надо что-то более ответственное, реалтайм надо блюсти.
А то бабка снесёт инструмент.

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
Я уже примерно накидал принцип... Прерывание, на нем аналог системного таймера. Вспомню школу, как на Z80 каждый такт учитывал  :cr:

и добавил...
Есть ещё вариант стырить алгоритм из GRBL, но это не по-джедайски  :laugh:

и добавил...
Там у них вообще частота пинков двигателей до 30 кгц

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5223
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
Althair, а почему именно произвольно?

и добавил...
честно говоря не совсем понял задачу. если step-dir то для каждого фронта step надо еще и dir выставить, так что грубо говоря 8 каналов  ???

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
Dir выставляется по факту, ему не надо раздавать пинки на каждый шаг. А вот step нужно дергать постоянно, причём разом на всех двиглах, и желательно одновременно.

Оффлайн lgedmitry

  • Старожил
  • *****
  • Сообщений: 4621
  • Репутация: 30
  • Сергей, Рыбинск
  • Поблагодарили: +701
Althair, Гоша, а MSP430F5529 не рассматривал, как вариант? Она и в виде готовой платки а-ля ардуина встречается ;-[

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5223
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
Dir выставляется по факту, ему не надо раздавать пинки на каждый шаг. А вот step нужно дергать постоянно, причём разом на всех двиглах, и желательно одновременно.
то есть все таки одновременно или независимо? В этом вся муля. Путаешь синхронное с асинхронным. А так - заводим таймер на нужную частоту равную максимальной скорости подачи. Настраиваем прерывание на сравнение и переполнение. Сравненте вымтавляем в половину переполнения. По прерыванию сравнения выставляем все нужные ноги. По сбросу сбрасываем ноги. Я бы еще одно сравнение добавил для выставления направления чуть раньше шага.

Оффлайн Althair

  • Старожил
  • *****
  • Сообщений: 1766
  • Репутация: 11
  • Поблагодарили: +348
Не. Движки могут шагать с разной частотой. Скажем, на 100 шагов по Х, придётся 30 шагов по Y. Рулятся движки раздельно. Если бы движение было всегда прямолинейным - было бы проще, но траектория может быть любой. Отсюда и грабли.
Естественно, ИМПУЛЬСЫ на степ идут синхронно, но с разной частотой. Я уже почти решил проблему - каждый элемент в буфере кусается на вектора и понеслась. Типа на А шагов по Х приходится В шагов по Y, соответственно и счетчики инициализируются соответствующими аргументами.

Оффлайн xar

  • Старожил
  • *****
  • Сообщений: 5223
  • Репутация: 16
  • Ренат
  • Поблагодарили: +271
Не. Движки могут шагать с разной частотой. Скажем, на 100 шагов по Х, придётся 30 шагов по Y. Рулятся движки раздельно. Если бы движение было всегда прямолинейным - было бы проще, но траектория может быть любой. Отсюда и грабли.
Естественно, ИМПУЛЬСЫ на степ идут синхронно, но с разной частотой. Я уже почти решил проблему - каждый элемент в буфере кусается на вектора и понеслась. Типа на А шагов по Х приходится В шагов по Y, соответственно и счетчики инициализируются соответствующими аргументами.
дак я и говорю. в прерывании сравнения выставляешь только те ноги, которые нужны. точнее ноги тех каналов, которые должны сделать шаг. как именно вычислять - другой вопрос. я бы взял за базовую частоту скорость по вектору перемещения, а реальные скорости - проекции на оси x, y, z. получим синхронно и без лишних затрат.

 

Похожие темы

  Тема / Автор Ответов Последний ответ
104 Ответов
64456 Просмотров
Последний ответ 25 Июня 2013, 21:44:35
от Viktor D
8 Ответов
7866 Просмотров
Последний ответ 04 Марта 2012, 11:47:54
от Slava
0 Ответов
3616 Просмотров
Последний ответ 24 Апреля 2012, 08:01:13
от number_nine
41 Ответов
20015 Просмотров
Последний ответ 04 Февраля 2016, 21:52:23
от Вадим Пузанов
7 Ответов
5240 Просмотров
Последний ответ 04 Января 2019, 22:38:51
от IronYorick