Example #1
0
    sw = 0
    for i in range(len(pw)):
        error = pw[i] - sw
        u = pid.run(error, Ts=Ts)

        sw = dc2.dlsim(u)[0]
        y_out[i, :] = sw

    pylab.figure(2)
    pylab.plot(pw)
    pylab.plot(y_out[:, 0])

    #Clearing the previous states
    dc2.x0 = None

    sinW = sinwave(Ts=Ts, mtime=1, freq=1, amp=6000)
    pw = sinW.signal()
    y_out = zeros((len(pw), 1))
    u_out = zeros((len(pw), 1))
    sw = 0
    for i in range(len(pw)):
        error = pw[i] - sw
        u = pid.run(error, Ts=Ts)

        sw = dc2.dlsim(u)[0]
        y_out[i, :] = sw
        u_out[i, :] = u

    pylab.figure(3)
    pylab.plot(pw)
    pylab.plot(y_out[:, 0])
Example #2
0
#    
#    for i in range( len( mtime ) ):
#        u = array( [[200.], [2.]] )       
#        yo[i, :] = pmsm.dlsim( u, Ts = Ts )[1][:, 0]        
#        if( i % 1000 ) == 0:
#            print "%d of %d" % ( i, len( mtime ) )
#    
#    pylab.figure()
#    pylab.plot( yo[:, 2] )
#    
#    pylab.show()   
    
    #Control signals
#    squareW = squarewave( Ts = Ts, mtime = 10 , freq = 0.2, amp = 30 )
#    sw = squareW.signal() 
    sinW = sinwave( Ts = Ts, mtime = 1, freq = 2, amp = 30 )    
    sw = sinW.signal()
    ct = CT()
    
    #Number of horizon
    N = 2
    
    
    ( Ak, Bk, Ck, Dk ) = pmsm.mdss( x, Ts )
    dlqr = DSTLQR( Ak, Bk, Ck, N )    
    
    w_s = zeros( ( len( sw ), 1 ) )
    U_s = zeros( ( len( sw ), 2 ) )
    x_s = zeros( ( len( sw ), 5 ) )
    error = zeros( ( len( sw ), 1 ) )    
    w_est = zeros( ( len( sw ), 1 ) )
Example #3
0
if __name__ == "__main__":
    dc2 = dcmotor()
    Ts = 0.0001
    ekf = dKF(x0=zeros((3, 1)))
    
    mtime = arange(0, 0.01, Ts)
    
    yo = zeros((len(mtime), 1))
    xk = zeros((len(mtime), 3))
    xe = zeros((len(mtime), 3))
    noise = zeros((len(mtime), 3))
    error = zeros((len(mtime), 3))
    (A, B, C, D) = dc2.dss(Ts)
    
    sinW = sinwave(Ts=Ts, mtime=0.01, freq=100, amp=20)
    pw = sinW.signal()     
    
    H = array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    for i in range(len(mtime)):    
        u = pw[i]    
        # u = array([[1.]])
        y_k, x_k = dc2.dlsim(u, Ts=Ts);
        
        yo[i, :] = y_k
        xk[i, :] = x_k.conj().T
        
        
        z_K = copy(x_k)
        z_K[1] = 0  
        z_K[0] = z_K[0] + random.uniform(-0.5, 0.5) 
Example #4
0
if __name__ == "__main__":
    dc2 = dcmotor()
    Ts = 0.0001
    ekf = dKF(x0=zeros((3, 1)))

    mtime = arange(0, 0.01, Ts)

    yo = zeros((len(mtime), 1))
    xk = zeros((len(mtime), 3))
    xe = zeros((len(mtime), 3))
    noise = zeros((len(mtime), 3))
    error = zeros((len(mtime), 3))
    (A, B, C, D) = dc2.dss(Ts)

    sinW = sinwave(Ts=Ts, mtime=0.01, freq=100, amp=20)
    pw = sinW.signal()

    H = array([[1, 0, 0], [0, 1, 0], [0, 0, 1]])
    for i in range(len(mtime)):
        u = pw[i]
        #u = array([[1.]])
        y_k, x_k = dc2.dlsim(u, Ts=Ts)

        yo[i, :] = y_k
        xk[i, :] = x_k.conj().T

        z_K = copy(x_k)
        z_K[1] = 0
        z_K[0] = z_K[0] + random.uniform(-0.5, 0.5)
Example #5
0
	for i in range( len( mtime ) ):
		u = array( [1.] )		
		yo[i, :] = dc2.dlsim( u, 0, Ts = Ts )[0];
		
		
	pylab.plot( yo[:, 0] )	
	
	
	
	#------------------------------------------------------------------------------
	# DC motor PID controller
	#------------------------------------------------------------------------------

	# Clearing the previous states
	dc2.x0	 = 	None; 
	sinW = sinwave( Ts = Ts, mtime = 0.1, freq = 10, amp = 200 )
	pw = sinW.signal()	 
	
	# Defining the torque
	torque = concatenate( ( ones( ( 1, pw.shape[0] / 4 ) ) * 2.0, ones( ( 1, 3 * pw.shape[0] / 4 ) ) * 1.0 ), axis = 1 );

	y_out = zeros( ( len( pw ), 1 ) )
	u_out = zeros( ( len( pw ), 1 ) )
	sw = 0;
	for i in range( len( pw ) ):
		# Calculate the error
		error = pw[i] - sw;
		# Calculating the control signal
		u = pid.run( error, Ts = Ts )
		if( abs( u ) > 220 ):
			u = sign( u ) * 220;	
Example #6
0
	for i in range( len( pw ) ):
		error = pw[i] - sw;
		u = pid.run( error, Ts = Ts )
		
		sw = dc2.dlsim( u )[0];
		y_out[i, :] = sw
			
	pylab.figure( 2 )
	pylab.plot( pw )
	pylab.plot( y_out[:, 0] )
	
	
	#Clearing the previous states
	dc2.x0	 = 	None;	
	
	sinW = sinwave( Ts = Ts, mtime = 1, freq = 1, amp = 6000 )
	pw = sinW.signal()	 
	y_out = zeros( ( len( pw ), 1 ) )
	u_out = zeros( ( len( pw ), 1 ) )
	sw = 0;
	for i in range( len( pw ) ):
		error = pw[i] - sw;
		u = pid.run( error, Ts = Ts )
		
		sw = dc2.dlsim( u )[0];
		y_out[i, :] = sw
		u_out[i, :] = u
		
	
	pylab.figure( 3 )
	pylab.plot( pw )