hola tengo un problema, se trata del manejo de puerto paralelo con matlab, es un progama que cuenta pulsos de en ecoder acoplado a un motor de iman permanente, el cual envia pulsos que deberian ser leidos por matlab, pero al parecer los datos son perdidos y no son leidos, uso el sig codigo para la lectura:
%Configuracion del puerto.............
%
%dio >> nombre del objeto puerto
%M1 -> D0 y D1, estado de motor 1
%M2 -> D2 y D3, estado de motor 2
%rM1 <- S3 realimentacion de encoder del motor 1,...
% recibe los pulsos de este encoder
%rM2 <- S3 realimentacion de encoder del motor 2,...
% recibe los pulsos de este encoder
%Variables auxiliares.................
%
%derecha >> se envia cuando se requiere giro de motor...
% a la derecha
%izquierda >> se envia cuando se requiere giro de motor...
% a la izquierda
%travado >> se envia cuando se requiere que el motor....
% este travado
%contador_rM1 >> guarda el numero de pulsos enviados por.....
% el encoder del motor 1
%contador_rM2 >> guarda el numero de pulsos enviados por.....
% el encoder del motor 2
%auxrM1 >> variable que guarda el anterior valor de ...
% rM1
%auxrM2 >> variable que guarda el anterior valor de ...
%rM2
global dio derecha izquierda travado suelto M1 M2 ...
rM1 rM2 contador_rM1 contador_rM2 auxrM1 auxrM2
contador_rM1=0; %guarda el número de pulsos del encoder 1
contador_rM2=0; %guarda el número de pulsos del encoder 1
derecha= 1
izquierda= 2
travado= 3
suelto= 0
dio=digitalio('parallel','lpt1') %declaracion de puerto
M1=addline(dio,[0 1],'out') %pines manejadores de motor1
M2=addline(dio,[2 3],'out') %pines manejadores de motor2
rM1=addline(dio,8,'in') %pin de realimentacion encoder1
rM2=addline(dio,9,'in') %pin de realimentacion encoder2
putvalue(dio.Line(1:4),0) %pone en cero todos los pines
auxrM1=getvalue(rM1)
auxrM2=getvalue(rM2)
%temporización: define la frecuencia de muestreo para la toma de datos
% de los encoders
%set(dio,'TimerFcn',@daqcallback2) %referencia a la funcion que atendera cuando ocurra el evento
%set(dio,'TimerPeriod',0.001) %define periodo de muestreo en segundos
%start(dio) %comienza el evento...
%en este caso, el conteo de los pulsos de los encoders
%rtddemo
tic;
while toc<50
if xor(getvalue(rM1),auxrM1)==1 && auxrM1==1 %solo cuenta si existe un cambio de uno a cero (transicion de pendiente neg)
contador_rM1=contador_rM1+1;
end
if xor(getvalue(rM2),auxrM2)==1 && auxrM2==1 %solo cuenta si existe un cambio de uno a cero (transicion de pendiente neg)
contador_rM2=contador_rM2+1;
end
auxrM1=getvalue(rM1);
auxrM2=getvalue(rM2);
end
Utilizo el anterior codigo pues al usar los eventos de tiempo del toobox de adquisicion de datos tuve resultados aun mas lentos
Lo que qiero saber es como podria acelerar el tiempo de muestreo de mi puerto paralelo, para que no pierda pulsos.......................
%Configuracion del puerto.............
%
%dio >> nombre del objeto puerto
%M1 -> D0 y D1, estado de motor 1
%M2 -> D2 y D3, estado de motor 2
%rM1 <- S3 realimentacion de encoder del motor 1,...
% recibe los pulsos de este encoder
%rM2 <- S3 realimentacion de encoder del motor 2,...
% recibe los pulsos de este encoder
%Variables auxiliares.................
%
%derecha >> se envia cuando se requiere giro de motor...
% a la derecha
%izquierda >> se envia cuando se requiere giro de motor...
% a la izquierda
%travado >> se envia cuando se requiere que el motor....
% este travado
%contador_rM1 >> guarda el numero de pulsos enviados por.....
% el encoder del motor 1
%contador_rM2 >> guarda el numero de pulsos enviados por.....
% el encoder del motor 2
%auxrM1 >> variable que guarda el anterior valor de ...
% rM1
%auxrM2 >> variable que guarda el anterior valor de ...
%rM2
global dio derecha izquierda travado suelto M1 M2 ...
rM1 rM2 contador_rM1 contador_rM2 auxrM1 auxrM2
contador_rM1=0; %guarda el número de pulsos del encoder 1
contador_rM2=0; %guarda el número de pulsos del encoder 1
derecha= 1
izquierda= 2
travado= 3
suelto= 0
dio=digitalio('parallel','lpt1') %declaracion de puerto
M1=addline(dio,[0 1],'out') %pines manejadores de motor1
M2=addline(dio,[2 3],'out') %pines manejadores de motor2
rM1=addline(dio,8,'in') %pin de realimentacion encoder1
rM2=addline(dio,9,'in') %pin de realimentacion encoder2
putvalue(dio.Line(1:4),0) %pone en cero todos los pines
auxrM1=getvalue(rM1)
auxrM2=getvalue(rM2)
%temporización: define la frecuencia de muestreo para la toma de datos
% de los encoders
%set(dio,'TimerFcn',@daqcallback2) %referencia a la funcion que atendera cuando ocurra el evento
%set(dio,'TimerPeriod',0.001) %define periodo de muestreo en segundos
%start(dio) %comienza el evento...
%en este caso, el conteo de los pulsos de los encoders
%rtddemo
tic;
while toc<50
if xor(getvalue(rM1),auxrM1)==1 && auxrM1==1 %solo cuenta si existe un cambio de uno a cero (transicion de pendiente neg)
contador_rM1=contador_rM1+1;
end
if xor(getvalue(rM2),auxrM2)==1 && auxrM2==1 %solo cuenta si existe un cambio de uno a cero (transicion de pendiente neg)
contador_rM2=contador_rM2+1;
end
auxrM1=getvalue(rM1);
auxrM2=getvalue(rM2);
end
Utilizo el anterior codigo pues al usar los eventos de tiempo del toobox de adquisicion de datos tuve resultados aun mas lentos
Lo que qiero saber es como podria acelerar el tiempo de muestreo de mi puerto paralelo, para que no pierda pulsos.......................