Update README.md

Gave example IOC usage and described more about the process of initializing motors
This commit is contained in:
2024-08-06 11:07:09 -05:00
parent 3614a806ea
commit 95c227a553

View File

@@ -9,6 +9,8 @@ motorDSM can also be built outside of motor by copying it's ``configure/EXAMPLE_
motorDSM contains an example IOC that is built if ``configure/CONFIG_SITE.local`` sets ``BUILD_IOCS = YES``. The example IOC can be built outside of the driver module. Copy ``iocs/dsmIOC/configure/EXAMPLE_RELEASE.local`` to ``RELEASE.local`` and uncomment and set the paths for the appropriate lines depending on whether motorDSM was built inside the motor module or independently. motorDSM contains an example IOC that is built if ``configure/CONFIG_SITE.local`` sets ``BUILD_IOCS = YES``. The example IOC can be built outside of the driver module. Copy ``iocs/dsmIOC/configure/EXAMPLE_RELEASE.local`` to ``RELEASE.local`` and uncomment and set the paths for the appropriate lines depending on whether motorDSM was built inside the motor module or independently.
# Running an example IOC
To run the example IOC, in the ``iocs/dsmIOC/iocBoot/iocDsm`` directory, run To run the example IOC, in the ``iocs/dsmIOC/iocBoot/iocDsm`` directory, run
$ ../../bin/linux-x86_64/dsm st.cmd.md90 $ ../../bin/linux-x86_64/dsm st.cmd.md90
@@ -17,7 +19,60 @@ for one attached MD-90 controller, or
$ ../../bin/linux-x86_64/dsm st.cmd.md90.multi $ ../../bin/linux-x86_64/dsm st.cmd.md90.multi
for eight attached MD-90 controllers. You may need to change the path(s) for the serial port(s) in ``st.cmd.md90`` or ``st.cmd.md90.multi`` if the MD-90 is not attached at ``/dev/ttyUSB0``. for eight attached MD-90 controllers.
You will need to set the path(s) for the serial port(s) in ``st.cmd.md90`` (for a single unit) or ``st.cmd.md90.multi`` (for multiple units).
You will also need to ensure they match the names used in ``motor.substitutions.md90`` (or ``motor.substitutions.md90.multi``).
By default, ports are assumed to be at ``/dev/ttyUSB0``, ``/dev/ttyUSB1``, etc.
You will also need to comment or uncomment lines depending on the number of drivers you have connected. For each driver, make sure you uncomment/call the following functions:
**1. Define a new serial port named "serial0"**
`drvAsynSerialPortConfigure([serial name], [device location], 0, 0, 0)`
*e.g., `drvAsynSerialPortConfigure("serial0", "/dev/ttyUSB0", 0, 0, 0)`*
**2. Configure the port**
- Baud = 115200<br>
- Bits = 8<br>
- Parity = none
- Stop bits = 1
- Input end of message: "\r"
- Output end of message: "\r"
- Trace IO mask: 2
```
asynSetOption([serial name], 0, "baud", "115200")
asynSetOption([serial name], 0, "bits", "8")
asynSetOption([serial name], 0, "parity", "none")
asynSetOption([serial name], 0, "stop", "1")
asynOctetSetInputEos("serial0", 0, "\r")
asynOctetSetOutputEos("serial0", 0, "\r")
asynSetTraceIOMask("serial0", 0, 2)
```
where `[serial name]` is the name you assigned in step 1, surrounded by double quotes.
**3. Set initial parameters**
- Power supply enabled (`EPS` command)
- Deadband = 10 nm (`SDB 10` command)
```
asynOctetConnect("initConnection", [serial name], 0)
asynOctetWrite("initConnection", "EPS")
asynOctetWrite("initConnection", "SDB 10")
asynOctetDisconnect('initConnection')
```
**4. Create MD90 Controller object**
`MD90CreateController([controller name], [serial name], 1, 100, 5000)`
where `[controller name]` is the name of the motor to assign. Convention is to use "MD90n", starting with n=0.
**5. Intialize the IOC**
After calling `iocInit`, run the following lines for each motor. The example below uses `DSM:m0` but it should be run for each line described in motor.substitutions.md90 (or motor.substitutions.md90.multiple).
````
dbpf("DSM:m0.RTRY", "0") #sets retries to 0; this is automatic on the MD90
dbpf("DSM:m0.TWV", "0.1") #Tweak distance
dbpf("DSM:m0.VMAX", "1.0") #Sets max velocity to 1 mm/s
dbpf("DSM:m0.HVEL", "1.0") #Sets max velocity to 1 mm/s
````
# Compiling motorDSM
------------------------ ------------------------
@@ -108,3 +163,26 @@ In ``motorDSM/iocs/dsmIOC/configure``, copy ``EXAMPLE_RELEASE.local`` to ``RELEA
$ cd $SUPPORT/motorDSM $ cd $SUPPORT/motorDSM
$ make distclean $ make distclean
$ make $ make
------------------------
# Example usage
After building, run the example IOC described at the top of this section in one terminal window.
Open another terminal window and navigate to [EPICS install directory]/epics-base/bin/linux-x86_64/ (or wherever you built EPICS base.
Use the commands `caput` and `caget` to set and read process variables.
For example, to get the current position, use `./caget DSM:m0.REP`. This reads the REP variable, which is the "Raw Encoder Position". Set m0 to m1, m2, etc. for multiple motors.
Other examples
-------------------------
Homing the motor (must be done before you can issue position commands):
`./caput DSM:m0.HOMF 1 #Begins homing sequence in the forward direction`
`./caput DSM:m0.HOMR 1 #Begins homing sequence in the reverse direction`
Moving to a position target:
`./caput DSM:m0.VAL 2.345 #Moves to 2.345 mm
Setting a velocity target:
`./caput DSM:m0.VELO 0.5 #Sets velocity target to 0.5 mm/s`
Note that velocity targets are appropriate only. They adjust the step rate of the motor, and are not guaranteed to be exact.