node.wu16(0x6040,0x6) # controlword (shutdown) node.wu16(0x6040,0xF) # controlword (switch on) node.ws16(0x2030,I) for i in range(500): time.sleep(0.2) print('Actual Current: {0} mA'.format(node.rs16(0x6078))) except KeyboardInterrupt: node.ws16(0x2030,0) else: print('* Velocity Mode Test.') V = 1000 A = 500 D = 500 node.ws8(0x6060,3) # mode of operation node.wu32(0x607F,4000) # max profile v rpm node.wu32(0x6083,A) # profile acceleration node.wu32(0x6084,D) # profile deceleration node.wu32(0x6085,10000) # quick stop deceleration node.ws16(0x6086,0) # motion profile type, 0 - trapez. node.wu16(0x6040,0x6) # controlword (shutdown) node.wu16(0x6040,0xF) # controlword (switch on) for i in range(4): if i%2 == 0: node.ws32(0x60FF,V) # target velocity else: node.ws32(0x60FF,-V) # target velocity node.wu16(0x6040,0xF) # controlword (switch on) for i in range(20): time.sleep(0.2) print('Actual Velocity: {0}'.format(node.rs32(0x606C)))
waiter = canio2.TriggersWaiter(io_service) print('Resetting node...') if n.reset(6000) == False: print 'Boot Timeout' sys.exit(1) print('Node state after reset: ' + str(n.state)) n.state = CANopenNode.STATES.OPERATIONAL time.sleep(0.1) if n.state == CANopenNode.STATES.OPERATIONAL: print('Node state : OPERATIONAL') else: raise Exception('Can\'t setup operational mode') try: # Initialisation n.wu32(0x3004,0) # disable power stage time.sleep(0.1) n.wu32(0x3900, 0x1) # motor type # controller feedback (encoder OR hall sensors) # Encoder feedback n.wu32(0x3910, 8) # poles N n.wu32(0x3911, 9) n.wu32(0x3350, 0, 0x96A) # encoder feedback for the velocity controller n.wu32(0x3550, 0x9A6) # encoder feedback for the secondary velocity controller n.wu32(0x3962, ENCODER_RESOLUTION) # encoder #n.wu32(0x3963, ENCODER_LINES) # encoder # Controller parameters # Velocity controller n.wu32(0x3310, 100) # PID Vel Kp (proportional factor) n.wu32(0x3311, 0) # PID Vel Ki (integral factor) n.wu32(0x3312, 0) # PID Vel Kd (differential factor)