Pluto-P - есть ли опыт использования?

Обсуждение установки, настройки и использования LinuxCNC. Вопросы по Gкоду.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Шагогенератор на Pluto-P. Хроника.

Сообщение Сергей Саныч »

Неделю назад пришла плата Pluto-P. Начну не спеша подключать и настраивать. Результаты - описывать по мере их получения. Вопросы буду задавать - по мере поступления :)
Конструктивные комментарии - приветствуются.
Итак, 11 ноября была заказана плата Pluto-P здесь http://www.knjn.com/ за 50 долларов вместе с доставкой, после чего пришло подтверждение заказа, трек-номер и ссылка для скачивания документации. Вот этой:
Pluto-P_StartupKit.zip
(579.84 КБ) 652 скачивания
Трек отследился только до Лос-Анджелеса, далее пропал. Однако, ровно через месяц обнаружил в почтовом ящике извещение.
В пакете обнаружилась сама плата, а также гнездо питания отдельно. Разъем для подключения к LPT был припаян, остальные разъемы (гребенки) отсутствовали.
Pluto Top.jpg (4385 просмотров) <a class='original' href='./download/file.php?id=22466&sid=be6ffab5fa4ed7c39a53054690ed61d2&mode=view' target=_blank>Загрузить оригинал (1.48 МБ)</a>
На верхней стороне платы присутствует сам чип ПЛИС (FPGA) типа EP1K10TC100-3N, светодиод, несколько резисторов и конденсаторов.
Pluto Bottom.jpg (4385 просмотров) <a class='original' href='./download/file.php?id=22465&sid=be6ffab5fa4ed7c39a53054690ed61d2&mode=view' target=_blank>Загрузить оригинал (3.55 МБ)</a>
На обратной стороне - стабилизатор на 3,3В, кварцевый генератор на 40МГц, три трехногих деталюшки, из которых две, по всей видимости, транзисторы, и одна - диодная сборка.
Плата покрыта темно-синей паяльной маской, сквозь которую проводники глазами просматриваются довольно плохо. Но, что интересно, на фотографиях их видно отлично :thinking:
Плата, по всей видимости, толком не проверялась, чему свидетельством были две капитальные "сопли" припоя между ног микросхемы.

Продолжение следует...
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Serg »

Serg-tmn писал(а):Трек отследился только до Лос-Анджелеса, далее пропал. Однако, ровно через месяц обнаружил в почтовом ящике извещение.
Если трек начинался на L, то так и должно быть, наша почта при импорте присваивает таким свой трек.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

UAVpilot писал(а):наша почта при импорте присваивает таким свой трек.
Так и произошло, но этот трек я узнал только из извещения :)
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Serg »

Serg-tmn писал(а):чему свидетельством были две капитальные "сопли" припоя между ног микросхемы.
Между 76 и 77 ногами? - Это у многих так, на нормальную работу не влияет. :)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

UAVpilot писал(а):Между 76 и 77 ногами?
Нет, между 77 и 78. Но! 76 и 77 на самом деле замкнуты! (где-то под МС). Что за ноги, пока не смотрел. 76 идет на вторую ногу LPT (Data0).
Плату подключил, hal прописал, но пока не работает, хотя LCNC загружается и по всей видимости, загружает прошивку.
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Serg »

Serg-tmn писал(а):Что за ноги, пока не смотрел.
77 помнится используется для последовательной загрузки и тоже подключён к второй ноге.

Без прошивки светодиод тускло светится, а после загрузке вроде гаснет, не помню уже.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

С наскоку не заработало :thinking:
Во-первых, плата, подключенная к LPT через удлинитель (шлейф 15 см), загружается (светодиод гаснет), но при первых операциях записи - сбрасывается (светодиод снова тускло светит).
При непосредственном включении в разъем LPT - вроде как даже работает. Но странно (станок пока не подключал). Когда гоняешь вручную (клавишами) по X или Z, или Y вверх - всё нормально, цифры бегут. Но стоит нажать Y вниз - всё, вылетает ошибка Joint 2 following error (то есть по оси Z!).
Поиск показал, что я не один такой: http://linuxcnc.org/lucid/index.php/rus ... -plutostep , но там, похоже, дальше предположений дело не пошло.

Код: Выделить всё

loadrt trivkins
loadrt [EMCMOT]EMCMOT base_period_nsec=[EMCMOT]BASE_PERIOD servo_period_nsec=[EMCMOT]SERVO_PERIOD num_joints=[TRAJ]AXES
loadrt probe_parport

loadrt pluto_step ioaddr=0x378 ioaddr_hi=0 epp_wide=1 watchdog=0
addf pluto-step.read servo-thread
addf pluto-step.write servo-thread
setp pluto-step.stepgen.step-polarity 0
setp pluto-step.stepgen.steplen 5000
setp pluto-step.stepgen.stepspace 5000
setp pluto-step.stepgen.dirtime 20000


loadrt classicladder_rt numPhysInputs=15 numPhysOutputs=15 numS32in=10 numS32out=10 numFloatIn=10 numFloatOut=10
loadrt not count=3
addf not.0 base-thread
addf not.1 base-thread
addf not.2 base-thread

addf motion-command-handler servo-thread
addf motion-controller servo-thread
net spindle-cmd <= motion.spindle-speed-out
net coolant-flood <= iocontrol.0.coolant-flood



############################################################ charge_pump
#loadrt charge_pump
#addf charge-pump base-thread
#setp charge-pump.enable TRUE
#net chpump charge-pump.out => parport.0.pin-01-out


############################################################# debounce
loadrt debounce cfg=1
addf debounce.0 base-thread
setp debounce.0.delay 100

#############################################################
net coolant-flood => pluto-step.dout.12 #parport.0.pin-14-out

############################################################# siggen

net home-x <= pluto-step.din.08	#parport.0.pin-11-in
net home-y <= pluto-step.din.09	#parport.0.pin-12-in
net home-z <= pluto-step.din.10	#parport.0.pin-13-in
###setp motion.probe-input invert 1

net probe debounce.0.0.in <= pluto-step.din.11	#parport.0.pin-15-in
net probedeb not.0.in <= debounce.0.0.out
net nprobe motion.probe-input <= not.0.out


#pluto-step.stepgen.0.maxvel float rw (M=0..3) (default: 0)
setp pluto-step.stepgen.0.scale [AXIS_0]SCALE
net xpos-cmd axis.0.motor-pos-cmd => pluto-step.stepgen.0.position-cmd
net xpos-fb pluto-step.stepgen.0.position-fb => axis.0.motor-pos-fb
net xenable axis.0.amp-enable-out => pluto-step.stepgen.0.enable
net home-x => axis.0.home-sw-in

setp pluto-step.stepgen.1.scale [AXIS_1]SCALE
net ypos-cmd axis.1.motor-pos-cmd => pluto-step.stepgen.1.position-cmd
net ypos-fb pluto-step.stepgen.1.position-fb => axis.1.motor-pos-fb
net yenable axis.1.amp-enable-out => pluto-step.stepgen.1.enable
net home-y => axis.1.home-sw-in


setp pluto-step.stepgen.2.scale [AXIS_2]SCALE
net zpos-cmd axis.2.motor-pos-cmd => pluto-step.stepgen.2.position-cmd
net zpos-fb pluto-step.stepgen.2.position-fb => axis.2.motor-pos-fb
net zenable axis.2.amp-enable-out => pluto-step.stepgen.2.enable
net home-z => axis.2.home-sw-in

net estop-out <= iocontrol.0.user-enable-out ### parport.0.pin-10-in
net estop-out => iocontrol.0.emc-enable-in

loadusr -W hal_manualtoolchange

net tool-change iocontrol.0.tool-change => hal_manualtoolchange.change
net tool-changed iocontrol.0.tool-changed <= hal_manualtoolchange.changed
net tool-number iocontrol.0.tool-prep-number => hal_manualtoolchange.number
net tool-prepare-loopback iocontrol.0.tool-prepare => iocontrol.0.tool-prepared


# Load Classicladder without GUI (can reload LADDER GUI in AXIS GUI
loadusr classicladder --nogui custom.clp
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Serg »

У меня работало, правда только "на столе" и со светодиодами в качестве исполнительных устройств. Подключалось через LPT-кабель длиной примерно метр.
Потом у меня на плату упал проводок с +12V... :idiot:
В принципе есть отдельные чипы и можно перепаять, но я забил - 7i43 получается почти в те-же деньги.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Nick
Мастер
Сообщения: 22776
Зарегистрирован: 23 ноя 2009, 16:45
Репутация: 1735
Заслуга: Developer
Откуда: Gatchina, Saint-Petersburg distr., Russia
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Nick »

Serg-tmn писал(а):Но стоит нажать Y вниз - всё, вылетает ошибка Joint 2 following error (то есть по оси Z!).
хммм может что-то в прошивке не так... вроде как задание правильно выдается... поставь FERROR и MIN_FERROR в ini по больше...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

Nick писал(а):поставь FERROR и MIN_FERROR в ini по больше...
да вряд ли поможет. Если бы выскакивало с той же осью, которая едет, тогда имело бы смысл. А я "двигаю" Y, а ошибка выскакивает по Z.
Смотрел пины, когда едешь очень медленно (0,5 мм/мин), ошибка не выскакивает, но ось Z "дергается" туда-сюда в пределах нескольких микрон. Причем дергается значение pluto-step.stepgen.2.position-fb, то есть обратная связь от Плуто, а задание (pluto-step.stepgen.2.position-cmd) остается в нуле.
Да! еще иногда "шевелится" четвертая ось (pluto-step.stepgen.3.position-fb), которая у меня вообще не используется.
Чудес не бывает. Бывают фокусы.
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Impartial »

Проблема скорее всего в том, что прошивка написана под старый стандарт ЛПТ. Посмотрите Вашу версию ЕМС.
Эта строчка в исходнике должна выглядеть так.
wire EPP_wait; assign nWait = ~EPP_wait;
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

Impartial писал(а):Проблема скорее всего в том, что прошивка написана под старый стандарт ЛПТ. Посмотрите Вашу версию ЕМС.
Эта строчка в исходнике должна выглядеть так.
wire EPP_wait; assign nWait = ~EPP_wait;
Именно так она и выглядит. LCNC версии 2.5.3.
Пробовал включать EPP 1.7 и 1.9 - результат одинаковый.
Вложения
pluto_step_firmware.zip
(14.77 КБ) 518 скачиваний
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

Кстати. Исходники драйверов сидят в файлах .сомр
Кто подскажет, что это за файлы и с чем их едят? Видно, что основная их часть написана вроде бы на Си, но есть и совершенно не сишные конструкции.
Чудес не бывает. Бывают фокусы.
nkp
Мастер
Сообщения: 8340
Зарегистрирован: 28 ноя 2011, 00:25
Репутация: 1589
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение nkp »

Serg-tmn писал(а):Исходники драйверов сидят в файлах .сомр
а где это глянуть?
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

Вот

Код: Выделить всё

//    Copyright (C) 2007 Jeff Epler
//
//    This program is free software; you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation; either version 2 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program; if not, write to the Free Software
//    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA

component pluto_step """Hardware driver and firmware for the Pluto-P parallel-port FPGA, for use with stepper machines.

.B loadrt pluto_step ioaddr=\\fIaddr\\fB ioaddr_hi=\\fIaddr\\fB epp_wide=\\fI[0|1]\\fB

.RS 4
.TP
\\fBioaddr\\fR [default: 0x378]
The base address of the parallel port.

.TP
\\fBioaddr_hi\\fR [default: 0]
The secondary address of the parallel port, used to set EPP
mode.  0 means to use ioaddr + 0x400.  -1 means there is no
secondary address.

.TP
\\fBepp_wide\\fR [default: 1]
Set to zero to disable "wide EPP mode".  "Wide" mode allows 16- and 32-bit EPP
transfers, which can reduce the time spent in the read and write functions.
However, this mode may not work on all EPP parallel ports.

.TP
\\fBwatchdog\\fR [default: 1]
Set to zero to disable the "hardware watchdog".  "Watchdog" will tristate all
outputs approximately 6ms after the last execution of
\\fBpluto-step.write\\fR, which adds some protection in the case of LinuxCNC
crashes.

.TP
\\fBspeedrange\\fR [default: 0]
Selects one of four speed ranges:
.RS
.RS 4
.TQ
0: Top speed 312.5kHz; minimum speed 610Hz
.TQ
1: Top speed 156.25kHz; minimum speed 305Hz
.TQ
2: Top speed 78.125kHz; minimum speed 153Hz
.TQ
3: Top speed 39.06kHz; minimum speed 76Hz
.RE
Choosing the smallest maximum speed that is above the maximum for any one axis
may give improved step regularity at low step speeds.
.RE
.RE""";

description """
Pluto_step is a LinuxCNC software driver and associated firmware that allow the Pluto-P board to be used to control a stepper-based CNC machine.

The driver has 4 step+direction channels, 14 dedicated digital outputs, and 16
dedicated digital inputs.

.SS Step generators
The step generator takes a position input and output.

The step waveform includes step length/space and direction hold/setup time.
Step length and direction setup/hold time is enforced in the FPGA.  Step space
is enforced by a velocity cap in the driver.

\\fI(all the following numbers are subject to change)\\fR
In \\fIspeedrange=0\\fR, the maximum step rate is 312.5kHz.  For position
feedback to be accurate, the maximum step rate is 512 pulses per servo cycle
(so a 1kHz servo cycle does not impose any additional limitation).  The maximum
step rate may be lowered by the step length and space parameters, which are
rounded up to the nearest multiple of 1600ns.

In successive speedranges the maximum step rate is divided in half, as is the
maximum steps per servo cycle, and the minimum nonzero step rate.

.SS Digital I/O
The digital output pins conform to the `canonical digital output' interface
described in the HAL manual.

The digital input pins conform to the `canonical digital input' interface
described in the HAL manual.
""";
pin in float stepgen.#.position-cmd[4];
pin out float stepgen.#.velocity-fb[4];
pin out float stepgen.#.position-fb[4];
pin out s32 stepgen.#.counts[4];
pin in bit stepgen.#.enable[4];
pin in bit stepgen.#.reset[4] "When TRUE, reset position-fb to 0";
param rw float stepgen.#.scale[4] = 1.0;
param rw float stepgen.#.maxvel[4] = 0;
param rw bit stepgen.step_polarity;

param rw u32 stepgen.steplen "Step length in ns.";
param rw u32 stepgen.stepspace "Step space in ns";
param rw u32 stepgen.dirtime "Dir hold/setup in ns.  Refer to the pdf documentation for a diagram of what these timings mean.";

pin in bit dout.##[14]
"""dout.\\fIMM\\fR corresponds to the pin labeled
OUT\\fIM\\fR on the pinout diagram.""";
param rw bit dout.##-invert[14]
"If TRUE, the output on the corresponding \\fBdout.\\fIMM\\fR is inverted.";

pin out bit din.##[16];
pin out bit din.##_not[16]
"""din.\\fIMM\\fR corresponds to the pin labeled
IN\\fIM\\fR on the pinout diagram.""";

param rw u32 communication_error """Incremented each time 
pluto-step.read detects an error code in the EPP status register.  While
this register is nonzero, new values are not being written to the Pluto-P
board, and the status of digital outputs and the PWM duty cycle of the PWM
outputs will remain unchanged.  If the hardware watchdog is enabled, it will
activate shortly after the communication error is detected by LinuxCNC.  To continue
after a communication error, set this parameter back to zero.""";

param rw s32 debug_0;
param rw s32 debug_1;
param rw float debug_2=.5;
param rw float debug_3=2.0
 """Registers that hold debugging information of interest to developers""";

option singleton;
option extra_setup;
option extra_cleanup;

option data internal;

function read "Read all the inputs from the pluto-step board";
function write "Write all the outputs on the pluto-step board";

see_also """The \\fIpluto_step\\fR section in the HAL User Manual, which shows the location of each physical pin on the pluto board.""";

license "GPL";
include "hal/drivers/pluto_common.h";
;;

static int speedrange=0;
RTAPI_MP_INT(speedrange, "Speed range 0..3");

#define PLUTO_SPEED_NS (1600)
#define PLUTO_SPEED    (PLUTO_SPEED_NS * 1e-9)
#define PLUTO_FREQ     (1e9 / PLUTO_SPEED_NS)
#define TMAX           ((1<<5)-1)

#define W 10
#define F 11
#define MODULO ((1<<(W+F))-1)
#define MASK ((1<<(W+F))-1)
#define MAXDELTA (MASK/2)

typedef struct {
    int64_t last_count[4];
    int64_t reset_count[4];
    double old_position_cmd[4];
    double old_velocity_cmd[4];
} internal;

#define ONE (1<<F)
#define MAX_STEP_RATE (1<<(F-1))
FUNCTION(write) {
    int r = 0;
    int i;
    int stepspace_ticks = stepgen_stepspace/PLUTO_SPEED_NS;
    int steplen_ticks = stepgen_steplen/PLUTO_SPEED_NS;
    int dirtime_ticks = stepgen_dirtime/PLUTO_SPEED_NS;
    int rate, maxrate = MAX_STEP_RATE;
    double fmax;

    if(steplen_ticks > TMAX) {
        steplen_ticks = TMAX;
        rtapi_print_msg(RTAPI_MSG_ERR,
            "Requested step length %dns decreased to %dns "
            "due to hardware limitations\n",
            stepgen_steplen, TMAX * PLUTO_SPEED_NS);
        stepgen_steplen = TMAX * PLUTO_SPEED_NS;
    }

    if(dirtime_ticks > TMAX) {
        dirtime_ticks = TMAX;
        rtapi_print_msg(RTAPI_MSG_ERR,
            "Requested direction change time %dns decreased to %dns "
            "due to hardware limitations\n",
            stepgen_dirtime, TMAX * PLUTO_SPEED_NS);
        stepgen_dirtime = TMAX * PLUTO_SPEED_NS;
    }

    // Speed limits come from several sources
    // First limit: step waveform timings
    fmax = 1. / PLUTO_SPEED / (2 + steplen_ticks + stepspace_ticks);
    // Second limit: highest speed command
    if(fmax > PLUTO_FREQ / (2<<speedrange))
        fmax = PLUTO_SPEED * (2<<speedrange);
    // Third limit: max sign-extenable counts per period
    if(fmax > MAXDELTA / fperiod / (1<<speedrange))
        fmax = MAXDELTA / fperiod / (1<<speedrange);

    if(communication_error) return;

    EPP_ADDR(0);

    for(i=0; i<4; i++) {
	double new_position_cmd = stepgen_position_cmd(i);
	double v = new_position_cmd - data.old_position_cmd[i];
	double est_err = stepgen_position_fb(i) + data.old_velocity_cmd[i] * fperiod - new_position_cmd;
        double actual_max;
	double scale_abs = abs(stepgen_scale(i));

	v = v - debug_2 * est_err / fperiod;
        if(v > 0) v = v + .5/scale_abs;
        else if(v < 0) v = v - .5/scale_abs;

	data.old_position_cmd[i] = new_position_cmd;
	data.old_velocity_cmd[i] = v;
        actual_max = fmax / scale_abs;
        if(stepgen_maxvel(i) < 0) stepgen_maxvel(i) = -stepgen_maxvel(i);
        if(stepgen_maxvel(i) != 0 && stepgen_maxvel(i) > actual_max) {
            static int message_printed[4] = {0,0,0,0};
            if(!message_printed[i]) {
                rtapi_print_msg(RTAPI_MSG_ERR,
                    "Requested step rate %dHz decreased to %dHz "
                    "due to hardware or timing limitations\n",
                    (int)(stepgen_maxvel(i) * scale_abs),
                    (int)(fmax));
                message_printed[i] = 1;
            }
            stepgen_maxvel(i) = actual_max;
        }

        if(stepgen_maxvel(i) == 0) {
            if(v < -actual_max) v = -actual_max;
            if(v > actual_max) v = actual_max;
        } else {
            if(v < -stepgen_maxvel(i)) v = -stepgen_maxvel(i);
            if(v > stepgen_maxvel(i)) v = stepgen_maxvel(i);
        }
	rate = v * stepgen_scale(i) * ONE * PLUTO_SPEED / (1<<speedrange);

	if(rate > maxrate) rate = maxrate;
	if(rate < -maxrate) rate = -maxrate;

	if(!stepgen_enable(i)) rate = 0;
        if(i == 0) debug_1 = rate;
	write16(rate);
    }

    r = 0;
    for(i=0; i<14; i++) {
        if(!dout(i) ^ !dout_invert(i)) r |= (1<<i);
    }
    write16(r);

    r = steplen_ticks | (dirtime_ticks << 8);
    if (stepgen_step_polarity) r |= 0x8000;
    write16(r);
}


FUNCTION(read) {
    int i;
    __u32 ppdata;

    EPP_ADDR(0);
    EPP_DIR_READ();

    for(i=0; i<4; i++) {
        int64_t count;
        double fcount;
	int newlow;
        int reset;
        ppdata = read32();
        reset = stepgen_reset(i);
        if(i == 0) {
            int status = inb(ioaddr+1) & 1;
            if(status) {
                communication_error ++;
		pluto_clear_error_register();
            }
            if(communication_error) { EPP_DIR_WRITE(); return; }
        }

	newlow = ppdata & MASK;

        count = extend(data.last_count[i], newlow, W+F);
	stepgen_velocity_fb(i) = (count - data.last_count[i]) / stepgen_scale(i) / fperiod / (1 << F);
        data.last_count[i] = count;
        if(reset) data.reset_count[i] = count;
        fcount = (count - data.reset_count[i]) * 1. / (1<<F);
        stepgen_counts(i) = fcount;
        stepgen_position_fb(i) = fcount / stepgen_scale(i);

        if(i == 0) { debug_0 = ppdata; }
    }

    ppdata = read32();

    for(i=0; i<16; i++) {
        int b = ppdata & (1<<i);
        din(i) = !!b; din_not(i) = !b;
    }

    EPP_DIR_WRITE();
}

#include "hal/drivers/pluto_step_rbf.h"

EXTRA_SETUP() {
    return pluto_setup(firmware);
}

EXTRA_CLEANUP() {
    pluto_cleanup();
}

// vim:sts=4:sw=4:et
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Serg »

Impartial писал(а):Проблема скорее всего в том, что прошивка написана под старый стандарт ЛПТ. Посмотрите Вашу версию ЕМС.
Эта строчка в исходнике должна выглядеть так.
wire EPP_wait; assign nWait = ~EPP_wait;
Там на Плуто это транзистором проинвертировано.

P.S. Я пробовал на 2.6.0-preчегототам.
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Аватара пользователя
Сергей Саныч
Мастер
Сообщения: 9116
Зарегистрирован: 30 май 2012, 14:20
Репутация: 2858
Откуда: Тюмень
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Сергей Саныч »

В общем, поковырявшись с драйвером на низком уровне, понял - при занесении отрицательного задания скорости на ось Y, каким-то образом появляется ненулевое задание по Z. Причем даже если цикл записи укоротить так, чтобы на Z вообще ничего не заносилось.
Однако, придется ковырять прошивку. Никогда не имел дела с программированием ПЛИС :( :monkey:
Что бы почитать про это дело?
Чудес не бывает. Бывают фокусы.
Аватара пользователя
Serg
Мастер
Сообщения: 21923
Зарегистрирован: 17 апр 2012, 14:58
Репутация: 5181
Заслуга: c781c134843e0c1a3de9
Настоящее имя: Сергей
Откуда: Москва
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Serg »

В доках на плуто есть ссылки на простенькие примеры. Это ведь в первую очередь демоплата для изучения ПЛИС, а уж потом генератор шагов для CNC. :hehehe:
Для тех, кто уже умеет программить МК и начинает изучать ПЛИС самое главное не забывать, что все части написанной программы работают одновременно в каждый момент времени, а не последовательно инструкция за инструкцией. ;)
Я не Христос, рыбу не раздаю, но могу научить, как сделать удочку...
Impartial
Мастер
Сообщения: 953
Зарегистрирован: 23 фев 2011, 01:50
Репутация: 36
Контактная информация:

Re: Pluto-P - есть ли опыт использования?

Сообщение Impartial »

Serg-tmn писал(а):Однако, придется ковырять прошивку. Никогда не имел дела с программированием ПЛИС
Вы зря взяли эту плату. Я пытался Вам показать приблизительно то, что нужно. В этот чип уже ничего не влезет. А нужно бы в него залить сигнатурный анализатор и все косяки сразу можно увидеть. Теперь придется брать плату посерьезнее с программатором и, кстати, раза в два дешевле. Иначе так и будете плутать. Это не микроконтроллер. С пол пинка не заработает.
Ответить

Вернуться в «LinuxCNC»