Специальные цены   новые товары
Закрытая тема
Страница 1 из 2 1 2 ПоследняяПоследняя
Показано с 1 по 40 из 52

использование pluto-p подобных плат в чпу.

Тема раздела Драйверы и контроллеры для CNC в категории Станки ЧПУ, Hobby CNC, инструмент; Тема пересена из др. топика. Impartial сказал: А никто не пробовал такое сделать для управления станком? http://www.knjn.com/FPGA-Parallel.html Ведь преимуществ много! ...

  1. #1

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928

    использование pluto-p подобных плат в чпу.

    Тема пересена из др. топика.

    Impartial сказал:

    А никто не пробовал такое сделать для управления станком?
    http://www.knjn.com/FPGA-Parallel.html
    Ведь преимуществ много!
    Легко перенастраивается с шагового режима на серво, не требует программатора, много входов-выходов и простое подключение к LPT порту.
    Исходный код открытый под GPL лицензией в ЕМС2.
    При желании и знании Verilog или VHDL можно описать и запрограммировать любую конфигурацию оборудования. Но и так существует уже готовое решение и не надо заморачиваться с программированием.
    И цена на FPGA типа Cyclone 1,2,3 в районе 10$.

    Но ведь именно на эту плату есть готовые драйвера в EMC2 для работы как сервоприводов, и не в режиме step/dir, так и шаговых двигателей.
    Вроде по теме, ведь здесь попытка найти тоже решение.

    Я что-то исходников не нашел, можно пальцем ткнуть?

    Схему сейчас разрабатываю на EP1K30TC144 потому что много в наличии.
    Программирование по PPA. Штатное по PS.
    Разводка поддерживает и то и другое.
    Занимаюсь сервоприводом.
    Вам какой исходник?
    Вот штатный на сервопривод.
    Тут три модуля
    1 Servo
    2 Quad
    3 WDT
    Компилится в Квартусе без проблем.
    На отладчике тоже вроде все ОК.
    На железе еще не пробовал.

    // This is a component of pluto_servo, a PWM servo driver and quadrature
    // counter for emc2
    // Copyright 2006 Jeff Epler <jepler@unpythonic.net>
    //
    // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

    module pluto_servo(clk, led, nConfig, epp_nReset, pport_data, nWrite, nWait, nDataStr,
    nAddrStr, dout, din, quadA, quadB, quadZ, up, down);
    parameter QW=14;
    input clk;
    output led, nConfig;
    inout [7:0] pport_data;
    input nWrite;
    output nWait;
    input nDataStr, nAddrStr, epp_nReset;
    wire do_tristate;
    reg[9:0] real_dout; output [9:0] dout = do_tristate ? 10'bZZZZZZZZZZ : real_dout;
    input [7:0] din;
    input [3:0] quadA;
    input [3:0] quadB;
    input [3:0] quadZ;
    wire[3:0] real_up; output [3:0] up = do_tristate ? 4'bZZZZ : real_up;
    wire[3:0] real_down; output [3:0] down = do_tristate ? 4'bZZZZ : real_down;
    reg Zpolarity;

    wire [2*QW:0] quad0, quad1, quad2, quad3;

    wire do_enable_wdt;
    wire pwm_at_top;
    wdt w(clk, do_enable_wdt, pwm_at_top, do_tristate);

    // PWM stuff
    // PWM clock is about 20kHz for clk @ 40MHz, 11-bit cnt
    reg [10:0] pwmcnt;
    wire [10:0] top = 11'd2046;
    assign pwm_at_top = (pwmcnt == top);
    reg [15:0] pwm0, pwm1, pwm2, pwm3;
    always @(posedge clk) begin
    if(pwm_at_top) pwmcnt <= 0;
    else pwmcnt <= pwmcnt + 11'd1;
    end

    wire [10:0] pwmrev = {
    pwmcnt[4], pwmcnt[5], pwmcnt[6], pwmcnt[7], pwmcnt[8], pwmcnt[9],
    pwmcnt[10], pwmcnt[3:0]};
    wire [10:0] pwmcmp0 = pwm0[14] ? pwmrev : pwmcnt;
    // wire [10:0] pwmcmp1 = pwm1[14] ? pwmrev : pwmcnt;
    // wire [10:0] pwmcmp2 = pwm2[14] ? pwmrev : pwmcnt;
    // wire [10:0] pwmcmp3 = pwm3[14] ? pwmrev : pwmcnt;
    wire pwmact0 = pwm0[10:0] > pwmcmp0;
    wire pwmact1 = pwm1[10:0] > pwmcmp0;
    wire pwmact2 = pwm2[10:0] > pwmcmp0;
    wire pwmact3 = pwm3[10:0] > pwmcmp0;
    assign real_up[0] = pwm0[12] ^ (pwm0[15] ? 1'd0 : pwmact0);
    assign real_up[1] = pwm1[12] ^ (pwm1[15] ? 1'd0 : pwmact1);
    assign real_up[2] = pwm2[12] ^ (pwm2[15] ? 1'd0 : pwmact2);
    assign real_up[3] = pwm3[12] ^ (pwm3[15] ? 1'd0 : pwmact3);
    assign real_down[0] = pwm0[13] ^ (~pwm0[15] ? 1'd0 : pwmact0);
    assign real_down[1] = pwm1[13] ^ (~pwm1[15] ? 1'd0 : pwmact1);
    assign real_down[2] = pwm2[13] ^ (~pwm2[15] ? 1'd0 : pwmact2);
    assign real_down[3] = pwm3[13] ^ (~pwm3[15] ? 1'd0 : pwmact3);

    // Quadrature stuff
    // Quadrature is digitized at 40MHz into 14-bit counters
    // Read up to 2^13 pulses / polling period = 8MHz for 1kHz servo period
    reg qtest;
    wire qr0, qr1, qr2, qr3;
    quad q0(clk, qtest ? real_dout[0] : quadA[0], qtest ? real_dout[1] : quadB[0], qtest ? real_dout[2] : quadZ[0]^Zpolarity, qr0, quad0);
    quad q1(clk, quadA[1], quadB[1], quadZ[1]^Zpolarity, qr1, quad1);
    quad q2(clk, quadA[2], quadB[2], quadZ[2]^Zpolarity, qr2, quad2);
    quad q3(clk, quadA[3], quadB[3], quadZ[3]^Zpolarity, qr3, quad3);

    // EPP stuff
    wire EPP_write = ~nWrite;
    wire EPP_read = nWrite;
    wire EPP_addr_strobe = ~nAddrStr;
    wire EPP_data_strobe = ~nDataStr;
    wire EPP_strobe = EPP_data_strobe | EPP_addr_strobe;

    wire EPP_wait; assign nWait = ~EPP_wait;
    wire [7:0] EPP_datain = pport_data;
    wire [7:0] EPP_dataout; assign pport_data = EPP_dataout;

    reg [4:0] EPP_strobe_reg;
    always @(posedge clk) EPP_strobe_reg <= {EPP_strobe_reg[3:0], EPP_strobe};
    wire EPP_strobe_edge1 = (EPP_strobe_reg[2:1]==2'b01);

    // reg led;

    assign EPP_wait = EPP_strobe_reg[4];
    reg[4:0] addr_reg;
    reg[7:0] lowbyte;

    always @(posedge clk)
    if(EPP_strobe_edge1 & EPP_write & EPP_addr_strobe) begin
    addr_reg <= EPP_datain[4:0];
    end
    else if(EPP_strobe_edge1 & !EPP_addr_strobe) addr_reg <= addr_reg + 4'd1;
    always @(posedge clk) begin
    if(EPP_strobe_edge1 & EPP_write & EPP_data_strobe) begin
    if(addr_reg[3:0] == 4'd1) pwm0 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd3) pwm1 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd5) pwm2 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd7) pwm3 <= { EPP_datain, lowbyte };
    else if(addr_reg[3:0] == 4'd9) begin
    real_dout <= { EPP_datain[1:0], lowbyte };
    Zpolarity <= EPP_datain[7];
    qtest <= EPP_datain[5];
    end
    else lowbyte <= EPP_datain;
    end
    end

    reg [31:0] data_buf;

    always @(posedge clk) begin
    if(EPP_strobe_edge1 & EPP_read && addr_reg[1:0] == 2'd0) begin
    if(addr_reg[4:2] == 3'd0) data_buf <= quad0;
    else if(addr_reg[4:2] == 3'd1) data_buf <= quad1;
    else if(addr_reg[4:2] == 3'd2) data_buf <= quad2;
    else if(addr_reg[4:2] == 3'd3) data_buf <= quad3;
    else if(addr_reg[4:2] == 3'd4)
    data_buf <= {quadA, quadB, quadZ, din};
    end
    end

    // the addr_reg test looks funny because it is auto-incremented in an always
    // block so "1" reads the low byte, "2 and "3" read middle bytes, and "0"
    // reads the high byte I have a feeling that I'm doing this in the wrong way.
    wire [7:0] data_reg = addr_reg[1:0] == 2'd1 ? data_buf[7:0] :
    (addr_reg[1:0] == 2'd2 ? data_buf[15:8] :
    (addr_reg[1:0] == 2'd3 ? data_buf[23:16] :
    data_buf[31:24]));

    wire [7:0] EPP_data_mux = data_reg;
    assign EPP_dataout = (EPP_read & EPP_wait) ? EPP_data_mux : 8'hZZ;
    assign do_enable_wdt = EPP_strobe_edge1 & EPP_write & EPP_data_strobe & (addr_reg[3:0] == 4'd9) & EPP_datain[6];
    assign qr0 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd0);
    assign qr1 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd1);
    assign qr2 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd2);
    assign qr3 = EPP_strobe_edge1 & EPP_read & EPP_data_strobe & (addr_reg[4:2] == 3'd3);
    assign led = do_tristate ? 1'BZ : (real_up[0] ^ real_down[0]);
    assign nConfig = epp_nReset; // 1'b1;
    endmodule

    // This is a component of pluto_servo, a PWM servo driver and quadrature
    // counter for emc2
    // Copyright 2006 Jeff Epler <jepler@unpythonic.net>
    //
    // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1507 USA

    module quad(clk, A, B, Z, zr, out);
    parameter W=14;
    input clk, A, B, Z, zr;
    reg [(W-1):0] c, i; reg zl;
    output [2*W:0] out = { zl, i, c };
    // reg [(W-1):0] c, i; reg zl;

    reg [2:0] Ad, Bd;
    reg [2:0] Zc;
    always @(posedge clk) Ad <= {Ad[1:0], A};
    always @(posedge clk) Bd <= {Bd[1:0], B};

    wire good_one = &Zc;
    wire good_zero = ~|Zc;
    reg last_good;

    wire index_pulse = good_one && ! last_good;

    wire count_enable = Ad[1] ^ Ad[2] ^ Bd[1] ^ Bd[2];
    wire count_direction = Ad[1] ^ Bd[2];

    always @(posedge clk)
    begin
    if(Z && !good_one) Zc <= Zc + 2'b1;
    else if(!good_zero) Zc <= Zc - 2'b1;
    if(good_one) last_good <= 1;
    else if(good_zero) last_good <= 0;
    if(count_enable)
    begin
    if(count_direction) c <= c + 1'd1;
    else c <= c - 1'd1;
    end
    if(index_pulse) begin
    i <= c;
    zl <= 1;
    end else if(zr) begin
    zl <= 0;
    end
    end
    endmodule

    // This is a component of pluto_servo, a PWM servo driver and quadrature
    // counter for emc2
    // Copyright 2006 Jeff Epler <jepler@unpythonic.net>
    //
    // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

    module wdt(clk, ena, cnt, out);
    input clk, ena, cnt;
    output out;
    reg [6:0] timer;
    wire timer_top = (timer == 7'd127);
    reg internal_enable;
    wire out = internal_enable && timer_top;

    always @(posedge clk) begin
    if(ena) begin
    internal_enable <= 1;
    timer <= 0;
    end else if(cnt && !timer_top) timer <= timer + 7'd1;
    end
    endmodule
    [/URL]
    Последний раз редактировалось Vitaly; 29.04.2010 в 18:10.

  2.  
  3. #2

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    // This program is free software; you can redistribute it and/or modify
    Вот исходник для шаговиков.
    Если Морис (автор драйвера на ксайлинксе) разрешит, то подключаем его модуль сюда и имеем универсальный контроллер на все случаи жизни и на любое количество координат (до 8 в случае подключения к ЛПТ порту).
    И на любое сочетание серво/шаговики, причем на одном станке.
    Плюс куча входов/выходов для управления электроавтоматикой.
    Дальше идут только связки типа IR21XX или L6386 или по фантазии, и силовые ключи
    либо в парах (верх/низ) либо набором верх/низ и, по желанию(необходимости), опторазвязка входов-выходов.

    // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

    module main(clk, led, nConfig, epp_nReset, pport_data, nWrite, nWait, nDataStr,
    nAddrStr, dout, din, step, dir);
    parameter W=10;
    parameter F=11;
    parameter T=4;
    input clk;
    output led, nConfig;
    inout [7:0] pport_data;
    input nWrite;
    output nWait;
    input nDataStr, nAddrStr, epp_nReset;

    input [15:0] din;

    reg Spolarity;
    reg[13:0] real_dout; output [13:0] dout = do_tristate ? 14'bZ : real_dout;
    wire[3:0] real_step; output [3:0] step = do_tristate ? 4'bZ : real_step ^ {4{Spolarity}};
    wire[3:0] real_dir; output [3:0] dir = do_tristate ? 4'bZ : real_dir;

    wire [W+F-1:0] pos0, pos1, pos2, pos3;
    reg [F:0] vel0, vel1, vel2, vel3;
    reg [T-1:0] dirtime, steptime;
    reg [1:0] tap;

    reg [10:0] div2048;
    wire stepcnt = ~|(div2048[5:0]);

    always @(posedge clk) begin
    div2048 <= div2048 + 1'd1;
    end

    wire do_enable_wdt, do_tristate;
    wdt w(clk, do_enable_wdt, &div2048, do_tristate);

    stepgen #(W,F,T) s0(clk, stepcnt, pos0, vel0, dirtime, steptime, real_step[0], real_dir[0], tap);
    stepgen #(W,F,T) s1(clk, stepcnt, pos1, vel1, dirtime, steptime, real_step[1], real_dir[1], tap);
    stepgen #(W,F,T) s2(clk, stepcnt, pos2, vel2, dirtime, steptime, real_step[2], real_dir[2], tap);
    stepgen #(W,F,T) s3(clk, stepcnt, pos3, vel3, dirtime, steptime, real_step[3], real_dir[3], tap);

    // EPP stuff
    wire EPP_write = ~nWrite;
    wire EPP_read = nWrite;
    wire EPP_addr_strobe = ~nAddrStr;
    wire EPP_data_strobe = ~nDataStr;
    wire EPP_strobe = EPP_data_strobe | EPP_addr_strobe;

    wire EPP_wait; assign nWait = ~EPP_wait;
    wire [7:0] EPP_datain = pport_data;
    wire [7:0] EPP_dataout; assign pport_data = EPP_dataout;

    reg [4:0] EPP_strobe_reg;
    always @(posedge clk) EPP_strobe_reg <= {EPP_strobe_reg[3:0], EPP_strobe};
    wire EPP_strobe_edge1 = (EPP_strobe_reg[2:1]==2'b01);

    // reg led;

    assign EPP_wait = EPP_strobe_reg[4];
    wire[15:0] EPP_dataword = {EPP_datain, lowbyte};
    reg[4:0] addr_reg;
    reg[7:0] lowbyte;

    always @(posedge clk)
    if(EPP_strobe_edge1 & EPP_write & EPP_addr_strobe) begin
    addr_reg <= EPP_datain[4:0];
    end
    else if(EPP_strobe_edge1 & !EPP_addr_strobe) addr_reg <= addr_reg + 4'd1;
    always @(posedge clk) begin
    if(EPP_strobe_edge1 & EPP_write & EPP_data_strobe) begin
    if(addr_reg[3:0] == 4'd1) vel0 <= EPP_dataword[F:0];
    else if(addr_reg[3:0] == 4'd3) vel1 <= EPP_dataword[F:0];
    else if(addr_reg[3:0] == 4'd5) vel2 <= EPP_dataword[F:0];
    else if(addr_reg[3:0] == 4'd7) vel3 <= EPP_dataword[F:0];
    else if(addr_reg[3:0] == 4'd9) begin
    real_dout <= { EPP_datain[5:0], lowbyte };
    end
    else if(addr_reg[3:0] == 4'd11) begin
    tap <= lowbyte[7:6];
    steptime <= lowbyte[T-1:0];

    Spolarity <= EPP_datain[7];
    // EPP_datain[6] is do_enable_wdt
    dirtime <= EPP_datain[T-1:0];
    end
    else lowbyte <= EPP_datain;
    end
    end

    reg [31:0] data_buf;

    always @(posedge clk) begin
    if(EPP_strobe_edge1 & EPP_read && addr_reg[1:0] == 2'd0) begin
    if(addr_reg[4:2] == 3'd0) data_buf <= pos0;
    else if(addr_reg[4:2] == 3'd1) data_buf <= pos1;
    else if(addr_reg[4:2] == 3'd2) data_buf <= pos2;
    else if(addr_reg[4:2] == 3'd3) data_buf <= pos3;
    else if(addr_reg[4:2] == 3'd4)
    data_buf <= din;
    end
    end

    // the addr_reg test looks funny because it is auto-incremented in an always
    // block so "1" reads the low byte, "2 and "3" read middle bytes, and "0"
    // reads the high byte I have a feeling that I'm doing this in the wrong way.
    wire [7:0] data_reg = addr_reg[1:0] == 2'd1 ? data_buf[7:0] :
    (addr_reg[1:0] == 2'd2 ? data_buf[15:8] :
    (addr_reg[1:0] == 2'd3 ? data_buf[23:16] :
    data_buf[31:24]));

    wire [7:0] EPP_data_mux = data_reg;
    assign EPP_dataout = (EPP_read & EPP_wait) ? EPP_data_mux : 8'hZZ;
    // assign do_enable_wdt = EPP_strobe_edge1 & EPP_write & EPP_data_strobe & (addr_reg[3:0] == 4'd9) & EPP_datain[6];
    // assign led = do_tristate ? 1'BZ : (real_step[0] ^ real_dir[0]);
    assign led = do_tristate ? 1'bZ : (real_step[0] ^ real_dir[0]);
    assign nConfig = epp_nReset; // 1'b1;
    assign do_enable_wdt = EPP_strobe_edge1 & EPP_write & EPP_data_strobe & (addr_reg[3:0] == 4'd9) & EPP_datain[6];
    endmodule

    // This is a component of pluto_step, a hardware step waveform generator
    // Copyright 2007 Jeff Epler <jepler@unpythonic.net>
    //
    // 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

    module stepgen(clk, enable, position, velocity, dirtime, steptime, step, dir, tap);
    `define STATE_STEP 0
    `define STATE_DIRCHANGE 1
    `define STATE_DIRWAIT 2

    parameter W=12;
    parameter F=10;
    parameter T=5;

    input clk, enable;
    output [W+F-1:0] position; reg [W+F-1:0] position;
    input [F:0] velocity;
    input [T-1:0] dirtime, steptime;
    input [1:0] tap;

    output step, dir;
    reg step, dir;

    reg [T-1:0] timer;
    reg [1:0] state;
    reg ones;
    wire dbit = velocity[F];
    wire pbit = (tap == 0 ? position[F]
    : (tap == 1 ? position[F+1]
    : (tap == 2 ? position[F+2]
    : position[F+3])));

    wire [W+F-1:0] xvelocity = {{W{velocity[F]}}, {1{velocity[F-1:0]}}};

    `ifdef TESTING
    // for testing:
    initial position = 1'b0;
    initial state = `STATE_STEP;
    initial timer = 0;
    initial dir = 0;
    initial ones = 0;
    `endif

    always @(posedge clk) begin
    if(enable) begin
    // $display("state=%d timer=%d position=%h velocity=%h dir=%d dbit=%d pbit=%d ones=%d", state, timer, position, xvelocity, dir, dbit, pbit, ones);
    if((dir != dbit) && (pbit == ones)) begin
    if(state == `STATE_DIRCHANGE) begin
    if(timer == 0) begin
    dir <= dbit;
    timer <= dirtime;
    state <= `STATE_DIRWAIT;
    end else begin
    timer <= timer - 1'd1;
    end
    end else begin
    if(timer == 0) begin
    step <= 0;
    timer <= dirtime;
    state <= `STATE_DIRCHANGE;
    end else begin
    timer <= timer - 1'd1;
    end
    end
    end else if(state == `STATE_DIRWAIT) begin
    if(timer == 0) begin
    state <= `STATE_STEP;
    end else begin
    timer <= timer - 1'd1;
    end
    end else begin
    if(timer == 0) begin
    if(pbit != ones) begin
    ones <= pbit;
    step <= 1'd1;
    timer <= steptime;
    end else begin
    step <= 0;
    end
    end else begin
    timer <= timer - 1'd1;
    end
    if(dir == dbit)
    position <= position + xvelocity;
    end
    end
    end

    endmodule

  4. #3

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    После беглого просмотра кода что-то подсказывает мне что обычная плата опторазвязки делает то-же самое и с меньшим напрягом.

    Вы можете на пальцах объяснить для чего это надо? Ведь это не драйвер шагового двигателя, эта штука стоит между LPT портом и платой драйвера ШД.

  5. #4

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Первое и самое главное!
    Это и есть полноценные драйвера как шаговых двигателей, так и сервоприводов.
    Когда я писал о подключении модуля Мориса, то имел ввиду не железо, а программу на Верилоге.
    Второе
    Для полноценной работы системы управления приводом необходимо получать не точку(степ/дир) а вектор, что эта плата и делает, обрабатывая полученный с компа вектор с параметрами начало/конец, скорость ...
    Третье
    В данном случае ЛРТ порт, работающий а ЕРР режиме, выполняет функции шины обмена типа ISA, PCI, USB ..., только с меньшей скоростью и разрядностью, но в данном случае этого достаточно. Не зря ведь все серьёзные платы используют эти интерфейсы, однако на коленке собрать такие платы либо сложно в изготовлении, либо связано с задачей написания драйверов под определенную операционку.
    И потом, согласитесь, что самое главное это управляющая программа, в которую множество людей (низкий им поклон) вложило столько сил и времени.
    Я начинал модернизировать станки с написания эмулятора процессора PDP11 (частный случай Электроника 60, МС1201,02) для станков советского производства с разворованными стойками управления. Однако мы уперлись в тупик, связанный с невозможностью модернизации штатного программного обеспечения этих станков.
    А это, согласитесь, проблема неразрешимая.
    Поэтому мы сделали ставку на открытое ПО под ОС Linux - EMC2.
    Лично я благодарен людям создавшим его и отдавшим всем в свободное пользование все, включая исходники.
    На этой базе, сейчас можно создавать любые встроенные контроллеры для управления, аппаратно состоящие из набора микросхем, насчитывающих не более десяти наименований.
    И этим постом я хочу привлечь Ваше внимание, и предложить идти в этом направлении сообща. На мой взгляд этот путь самый малозатратный и универсальный.
    Не малую роль в этом деле играют авторские права, стоимость лицензий на ПО.
    Я к этому отношусь очень ответственно и уважительно.
    Вот собственно и все, что хотел сказать.
    Если не ответил на Ваши вопросы, эадавайте конкретно, постараюсь ответить.
    С Уважением.

  6.  
  7. #5

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от Impartial Посмотреть сообщение
    Второе
    Для полноценной работы системы управления приводом необходимо получать не точку(степ/дир) а вектор, что эта плата и делает, обрабатывая полученный с компа вектор с параметрами начало/конец, скорость ...
    А еще нужен разгон/торможение...
    И если дело дошло до передачи векторов, то, выходит, этот код в ПЛИС заменяет собой интерпретатор G-кода в компьютере? Я правильно понял?
    За это уже брались многократно, например был проект на французском, реализован, правда, на PIC, с ЖК индикатором и т.д. Сошлись на том, что самый дешевый и доступный интерпретатор G-кода - компьютер. И я с этим согласен, поскольку отладить интерпретатор - дело не одного дня и не одного человека.
    Третье
    ...Я начинал модернизировать станки с написания эмулятора процессора PDP11 (частный случай Электроника 60, МС1201,02) для станков советского производства с разворованными стойками управления. Однако мы уперлись в тупик, связанный с невозможностью модернизации штатного программного обеспечения этих станков.
    А это, согласитесь, проблема неразрешимая.
    Вы просто пошли по ошибочному пути: нужно было просто модернизировать аппаратную часть так, чтобы она понимала DIR/STEP и использовать любой готовый управляющий софт. Это гораздо проще и быстрее, чем написать эмулятор PDP11. Или Вы не выбираете легких дорог?
    Поэтому мы сделали ставку на открытое ПО под ОС Linux - EMC2.
    Лично я благодарен людям создавшим его и отдавшим всем в свободное пользование все, включая исходники.
    На этой базе, сейчас можно создавать любые встроенные контроллеры для управления, аппаратно состоящие из набора микросхем, насчитывающих не более десяти наименований.
    И этим постом я хочу привлечь Ваше внимание, и предложить идти в этом направлении сообща. На мой взгляд этот путь самый малозатратный и универсальный...
    Зачем тратить кучу времени на разработку специализированного контроллера управления? Это же нужно взять как минимум ARM9, адаптировать к нему Linux, добиться стабильной работы...
    Вместо этого берется готовый компьютер mini-ITX (или промышленный комп, по вкусу) на который ставится проверенная легкая конфигурация Linux, EMC-2 и все работает (см. работу в этом направлении на cnczone.ru). Вот это и есть малозатратный и универсальный путь - не изобретать лишних сущностей.
    А Ваш специализированный контроллер не скоро достигнет аналогичного уровня работоспособности и по цене будет дороже.

    Есть, правда, одна для ниша специализированного контроллера - скоростная работа - но это уже далеко выходит за рамки хобби, поэтому толк от потраченного времени будет сомнительным.
    Ну не зря ведь такое широкое распространение получил Мач? Значит его возможностей достаточно большинству пользователей.

  8. #6

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Ну по порядку.
    Цитата Сообщение от ATLab Посмотреть сообщение
    А еще нужен разгон/торможение...
    И если дело дошло до передачи векторов, то, выходит, этот код в ПЛИС заменяет собой интерпретатор G-кода в компьютере? Я правильно понял?
    Не правильно! Интерпретатор G кода остался в компе.
    Цитата Сообщение от ATLab Посмотреть сообщение
    Вы просто пошли по ошибочному пути: нужно было просто модернизировать аппаратную часть так, чтобы она понимала DIR/STEP и использовать любой готовый управляющий софт. Это гораздо проще и быстрее, чем написать эмулятор PDP11. Или Вы не выбираете легких дорог?
    Если бы все было так просто!
    Сервоприводом Вы тоже предлагаете управлять по DIR/STEP?
    А электоавтоматикой станка чем управлять?
    Цитата Сообщение от ATLab Посмотреть сообщение
    Зачем тратить кучу времени на разработку специализированного контроллера управления? Это же нужно взять как минимум ARM9, адаптировать к нему Linux, добиться стабильной работы...
    Вместо этого берется готовый компьютер mini-ITX (или промышленный комп, по вкусу) на который ставится проверенная легкая конфигурация Linux, EMC-2 и все работает (см. работу в этом направлении на cnczone.ru). Вот это и есть малозатратный и универсальный путь - не изобретать лишних сущностей.
    А Ваш специализированный контроллер не скоро достигнет аналогичного уровня работоспособности и по цене будет дороже.
    Вот по этому пути и идем.
    Только не надо ничего изобретать уже все изобретено и адаптировано.
    И стоимость контроллера получается (аппаратно) не сравнимая даже с самыми дешевыми РС. И работают там те-же Linux и EMC2.
    Цитата Сообщение от ATLab Посмотреть сообщение
    Ну не зря ведь такое широкое распространение получил Мач? Значит его возможностей достаточно большинству пользователей.
    Не возражаю!
    Но посчитайте затраты на ПО! Они ведь сравнимы по стоимости железу!
    Я уже не говорю о CAD/CAM системах.
    Лично меня не устраивает позиция, в которую меня ставит нахватавшийся азов общения с компом в плане проверки лицензионности ПО, работник правоохранительных органов. И он по большому счету прав!
    И последнее.
    Вы конечно же правы что специализированный контроллер выходит за рамки хоббийного применения.
    Но я же не предлагаю здесь это обсуждать, а тем более разрабатывать.
    Я предлагаю решение проблемы драйвера привода, что и является темой этого раздела.
    Последний раз редактировалось Impartial; 02.05.2010 в 00:01.

  9. #7

    Регистрация
    22.03.2006
    Адрес
    Железногорск
    Возраст
    61
    Сообщений
    827
    Цитата Сообщение от Impartial Посмотреть сообщение
    Ну по порядку.
    Не правильно! Интерпретатор G кода остался в компе.
    Тогда поясните, pls, назначение этого устройства, я пока не понимаю зачем оно нужно: интерпретатор G-кода - компьютер, драйверы есть готовые - DIR/STEP (в том числе и для серво). Зачем еще что-то?
    Но посчитайте затраты на ПО! Они ведь сравнимы по стоимости железу!
    Я уже не говорю о CAD/CAM системах.
    Лично меня не устраивает позиция, в которую меня ставит нахватавшийся азов общения с компом в плане проверки лицензионности ПО, работник правоохранительных органов
    Домой работник правоохранительных органов в ближайшее время вряд ли придет, а для работы это не те затраты (на ПО), на которых стоит экономить.
    CAD/CAM, конечно, более заметные расходы, но тоже подъемны, пусть и не сразу, если работа - это работа, а не хобби на работе.
    Я предлагаю решение проблемы драйвера привода, что и является темой этого раздела.
    Да нет такой проблемы: кому нужен станок для работы - покупает готовые драйверы, кто хочет поковыряться - паяет сам, схем уже много.
    Платка Pluto - ни то, ни се, один из вариантов отладочных плат на ПЛИС. То, что ВЫ написали, imho даже не стартовая точка для обсуждения - нечего пока обсуждать, в отличие от драйвера Марисса 5 Microstep Drive.

    P.S. Вы уж как-нибудь попроще объясняйте - на пальцах - и без загадок и умолчаний. А то, может оно мне уже давно надо, а я об этом не догадываюсь
    Последний раз редактировалось ATLab; 02.05.2010 в 11:55.

  10.  
  11. #8

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Да какие загадки, когда уже исходники выше?
    Я же все и так на пальцах объяснил.
    Чтобы исчезла загадочность и недомолвки ну ознакомьтесь с описанием EMC2 и HAL!
    Не сделаете Вы подобный контроллер ни на чем более просто!
    Вы хотя бы вникните в суть вопроса!

  12. #9

    Регистрация
    04.05.2010
    Адрес
    Ивано-Франковск, Украина
    Возраст
    57
    Сообщений
    18
    Здравствуйте знатоки Pluto-p платы !
    Тема использования платы для меня актуальна . Я купил микросхему ЕР1К.... от Альтеры , но сделать плату под неё не смог по утюжной технологии .
    Вопросы :
    1. У кого есть готовая Pluto-p плата , или хотя бы хорошая разводка с принципиальной схемой ?
    2 . Аналог платы Pluto-p я видел на сайте www.pico-systems.com/univpwm.html , может кто-то сможет повторить , или сделать аналог на базе EP1K30TC144 по предложеной програме .
    3 . Можно ли сделать аналог платы для использования с програмным пакетом MACH3 ? Это было-бы очень интересно , так как MACH3 очень гибкий пакет , но ему не хватает расширения каналов ввода-вывода и замкнутой обратной связи по положению .

  13. #10

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Раз пытались сделать плату, значит схема и печатка уже есть?
    Такое-же, ( по идеологии) как указано в ссылке и делаю.
    У МАСН3, по моему, нет языка описания аппаратуры, аналогичного HAL в EMC.

  14. #11

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Цитата Сообщение от vmarkiv Посмотреть сообщение
    но сделать плату под неё не смог по утюжной технологии .
    Хотите хорошую плату, забудьте про утюжную технологию. Купите текстолит с уже нанесенным фоторезистом, или баллончик с фоторезистом или пленку с фоторезистом (который потом через ламинатор переносится на текстолит). Вот с фоторезистом плата получится.

  15. #12

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    На Украине еденичные платы делают не так.
    1 отправляешь файл в Херсон
    2 получаешь счет, оплачиваешь в ближайшем банке (у меня это ~10-15$)
    3 через неделю получаешь плату с металлизацией и "зеленкой"

  16. #13

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    А ссылку можно?
    В Александрии только подготовка производства около 500гр.

  17. #14

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    В каждом номере Chip-News его визитка pcb{dog}cdmaua.com tel. 0552-444821

  18. #15

    Регистрация
    04.05.2010
    Адрес
    Ивано-Франковск, Украина
    Возраст
    57
    Сообщений
    18
    Ребята !
    Тема изготовления ПП методами утюга , сеткографии , балончика POSITIV 20 , стеклотекстолита с фотослоем , изготовления платв Китае или Венгрии через МОЩНЫЕ ФИРМЫ пройдена давноооооо , меня больше интересуют мнения о возможности развития контролера движения ( использования заготовки , называемой PLUTO-P) под ПЛИС Альтеры для среды Линукс или Виндовс . Давайте вернемся к плутоватым платам .
    Для меня актуальность темы состоит в том , что при разработке сервоприводов по разных вольных проэктах есть проблема , что микропроцессоры Меги , Тини даже ДСПИК не могут ОТЛИЧНО обрабатывать сигналы от энкодеров ( например , при непосредственном соединении вал в вал двигателя на 4000 об\мин и энкодера 2500 имп , импульсы теряются ) . Для выхода из ситуации приходится ставить на обслуживании энкодеров логику типа счетчика 555ИЕ7 - но это уже решения из тысячелетия моей молодости . ПЛИСы позволяют делать это легко и просто , а в сочитании с возможностями функций HAL в Линукс EMC , это , наверное , просто . Авторы программ для EP1K10 сумели в одну миркосхему засунуть и сервоконтролеры и электроавтоматику --- это прекрасно !!! Так давайте же дадим проэкту достойное развитие .Спасибо за внимание .

  19. #16

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Конечно, никакой МК без аппаратного квадратурного энкодера не сможет отработать сигнал с инкрементного оптического датчика без потерь. А если необходимо подключить резольвер то надо еще больше городить на рассыпухе.
    На FPGA это все реализуется довольно просто.

  20. #17

    Регистрация
    08.07.2005
    Адрес
    Москва
    Возраст
    53
    Сообщений
    415
    Цитата Сообщение от vmarkiv Посмотреть сообщение
    Ребята !
    ... меня больше интересуют мнения о возможности развития контролера движения ( использования заготовки , называемой PLUTO-P) под ПЛИС Альтеры для среды Линукс или Виндовс . Давайте вернемся к плутоватым платам .
    Impartial -
    Вы первый тут, кто вменяемо и толково написал об этом простом и интересном устройстве .

    Для меня актуальность темы состоит в том , что при разработке сервоприводов по разных вольных проэктах есть проблема , что микропроцессоры Меги , Тини даже ДСПИК не могут ОТЛИЧНО обрабатывать сигналы от энкодеров ( например , при непосредственном соединении вал в вал двигателя на 4000 об\мин и энкодера 2500 имп , импульсы теряются ) . Для выхода из ситуации приходится ставить на обслуживании энкодеров логику типа счетчика 555ИЕ7 - но это уже решения из тысячелетия моей молодости . ПЛИСы позволяют делать это легко и просто , а в сочитании с возможностями функций HAL в Линукс EMC , это , наверное , просто . Авторы программ для EP1K10 сумели в одну миркосхему засунуть и сервоконтролеры и электроавтоматику --- это прекрасно !!! Так давайте же дадим проэкту достойное развитие .Спасибо за внимание .
    Скажем честно - аккуратно реализованный буфер на триггере Шмидта - и любая АВРка прекрасно считает сигналы с енкодеров.

    Дело в другом, и вы это прекрасно видите - на одном кристалле мы делаем многоканальный и универсальный драйвер + легко расширяемая логика обработки сигналов для автоматики. И все это через один медленный LPT. И ри этом никаких ограничений на частоту степа (кто пробовал микрошаг 10 и больше - тот понимает, о чем речь).

    Я уже давно это использую, конкретно EP2C8, некоторое кол-во плат рисовал в пикаде и заказывал в тепро.

    Что крайне радует - и вы тоже это заметили - позволяет использовать промышленные приводы, без степ-дира.

    Вообще скажу - не парьтесь, сделайте и используйте. Работает изумительно, стоит копейки - что еще нужно? А другие со скептисом на уровне непонимания принципа работы - пусть используют что принято и всем известно.

    Удачи!

  21. #18

    Регистрация
    04.05.2010
    Адрес
    Ивано-Франковск, Украина
    Возраст
    57
    Сообщений
    18
    Здравствуйте знатоки Плуто плат ! Спасибо Maxvovk за аккуратный комментарий по теме . Из высказанного видно , что тема переноса программного с ядра ЕР1К10 на ядро Циклон успешно пройдена . Так что всем любителям можно дерзать . Дальше по теме – для монтажа ЕР1К10 можно использовать платы-переходники TQFP32, QFN32, TQFP44, QFN44, TQFP64, LQFP100 и LQFP144 http://emkit.com.ua/products/adapter_boards_a2/ http://www.kosmodrom.com.ua/table.php?name=emkit&page=0 , я себе собираюсь купить несколько . У меня вопрос : Можно ли использовать несколько плат Плуто-П при работе с Linux EMC - сконфигурировать одну плату на LPT1 в качестве сервоконтролера ( например на 6 осей ) , вторую на LPT2 в качестве контроллера электроавтоматики ( 20 -30 входов \выходов ) и т.д.? С уважением Василий Маркив

  22. #19

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Cконфигурировать можно без проблем, только зачем?
    Нужно сразу отказаться от ЕР1К10 и использовать более емкие кристаллы в 144 корпусе. Например в ЕР1К30ТС144-3 можно использовать 104 вывода.
    Правда при этом возникают проблемы с использованием штатного загрузчика, но это легко обходится, если использовать аппаратную загрузку микрокода. И это даже более приемлемый вариант, так как исключает случайный перевод FPGA в режим загрузки микрокода, в случае непредвиденного использования ЛПТ порта операционной системой.
    Простой расчет показывает
    Обслуживание LPT порта -13 выводов.
    6 осей сервопривода/шаговый биполярный - управление силовыми ключами - 24 вывода.
    В случае использования сервопривода + 18 выводов для енкодеров. Остается 49 выводов для управления электроавтоматикой.
    При периоде сервоцикла 1мс и максимальной скоростью LPT порта 0.8-1 мб/сек машина
    типа DURON 1000 успевает обработать все 6 осей в самом тяжелом варианте - сервопривода.

  23. #20

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    maxvovk
    Я уже давно это использую, конкретно EP2C8, некоторое кол-во плат рисовал в пикаде и заказывал в тепро.
    Спасибо за моральную поддержку.
    Скажите, какой вывод LPT порта Вы используете для перевода FPGA в режим загрузки микрокода?

  24. #21

    Регистрация
    30.01.2008
    Адрес
    Славянск, Россия
    Возраст
    47
    Сообщений
    16
    Цитата Сообщение от maxvovk Посмотреть сообщение
    Я уже давно это использую, конкретно EP2C8, некоторое кол-во плат рисовал в пикаде и заказывал в тепро.
    Если не секрет, что вы использовали для сопряжения по уровням LPT и Cyclone?

  25. #22

    Регистрация
    04.05.2010
    Адрес
    Ивано-Франковск, Украина
    Возраст
    57
    Сообщений
    18
    Здравствуйте !
    Я согласен с Impartial , что использование ЕР1К10 уже дело прошлых лет , все сразу нужно делать на хорошем кристалле . Maxvovk рекомендовал ПЛИС EP2C8 , для нее есть макетка LDM-EP2C8-T144 в www.ldm-systems.ru или www.terraelectronica.ru , а на Космодроме в Харькове ее цена 1132 грн , там также есть описание выводов и т.д. На сайте www.xDevs.com хорошие примеры по использованию Циклонов http://forum.xdevs.com/viewtopic.php?f=16&t=140 .
    Я согласен с Impartial , лучше микрокод ( программу ПЛИС ) прошить прямо в ПЛИС и вывести сигналы готовности программного обеспечения Linux EMC и готовности электроавтоматики на отдельный вход ПЛИС , это позволит избежать ложных срабатываний при включении системы . Для МАСН3 я ставлю отдельную схему автоматики , которая запрещает работу сервоприводов при нештатных ситуациях , так как драйвера параллельного порта часто обращаются к порту для поиска ключа защиты , тестирования .
    Из темпа развития обсуждаемой темы я вижу ( и надеюсь ) , что через месяц мы уже будем обсуждать практическую часть проэкта .
    С уважением
    Василий Маркив

  26. #23

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Цитата Сообщение от ATLab Посмотреть сообщение
    И если дело дошло до передачи векторов, то, выходит, этот код в ПЛИС заменяет собой интерпретатор G-кода в компьютере? Я правильно понял?
    За это уже брались многократно, например был проект на французском, реализован, правда, на PIC, с ЖК индикатором и т.д. Сошлись на том, что самый дешевый и доступный интерпретатор G-кода - компьютер. И я с этим согласен, поскольку отладить интерпретатор - дело не одного дня и не одного человека.
    Кстати, вот исходник интерпретатора G кода из ЕМС2.
    Прекрасно компилируется и работает на платформах (ядрах) ARM и NIOS2 в Циклоне III.

    Цитата Сообщение от vmarkiv Посмотреть сообщение
    1. У кого есть готовая Pluto-p плата , или хотя бы хорошая разводка с принципиальной схемой ?
    Вот разводка и структура регистров ЕР1К10 платы pluto-p.
    Вложения
    Последний раз редактировалось Impartial; 21.05.2010 в 01:33.

  27. #24

    Регистрация
    08.07.2005
    Адрес
    Москва
    Возраст
    53
    Сообщений
    415
    Цитата Сообщение от vmarkiv Посмотреть сообщение
    Здравствуйте знатоки Плуто плат ! Спасибо Maxvovk за аккуратный комментарий по теме . Из высказанного видно , что тема переноса программного с ядра ЕР1К10 на ядро Циклон успешно пройдена .
    Нет Никакого переноса. Выбираете в квартусе циклон и все компилится. Назначить нужные выводы, и все.

    У меня вопрос : Можно ли использовать несколько плат Плуто-П при работе с Linux EMC - сконфигурировать одну плату на LPT1 в качестве сервоконтролера ( например на 6 осей ) , вторую на LPT2 в качестве контроллера электроавтоматики ( 20 -30 входов \выходов ) и т.д.? С уважением Василий Маркив
    Нельзя. Только одна плата на ЕРР поддерживается.

    Спасибо за моральную поддержку.
    Скажите, какой вывод LPT порта Вы используете для перевода FPGA в режим загрузки микрокода?
    У меня код грузится с флешки. При попытке сделать как в плуто у меня сгорели несколько ключей, пришлось делать по-своему.

    Если не секрет, что вы использовали для сопряжения по уровням LPT и Cyclone?
    Не секрет. Резисторы.

  28. #25

    Регистрация
    14.03.2009
    Адрес
    Belize, Belmopan
    Возраст
    61
    Сообщений
    71
    коль пошла такая пьянка..
    Может кто знает, как катушки в spherosyn'e устроены (линейный энкодер от newall.com , тот что с шариками от подшипников в качестве измерительных попугаев )
    Сам патент-то я видел, если че..

  29. #26

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Цитата Сообщение от pomid Посмотреть сообщение
    Может кто знает, как катушки в spherosyn'e устроены (линейный энкодер от newall.com , тот что с шариками от подшипников в качестве измерительных попугаев )
    Сам патент-то я видел, если че..
    Maximum Traverse Rate 2MHz (2m/s at 1µm resolution)
    Круто!
    А где можно глянуть на патент?

  30. #27

    Регистрация
    04.05.2010
    Адрес
    Ивано-Франковск, Украина
    Возраст
    57
    Сообщений
    18
    US4100485 . us4103222 . US6909280
    При внимательном рассмотрении можно перевести аппаратную часть на AD2S1200/1210 from Analog Device

  31. #28

    Регистрация
    14.03.2009
    Адрес
    Belize, Belmopan
    Возраст
    61
    Сообщений
    71
    мой любимый патентный сайт
    http://www.freepatentsonline.com/6909280.pdf
    а российские/советские патенты если знать номера можно скачивать на
    http://ep.espacenet.com

  32. #29

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Цитата Сообщение от vmarkiv Посмотреть сообщение
    При внимательном рассмотрении можно перевести аппаратную часть на AD2S1200/1210 from Analog Device
    Интересная штука!
    Можно конечно использовать и резольверные преобразователи, но проще сделать DDS синтезатор и прицепить два ноль детектора, а фазу вычислять измеряя количество импульсов заполнения между нолем синтезатора и выходами ноль детекторов. На Atmel 90PWM3 наверное должно получиться довольно просто.

  33. #30

    Регистрация
    14.03.2009
    Адрес
    Belize, Belmopan
    Возраст
    61
    Сообщений
    71
    что про катушки скажете, как делать на коленках?

  34. #31

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    По моему так нарезать каркас секциями на расстоянии 1/4 диаметра шарика с точностью какая получится а потом программно корректировать по какой нибудь метрологической методике.
    Неясно только насколько линейной получается характеристика преобразования.

  35. #32

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Возвращаясь в тему.
    Предлагаю схему для критики, исправлений, добавлений ...
    Вложения

  36. #33

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    Цитата Сообщение от Impartial Посмотреть сообщение
    Предлагаю схему для критики, исправлений, добавлений ...
    Для критики всегда пожалуйста. Вот первые вопросы:

    А в какой программе ее смотреть?
    Эта программа установлена на большинстве пользовательских компьютеров?
    А pdf файл тяжело сделать?

  37. #34

    Регистрация
    27.07.2009
    Адрес
    Червоноград, Украина
    Возраст
    41
    Сообщений
    166
    если не ошибаюсь, то это файл протеуса
    а что акробатРидер уже умеет симулировать работу схем??

  38. #35

    Регистрация
    26.01.2010
    Адрес
    Челябинск
    Возраст
    51
    Сообщений
    5
    Цитата Сообщение от dizzyy Посмотреть сообщение
    если не ошибаюсь, то это файл протеуса
    Это файл ORCAD
    Вот PDF
    А сама схема похожа вот на эту
    http://flexlab.ru/proj_pldlab.shtml
    Вложения
    Последний раз редактировалось Fox69; 23.05.2010 в 22:08.

  39. #36

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Извиняюсь!
    Это файл ORCAD CAPTURE.
    Нужно ведь чтобы можно было в конце сделать трассировку.
    В PDF формате как же его корректировать?
    Можно его импортировать в ALTIUM DESIGNER.

  40. #37

    Регистрация
    03.04.2006
    Адрес
    Торонто
    Возраст
    53
    Сообщений
    676
    PDF файл нужен не для трассировки а для "критики, исправлений, добавлений ..." которые совсем необязательно сразу вносить в проект и тут-же его выкладывать для дальнейшей критики. Мусор получится в итоге. А вот проронить пару слов, что нравится а что нет, будет полезно. И автору проще изменять только то что нужно, а не то что советуют.

    А что за токи потребляются этой платой что используются линейные стабилизаторы напряжения в корпусе SOT-223? Может есть смысл поставить что-то из серии LP2985 в корпусе SOT-23-5. Они в два раза меньше по размерам. А последовательно перед стабилизатором на 2.5В еще воткнул-бы светодиод. Какая-никакая индикация напряжения, и работает как предохранитель.

    У JTAG разьема реально работают только 6 ног. Не думаю что у всех покупные программаторы. Может 4 ноги разьема выкинуть, высвобождаем место на плате и оставляем простор для трассировки.

    Прошивка для ATiny2313 откуда берется? И насколько этот контроллер вместе с COM портом необходимы на плате? Я еще не до конца понимаю назначение этого устройства в целом.

    Цитата Сообщение от dizzyy Посмотреть сообщение
    если не ошибаюсь, то это файл протеуса
    а что акробатРидер уже умеет симулировать работу схем??
    Ну перетащу я проект в Altium Designer, кто-то перегонит в Proteus, потом комуто нравится Sprint Layout ну и так далее. Что потом обсуждать будете? Автор должен быть один как и среда разработка. Потом готовый проект перетаскивайте куда нравится.
    Потому и задал вопрос про pdf. Оставим редактирование на совести автора и поддержим его "советами и рекомендациями".
    Последний раз редактировалось boldive; 24.05.2010 в 19:53.

  41. #38

    Регистрация
    26.01.2010
    Адрес
    Челябинск
    Возраст
    51
    Сообщений
    5
    Цитата Сообщение от boldive Посмотреть сообщение
    Прошивка для ATiny2313 откуда берется? И насколько этот контроллер вместе с COM портом необходимы на плате?
    Ну прошивка для ATiny2313 примерно так
    http://allfpga.com/fpga-design/fpga-...ernal-cpu.html

    Цитата Сообщение от boldive Посмотреть сообщение
    Я еще не до конца понимаю назначение этого устройства в целом.
    Компьютер под Linux EMC при помощи данной платы передает управление на
    силовую часть и принимает сигналы с квадратурных енкодеров которые обрабатывает
    по PID алгоритму. Действительно самый простой и дешевый способ управлять
    servo двигателями но только под Linux.

  42. #39

    Регистрация
    26.04.2010
    Адрес
    Луганск,Украина
    Возраст
    52
    Сообщений
    38
    Цитата Сообщение от boldive Посмотреть сообщение
    А что за токи потребляются этой платой что используются линейные стабилизаторы напряжения в корпусе SOT-223? Может есть смысл поставить что-то из серии LP2985 в корпусе SOT-23-5. Они в два раза меньше по размерам. А последовательно перед стабилизатором на 2.5В еще воткнул-бы светодиод. Какая-никакая индикация напряжения, и работает как предохранитель.
    Согласно документу http://www.altera.com/literature/ds/...=1&WT.oss=acex
    страница 81-83 сама FPGA потребляет от 50 до 100 ма.
    Зависит от количества используемых ячеек LEs в конфигурации.
    Светодиод явно не справится с таким током, хотя Вы правы напряжение надо погасить перед стабилизатором 2.5 хотя бы диодом или запитать его от 3.3 вольтового.

    Прошивка для ATiny2313 откуда берется? И насколько этот контроллер вместе с COM портом необходимы на плате?
    Микроконтроллер необходим для загрузки кода конфигурации в FPGA.
    Сам код находится в 24с512.
    Плата поддерживает три режима загрузки конфигураций:
    Пассивный последовательный (PS), пассивный параллельный асинхронный (PPA) и JTAG.
    http://www.altera.com/literature/hb/...=1&WT.oss=acex
    Хочу добавить еще загрузку программы в 24с512 через ком порт.
    для этого там и стоит мах232.
    Писать программу загрузчика для 2313 еще предстоит.
    Хотя от Fox69 уже есть дельная ссылка добавим туда кусок I2C и COM порт и будет загрузчик.
    FPGA теряет конфигурацию при выключении питания! Там нет флэша как в ЕР70хх.
    Я еще не до конца понимаю назначение этого устройства в целом.
    Я внимательно прочитал Ваш пост по микростеп драйверу от Мариса.
    Вы ведь уже почти владеете Верилогом! Что мешает подключить эту программу к программе выше для ШД? Разрешение автора?

    Цитата Сообщение от boldive Посмотреть сообщение
    У JTAG разьема реально работают только 6 ног. Не думаю что у всех покупные программаторы. Может 4 ноги разьема выкинуть, высвобождаем место на плате и оставляем простор для трассировки.
    В этом деле лучше придерживаться стандарта.

    Компьютер под Linux EMC при помощи данной платы передает управление на
    силовую часть и принимает сигналы с квадратурных енкодеров которые обрабатывает
    по PID алгоритму. Действительно самый простой и дешевый способ управлять
    servo двигателями но только под Linux.
    Шаговыми тоже!
    Linux не обязательно, можно и под Виндой а вот с Мачем действительно засада.
    Правда я его не знаю, но пробовал писать задачи реального времени под Винду - геморой страшный! Не реального времени эта ОС. И правильно! Иначе у пользователей был бы с ней тот же геморой.
    Последний раз редактировалось Impartial; 25.05.2010 в 01:05.

  43. #40

    Регистрация
    13.07.2006
    Адрес
    Харьков, украина
    Возраст
    57
    Сообщений
    928
    Согласно документу http://www.altera.com/literature/ds/...=1&WT.oss=acex
    страница 81-83 сама FPGA потребляет от 50 до 100 ма.
    Не так оптимистично это. Это если частота низкая да загрузка никакая, ставь D-PAK что-б хватило на все, как будет 3 канала сервы - ток сразу вырастет.

Закрытая тема

Похожие темы

  1. Переделываем токарный в ЧПУ
    от tytar в разделе Механика станков CNC, самодельные проекты
    Ответов: 17
    Последнее сообщение: 08.02.2011, 03:20
  2. Ответов: 4
    Последнее сообщение: 17.07.2009, 14:24
  3. Подскажите по переделке токарника в ЧПУ
    от Фантомасыч в разделе Механика станков CNC, самодельные проекты
    Ответов: 15
    Последнее сообщение: 24.04.2009, 16:21
  4. Переделал школьный НГФ-110 в ЧПУ
    от diverRS в разделе Механика станков CNC, самодельные проекты
    Ответов: 16
    Последнее сообщение: 04.08.2008, 03:02
  5. Плата в аккумуляторе мобильника
    от Dimbo в разделе Самодельная электроника, компьютерные программы
    Ответов: 13
    Последнее сообщение: 21.10.2007, 16:33

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения