Disable motor relays when there's a problem
This commit is contained in:
parent
13ccd284bc
commit
d37ef25162
22
main.py
22
main.py
|
@ -13,6 +13,7 @@ import serial
|
||||||
import glob
|
import glob
|
||||||
|
|
||||||
import dyn4
|
import dyn4
|
||||||
|
import relays
|
||||||
|
|
||||||
ENCODER_PPR = 65536
|
ENCODER_PPR = 65536
|
||||||
|
|
||||||
|
@ -22,6 +23,20 @@ dmm1 = None
|
||||||
dmm2 = None
|
dmm2 = None
|
||||||
|
|
||||||
|
|
||||||
|
MOTOR_EN1 = 0
|
||||||
|
MOTOR_EN2 = 1
|
||||||
|
|
||||||
|
def enable_motors():
|
||||||
|
logging.info('Enabling both motors...')
|
||||||
|
relays.relay_on(MOTOR_EN1)
|
||||||
|
relays.relay_on(MOTOR_EN2)
|
||||||
|
|
||||||
|
def disable_motors():
|
||||||
|
logging.info('Disabling both motors...')
|
||||||
|
relays.relay_off(MOTOR_EN1)
|
||||||
|
relays.relay_off(MOTOR_EN2)
|
||||||
|
|
||||||
|
|
||||||
async def send_mqtt(topic, message):
|
async def send_mqtt(topic, message):
|
||||||
try:
|
try:
|
||||||
async with aiomqtt.Client('localhost') as client:
|
async with aiomqtt.Client('localhost') as client:
|
||||||
|
@ -84,6 +99,7 @@ async def monitor_mqtt():
|
||||||
async def init_motor(path, name):
|
async def init_motor(path, name):
|
||||||
try:
|
try:
|
||||||
dmm = dyn4.DMMDrive(path, 0)
|
dmm = dyn4.DMMDrive(path, 0)
|
||||||
|
_ = dmm.read_AbsPos32()
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
logging.error('Problem opening %s port %s: %s - %s', name, path, e.__class__.__name__, e)
|
logging.error('Problem opening %s port %s: %s - %s', name, path, e.__class__.__name__, e)
|
||||||
await send_mqtt('server/motor_status', name + ' disconnected')
|
await send_mqtt('server/motor_status', name + ' disconnected')
|
||||||
|
@ -103,8 +119,8 @@ async def read_motor(dmm, name):
|
||||||
return dmm.read_AbsPos32()
|
return dmm.read_AbsPos32()
|
||||||
except BaseException as e:
|
except BaseException as e:
|
||||||
# any problems, kill both motors
|
# any problems, kill both motors
|
||||||
# TODO: add tripping e-stop
|
|
||||||
set_motors(0)
|
set_motors(0)
|
||||||
|
disable_motors()
|
||||||
|
|
||||||
logging.error('Problem reading %s: %s - %s', name, e.__class__.__name__, e)
|
logging.error('Problem reading %s: %s - %s', name, e.__class__.__name__, e)
|
||||||
await send_mqtt('server/motor_status', name + ' disconnected')
|
await send_mqtt('server/motor_status', name + ' disconnected')
|
||||||
|
@ -119,8 +135,8 @@ async def check_sync(rev1, rev2):
|
||||||
|
|
||||||
if abs(difference) > 1.0:
|
if abs(difference) > 1.0:
|
||||||
# out of sync, kill both motors
|
# out of sync, kill both motors
|
||||||
# TODO: add tripping e-stop
|
|
||||||
set_motors(0)
|
set_motors(0)
|
||||||
|
disable_motors()
|
||||||
|
|
||||||
dmm1 = False
|
dmm1 = False
|
||||||
dmm2 = False
|
dmm2 = False
|
||||||
|
@ -178,6 +194,8 @@ def task_died(future):
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
enable_motors()
|
||||||
|
|
||||||
loop = asyncio.get_event_loop()
|
loop = asyncio.get_event_loop()
|
||||||
|
|
||||||
a = loop.create_task(monitor_dyn4()).add_done_callback(task_died)
|
a = loop.create_task(monitor_dyn4()).add_done_callback(task_died)
|
||||||
|
|
28
relays.py
Normal file
28
relays.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
import time
|
||||||
|
import smbus
|
||||||
|
import sys
|
||||||
|
|
||||||
|
DEVICE_BUS = 1
|
||||||
|
DEVICE_ADDR = 0x10
|
||||||
|
bus = smbus.SMBus(DEVICE_BUS)
|
||||||
|
|
||||||
|
def relay_on(num):
|
||||||
|
bus.write_byte_data(DEVICE_ADDR, num, 0x00)
|
||||||
|
|
||||||
|
def relay_off(num):
|
||||||
|
bus.write_byte_data(DEVICE_ADDR, num, 0xFF)
|
||||||
|
|
||||||
|
def test():
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
for i in range(1,5):
|
||||||
|
relay_on(i)
|
||||||
|
time.sleep(1)
|
||||||
|
relay_off(i)
|
||||||
|
time.sleep(1)
|
||||||
|
except KeyboardInterrupt as e:
|
||||||
|
sys.exit()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
test()
|
Loading…
Reference in New Issue
Block a user