Телескопы покупают здесь


A A A A Автор Тема: Контроллер / драйвер шаговиков мелких монти  (Прочитано 18228 раз)

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

Оффлайн Aslamov Ilya

  • ****
  • Сообщений: 338
  • Благодарностей: 9
    • Сообщения от Aslamov Ilya
Цитата
ничё никуда не прыгает, 138млн. раз проверено. во всяком случае с FTDI232DL и FTDI232RL точно не прыгает..
Наверное речь идет о том что номер виртуального COM порта меняется при смене порта USB к которому подключается преобразователь.

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

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Цитата
ничё никуда не прыгает, 138млн. раз проверено. во всяком случае с FTDI232DL и FTDI232RL точно не прыгает..
Наверное речь идет о том что номер виртуального COM порта меняется при смене порта USB к которому подключается преобразователь.
Ну как бы да :).
А какие были варианты?

Если писать свой драйвер, там всё понятно, а если пользоваться стандартным virtual-com, то эта его корявость лично меня напрягает.
モ - mo

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
UPD Цитата оттуда:
Цитата
библиотека V-USB - её использование поглощает 60..80 процентов процессорного времени ATmega16.
Ох йомайо :)
Тогда и пробовать на одном проце собирать систему не стоит. Однозначно для V-USB нужно выделять отдельный чип или (лучше) переходить на аппаратную реализацию.

Воткну на свободное место справа atmega8 в дипе, на неё V-USB, с основным процом по UART пусть общается. По сути та же FT232R, но:
  • не нужно драйверов (HID)
  • не меняет ком-порт, да и ваще нет слова "ком-порт"
  • паять проще
  • стоит дешевле

Правда, непонятна надёжность. FTDI зарекомендовал себя, тогда как V-USB... У меня есть USB-термометр от мастеркита, он меня достал пропадать из системы. Причём решается только аппаратным "вытащил / вставил в порт", что удалённо делать станет возможно только весной, релюху на USB поставлю: http://starlab.ru/showthread.php?p=382373#post382373 .

Попробую всё же. Раз V-USB успешно существует, может не так всё плохо :).
モ - mo

Оффлайн Aslamov Ilya

  • ****
  • Сообщений: 338
  • Благодарностей: 9
    • Сообщения от Aslamov Ilya
Если писать свой драйвер, там всё понятно, а если пользоваться стандартным virtual-com, то эта его корявость лично меня напрягает.
Да тут собственно не в драйвере дело. А в винде. Ведь на любое USB устройство при смене "дырки" USB Винда заново ставит драйвера. Ну а раз заново ставит драйвер, то и соответственно выдает новый номер КОМ порта, по порядку начиная с первого свободного.

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Если писать свой драйвер, там всё понятно, а если пользоваться стандартным virtual-com, то эта его корявость лично меня напрягает.
Да тут собственно не в драйвере дело. А в винде. Ведь на любое USB устройство при смене "дырки" USB Винда заново ставит драйвера. Ну а раз заново ставит драйвер, то и соответственно выдает новый номер КОМ порта, по порядку начиная с первого свободного.

Ок, претензии к драйверу сняты :)
А вот претензии к принципу в целом имею.

Что сути, кстати, не поменяло.
モ - mo

andreichk

  • Гость
в связке  V-USB + винда, будет то же самое

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
в связке  V-USB + винда, будет то же самое
То же самое, как в в чём? Мои извинения, потерял нить мысли.
Как в описанном мной USB-термометре? Или как в описанном мною virtual-com порте?
モ - mo

Оффлайн Aslamov Ilya

  • ****
  • Сообщений: 338
  • Благодарностей: 9
    • Сообщения от Aslamov Ilya
Насколько я понимаю, в случае использования USB в режиме HID, для программы ПК не будет таких заморочек как с COM портом, т.к. она будет обращаться по конкретному PID-у и VID-у устройства. Которые фиксированные и никак независят от дырки USB

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Насколько я понимаю, в случае использования USB в режиме HID, для программы ПК не будет таких заморочек как с COM портом, т.к. она будет обращаться по конкретному PID-у и VID-у устройства. Которые фиксированные и никак независят от дырки USB
Я понимаю так же, но пока не готов это аргументировать.
モ - mo

Оффлайн Aslamov Ilya

  • ****
  • Сообщений: 338
  • Благодарностей: 9
    • Сообщения от Aslamov Ilya
Цитата
библиотека V-USB - её использование поглощает 60..80 процентов процессорного времени ATmega16.
Думаю все равно можно попробывать, раз уж начал. Интервал опроса сделать максимальным - 255 миллисекунд, чтобы за зря не отвлекаться на обработку USB. Данных там передается не много. Может и заработает более менее нормально, и не будет сильно мешать работе мотора

Оффлайн Дядя Вова

  • *****
  • Сообщений: 8 096
  • Благодарностей: 95
    • Сообщения от Дядя Вова
Если писать свой драйвер, там всё понятно, а если пользоваться стандартным virtual-com, то эта его корявость лично меня напрягает.
Да тут собственно не в драйвере дело. А в винде. Ведь на любое USB устройство при смене "дырки" USB Винда заново ставит драйвера. Ну а раз заново ставит драйвер, то и соответственно выдает новый номер КОМ порта, по порядку начиная с первого свободного.
Вот и надо чтобы ASCOM драйверы сами находили СВОИ com-портф. Как это Иван Ионов сделал в драйвере фокусера&колеса.

А как перспектива V-USB->i2c тоже хороша imho
Мечта - по монтировке идет один кабель. В нем питание и i2с. Помните Ethernet на коаксиале? :)
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE

Оффлайн Aslamov Ilya

  • ****
  • Сообщений: 338
  • Благодарностей: 9
    • Сообщения от Aslamov Ilya
Вот и надо чтобы ASCOM драйверы сами находили СВОИ com-портф. Как это Иван Ионов сделал в драйвере фокусера&колеса.
Ну  это в принципе не проблема написать.

А как перспектива V-USB->i2c тоже хороша imho
Мечта - по монтировке идет один кабель. В нем питание и i2с. Помните Ethernet на коаксиале? :)
I2C шина медленноватая, и слабопомехозащищенная. Уж лучше RS485 или CAN. Или сразу уж Ethernet (универсально, опторазвязано, быстродействующе, дальнобойно, но увы дороговато)

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Вот и надо чтобы ASCOM драйверы сами находили СВОИ com-портф. Как это Иван Ионов сделал в драйвере фокусера&колеса.
Ну  это в принципе не проблема написать.

А как перспектива V-USB->i2c тоже хороша imho
Мечта - по монтировке идет один кабель. В нем питание и i2с. Помните Ethernet на коаксиале? :)
I2C шина медленноватая, и слабопомехозащищенная. Уж лучше RS485 или CAN. Или сразу уж Ethernet (универсально, опторазвязано, быстродействующе, дальнобойно, но увы дороговато)

Дяди Вовы мысль пошла дальше, я же говорил про связь в рамках этой платы: http://photo.milantiev.com/big.php?file=1386-14&max=19

Пока планчик такой:
USB-разъём переношу направо-вниз, заодно лучше прижимаю к плате, да ножки боковые подпаиваю.
Вертикально кидаю панельку и atmega8 в DIP28. Кварц и два чип-кондёра, разъём программирования. Завожу питание на атмегу8 через L7805. Между атмегой8 и USB паяю V-USB компоненты (два стабилитрона, три резистора, кондёр). Временно ставлю светодиод с резюком на землю и добиваюсь работы атмеги8 с V-USB (ещё не пробовал в деле).
Далее через USB даю тестовые команды старт/стоп мотору, проверяю TWI связь процов. Мотором рулит atmega88 через 4 аппаратных ШИМ на двух восьмибитных таймерах, а именно
PD5 OC0B
PD6 OC0A
PB3 OC2A
PD3 OC2B
, реализуя ШИМ управление мотором в микрошаге ~1/8 (без стабилизации по току, то есть возможны вопросы с остановкой / разгоном).
От центральной атмеги8, что сидит на USB будут поступать команды «иди на», «стой», «иди со звёздной скоростью», «дай свои координаты». Обработка TWI slave будет низкоприоритетной, не мешающей основной RT задаче – управлению мотором.
Мотор DEC повешу на полушаг через оставшиеся порты. А в перспективе ещё один проц под него.
モ - mo

Оффлайн Дядя Вова

  • *****
  • Сообщений: 8 096
  • Благодарностей: 95
    • Сообщения от Дядя Вова
Дяди Вовы мысль пошла дальше, я же говорил про связь в рамках этой платы: http://photo.milantiev.com/big.php?file=1386-14&max=19
Нахал! Ты хоть для приличия электролит на питание повесь!  >:(
Моя мысль уже много лет стоит на месте - должен быть черный ящик в который входит командная линия и питание. А "прилеплена" она к двигателю.
RA, DEC, Фокусер, Колесо - без разницы.
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE

Оффлайн Дядя Вова

  • *****
  • Сообщений: 8 096
  • Благодарностей: 95
    • Сообщения от Дядя Вова
Вот и надо чтобы ASCOM драйверы сами находили СВОИ com-портф. Как это Иван Ионов сделал в драйвере фокусера&колеса.
Ну  это в принципе не проблема написать.
Во, рацуха!
Сложилось так, что все устройства на COM-портах. Практически модемы. А там есть AT-команда запроса идентификатора/имени устройства.
Т.е. можно договорится, что все драйверы обрабатывают эту команду.

Тогда можно надеяться, что гопода-программисты сварганят такую утилиту которая будет переназначать COM-порты винды. Т.е. втыкаем шнурки USB-COM в USB-HUB в полной темноте как бог на душу положит, а утилита все причешет. И тогда подключаемые драйверы сразу попадут на свой порт.

Наклеечки на хабе и проводах - проще конечно. :)

ЗЫ
AT+GMI - производитель устройства
AT+GMM - модель устройства
« Последнее редактирование: 21 Мар 2011 [16:35:32] от Дядя Вова »
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE

andreichk

  • Гость
Цитата
Наклеечки на хабе и проводах - проще конечно
но это же не по-нашенски, нам обязательно из мухи слона раздуть надо..... 8)

Оффлайн Дядя Вова

  • *****
  • Сообщений: 8 096
  • Благодарностей: 95
    • Сообщения от Дядя Вова
А вот мысль очередная. Если управлять биполярниками непосредственно от atmega (ну, через согласование, ещё не знаю какое именно, конечно), то ведь получается 4 аппаратных ШИМ как раз хватит на 2 по 2 обмотки двух движков?
Я пока только изучаю биполярники, могу ошибаться.

Вам нужно будет использовать 4 выхода + 2 входа для ОС по току - итого 6 линий, атмега загружается дополнительной математикой.
И это минимум надо умножить на 2... а то и на 4.....

По цене - не думаю, что 8 транзисторов будут особо дешевле 6219.
Все же та идея на 6219 сделать 1/16 - если получится - будет вещь....
Не могу чот понять. В даташите http://www.promelec.ru/pdf/1377.pdf сказано: HALF-STEP, FULL-STEP AND MICROSTEPPINGMODE А как микростепинг - не написано :(

Кстати, рабочая темп 0+70С :(


upd
Придется у Ивана7 тырить https://astronomy.ru/forum/index.php/topic,13180.msg948281.html#msg948281  ;D
« Последнее редактирование: 22 Мар 2011 [10:06:48] от Дядя Вова »
(Vixen ED80+Canon300Da, 9x50+QHY5)+EQ6upg
Meade ETX-90PE

andreichk

  • Гость
а что должно быть написано про микрошаг? Вот у меня кусок кода сохранился 1\4 микрошага.Отработал честно на моём первом ГОТО. Код загружался в микропроц от Ренесас.
/**************************************************/
/* FILE :R8C_L6219.c */
/* DATE :Sat, Feb 10, 2007 */
/**************************************************/
#include "sfr_r813.h"

#define set_motor(X) p1 = (p1 & 0xC0) | X /* 2 Hochbit von р1 abschneiden */
/* Pins for L6219. */
#define A_I0 0x01 // P1_0
#define A_I1 0x02 // P1_1
#define A_Ph 0x04 // P1_2
#define B_I0 0x08 // P1_3
#define B_I1 0x10 // P1_4
#define B_Ph 0x20 // P1_5

/* These macros give names to the various possible settings of the current
control signals. The numbers in the names indicate percent of full current. */
#define A_0 (A_I0 | A_I1)
#define A_33 A_I1
#define A_67 A_I0
#define A_100 0

#define B_0 (B_I0 | B_I1)
#define B_33 B_I1
#define B_67 B_I0
#define B_100 0
/* These macros give names to the directions of current flow in the two
windings. */
#define A_PLUS A_Ph
#define A_MINUS 0

#define B_PLUS B_Ph
#define B_MINUS 0
//================================================
unsigned char four_step[16] = { //Array fur 1/4 Schritt L6219
A_MINUS | A_0 | B_PLUS | B_67,
A_PLUS | A_33 | B_PLUS | B_67,
A_PLUS | A_67 | B_PLUS | B_67,
A_PLUS | A_67 | B_PLUS | B_33,
A_PLUS | A_67 | B_PLUS | B_0,
A_PLUS | A_67 | B_MINUS | B_33,
A_PLUS | A_67 | B_MINUS | B_67,
A_PLUS | A_33 | B_MINUS | B_67,
A_PLUS | A_0 | B_MINUS | B_67,
A_MINUS | A_33 | B_MINUS | B_67,
A_MINUS | A_67 | B_MINUS | B_67,
A_MINUS | A_67 | B_MINUS | B_33,
A_MINUS | A_67 | B_MINUS | B_0,
A_MINUS | A_67 | B_PLUS | B_33,
A_MINUS | A_67 | B_PLUS | B_67,
A_MINUS | A_33 | B_PLUS | B_67
};

//--------------------------------------------------------
void init(void)
{ /*-------------------------------------------------
- Change on-chip oscillator clock to Main clock -
-------------------------------------------------*/
prc0 = 1; /* Protect off */
cm13 = 1; /* Xin Xout */
cm15 = 1; /* XCIN-XCOUT drive capacity select bit : HIGH */
cm05 = 0; /* Xin on */
cm16 = 0; /* Main clock = No division mode */
cm17 = 0;
cm06 = 0; /* CM16 and CM17 enable */
asm("nop"); /* Waiting for stable of oscillation */
asm("nop");
asm("nop");
asm("nop");
ocd2 = 0; /* Main clock change */
prc0 = 0; /* Protect on */

pd1 = 0xFF; /* Set Port 1.0 - 1.7 be used for output*/
//pd4 = 0xFF; /* Set Port 4.0 - 4.7 be used for output*/
pd3_3 = 0x01; /* Set Port 3.3 be used for output*/
} //---------------------------OK
//########################################
unsigned int adc(unsigned char ch)
{
adcon0 = 0x80+ch;
adcon1 = 0x28;
adst = 1;
while(adst == 1){}
return ad;
} //---------------------------OK
//########################################
//---------------------------------------
// Variable
//---------------------------------------//
// int spd[2][2] = {27, 1, 20000, 27}; //DEC for DEC
int spd[2][2] = {2, 1, 22000, 2}; //RA for RA
// массив, содержащий значения множителей и оффсетов.
//Применяется в цикле задержки между шагами.
//---------------------------------------
signed char direction[2][2] = {0,1,0,-1};
// массив, содержащий значения инкремента направлений.
// для прямого движения инкременты 0 и 1
// для обратного движения инкременты 0 и -1
//---------------------------------------
signed char direction_;
// переменные-флаги указывающие направления движения по оси
// ненулевое значение так же говорит о том, что есть движение,
// это используется для обесточивания обмоток и подачи импульсов
// на Ccontrol 2
//---------------------------------------
unsigned char step_pos;
// переменные хранят текущий шаг
//---------------------------------------
// HAUPTPROGRAMM
//---------------------------------------
void work_loop(void) {
long t;// используется как счетчик в циклах задержки
//---------------------------------------
unsigned int i;// задержкa, содержит количество итераций
//---------------------------------------
int s, spd_a, spd_b;
// s используется как аккумулятор значения p3_0
// во избежание дребезга между операциями
//---------------------------------------
step_pos = 0; // инициализация. первый шаг - №0
//---------------------------------------
while(1) {
//---------------------------------------
s = p3_0;
spd_a = spd[s][0];
spd_b = spd[s][1];
// определяем задержку меж шагами применительно к сигналу "сутки"
//---------------------------------------------------------------------------------------------------------------
//-------определяем направление движения по оси--------------------------------
direction_ = direction[0][p3_0] | direction [0][p3_1] | direction[1][p3_2] ;
//для загрузки в RA - модуль for RA
//------------------------------------------------------------------------------------------------------
// direction_ = direction [0][p3_1] | direction[1][p3_2] ; //DEC
//для загрузки в DEC - модуль for DEC
//---------------------------------------
step_pos +=direction_; // изменяем номер текущего шага по осям
//---------------------------------------
step_pos %=16; // заносим в переменные биты, выводимые в порт
//---------------------------------------
i = 4 * adc(5) + adc(6)/10; // берем значение из АЦП для RA for RA
// i = adc(5); // берем значение из АЦП для DEC for DEC
//---------------------------------------
i *= spd_b;
i += spd_a; // определяем количество итераций.
for (t=0; t// собственно цикл задержки
//---------------------------------------
set_motor( four_step[step_pos]); // двигаемся...........................
p1_6 = direction_;// VRef ВКЛ. не используется при сут.скорости
p3_3 = direction_; // если было движение по оси, то даем импульс
for (t=0; t<2; t++); // ширина импульса
p3_3 = 0; // завершаем импульс, если он был
//---------------------------------------
}
}
//////////////////////////////////////////////////////////
void main(void) ///
{ ///
init(); ///
work_loop(); ///
} ///
//////////////////////////////////////////////////////////
« Последнее редактирование: 22 Мар 2011 [10:14:57] от Andreichk »

Оффлайн moАвтор темы

  • *****
  • Сообщений: 17 592
  • Благодарностей: 1078
  • Олег Милантьев - L71 Vedrus Observatory
  • Награды Призер конкурса астрофото
    • Сообщения от mo
Не могу чот понять. В даташите http://www.promelec.ru/pdf/1377.pdf сказано: HALF-STEP, FULL-STEP AND MICROSTEPPINGMODE А как микростепинг - не написано :(

Кстати, рабочая темп 0+70С :(

upd
Придется у Ивана7 тырить https://astronomy.ru/forum/index.php/topic,13180.msg948281.html#msg948281  ;D

6219 работает в трёх режимах, как ты и написал: в шаге, в полушаге, в микрошаге (1/4 шага).
По температуре, кэнон тоже по паспорту надо использовать выше 0° :).

Сам Иван пишет про 6219 "не люблю я её, дурная она какая-то". Я заказал несколько штук, они дешёвые. Но основной упор делаю на аллегровского жука с 1/16 микрошага. Копировать каскадирование двух L6219 не хочу, изврат это, есть готовый драйвер 1/16.

Сегодня ночью, пока удалённо снимал в обсерватории, настроил монти на звёздную скорость в полном и полушаге (без изменений схемы). Почему-то скорость монти получилась ровно в два раза выше. Буду разбираться.
モ - mo

Оффлайн Ivan7enych

  • Модератор
  • *****
  • Сообщений: 12 060
  • Благодарностей: 765
  • Ионов Иван
  • Награды Победитель ежегодного конкурса астрофото
    • Сообщения от Ivan7enych
    • Астропроекты и астрософт
Сам Иван пишет про 6219 "не люблю я её, дурная она какая-то".

Не люблю ее по 2-м причинам.
1 - сильно греется, даже на штатном токе.
2 - ШИМ не работает на стабильной частоте, мотор противно и громко шипит, подбором конденсаторов это не лечится.
Видео отчеты мастерской
телескопы - 230мм/4 самодельный ньютон для поездок, Televue NP101is на удаленке, 500мм ньютон в постройке.
Просьбы о ремонте пишите мне в телеграм, не в личку.