DCC1001 User Guide: Difference between revisions
No edit summary |
|||
(10 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
__NOINDEX__ | __NOINDEX__ | ||
__NOTOC__ | |||
<metadesc>Control one brushed DC motor with the 2A DC Motor Phidget. The encoder input enables precise position control with the use of a quadrature encoder.</metadesc> | <metadesc>Control one brushed DC motor with the 2A DC Motor Phidget. The encoder input enables precise position control with the use of a quadrature encoder.</metadesc> | ||
[[Category:UserGuide]] | [[Category:UserGuide]] | ||
== | ==Part 1: Setup== | ||
{{ | {{PT1 Deck Sequence}} | ||
== Part 2: Using Your Phidget == | |||
===About=== | |||
The DCC1001 allows you to control a DC motor or DC linear actuator. | |||
With this Phidget, you can control your motor by: | |||
* Setting the velocity and acceleration with the DC Motor Controller | |||
* Setting a specific target position using the Motor Position Controller (requires an encoder) | |||
[[Image:DCC1001_About.jpg|link=|center]] | |||
===Explore Your Phidget Channels Using the Control Panel=== | |||
You can use your Control Panel to explore your Phidget's channels. | |||
'''1.''' Open your Control Panel, and you will find the following channels: | |||
[[Image:DCC1001_Panel.jpg|link=|center]] | |||
'''2.''' Double click on a channel to open an example program. Each channel belongs to one of these channel classes: | |||
{{UGC-Start}} | |||
=== | {{UGC-Entry|DC Motor Controller:| Controls the velocity and current of the motor, and the on-board fan| | ||
In your Control Panel, double click on "DC Motor Controller": | |||
[[Image:DCC1001-DCMotor.jpg|850px|center|link=]]}} | |||
{{UGC-Entry|Encoder Input:| Reads encoder input so you can implement closed-loop control of the motor| | |||
In your Control Panel, double click on "Encoder Input": | |||
[[Image:DCC1001-Enc.jpg|850px|center|link=]]}} | |||
{{UGC-Entry|Position Controller:| A built-in PID position controller| | |||
In your Control Panel, double click on "Position Controller": | |||
[[Image:DCC1001-MPC.jpg|850px|center|link=]]}} | |||
{{UGC-End}} | |||
{{UG-Part3}} | |||
== Part 4: Advanced Topics and Troubleshooting == | |||
{{UGC-Start}} | |||
{{UGC-Firmware}} | |||
{{UGC-Entry|PositionController Settings|| | |||
There are a number of settings that can be adjusted to customize the position controller. You can save these variables into the program so you don't have to re-enter them manually (NOTE: This does not store the settings on the DCC1001, it simply saves them inside the control panel program, so you'll have to re-enter them if it's used on another computer). | |||
===Kp, Ki, and Kd=== | |||
You can set the control parameters Kp, Ki, and Kd in order to change the behavior of the control loop. For more information on how each of these three tuning parameters affect the control loop, see “Control Loop Parameters ”. | |||
===Velocity and Acceleration=== | |||
Velocity is how fast the motor will move to the target position, and acceleration controls how quickly the motor will reach its velocity and how quickly it will slow down. These values are measured in position per second and position per second squared, and position by default is measured in encoder pulses. | |||
===Rescale Factor=== | |||
If you want position to be measured in another unit (degrees, for example), you can set the rescale factor. For more information on choosing the correct rescale factor, see “Setting the Rescale Factor”. | |||
===Deadband=== | |||
Sometimes the motor will oscillate back and forth across the target position when holding position. Adding a deadband will widen the target position so the motor will stop when it gets within the target position plus or minus the deadband. | |||
===Current Limit=== | |||
Setting the current limit gives you control over how much power is being supplied to the motor. Generally, we advise that you set the current limit to your motor’s specified coil current. | |||
===Fan Mode=== | |||
This turns the cooling fan on and off. Setting it to auto will result in the fan turning on only when the temperature sensor detects rising board temperatures. | |||
===Encoder IO Mode=== | |||
Changes between different encoder modes based on your encoder’s circuitry. For more information see the [[Encoder_Guide#Output_Circuit|Encoder Guide]]. | |||
===Current Regulator Gain=== | |||
Depending on power supply voltage and motor coil inductance, the current through the motor can change relatively slowly or extremely rapidly. A physically larger DC Motor will typically have a lower inductance, requiring a higher current regulator gain. A higher power supply voltage will result in motor current changing more rapidly, requiring a higher current regulator gain. If the current regulator gain is too small, spikes in current will occur, causing large variations in torque, and possibly damaging the motor controller. If the current regulator gain is too high, the current will jitter, causing the motor to sound 'rough', especially when changing directions. | |||
}} | |||
{{UGC-Entry|Control Loop Parameters|| | |||
In order to get the desired behavior from your controller, you will have to tune your control parameters. This video explains the tuning procedure and gives information on how the controller works. | In order to get the desired behavior from your controller, you will have to tune your control parameters. This video explains the tuning procedure and gives information on how the controller works. | ||
{{#ev:youtube|0cQlxNd7dk4|||||rel=0}} | |||
}} | |||
{{UGC-Entry|Interfacing Encoders|| | |||
The DCC1001 can connect to any of the encoders we sell without any modification just by setting the ''EncoderIOMode'' property to ''Push-Pull'' . If you're trying to use your own encoder, you may need to change the IO mode to ''Open Collector'' or ''Line Driver'' mode. Have a look at the [[Encoder_Guide#Output_Circuit|Encoder Guide]] for more details on what to use. | |||
}} | |||
{{UGC-Entry|Setting the Rescale Factor|| | |||
There are three pieces of information to consider when setting a rescale factor to change your units into degrees or rotations: | |||
* Your encoder's CPR (counts per rotation) | |||
* Your encoder interface's resolution | |||
* Your motor's gear ratio | |||
First, check your encoder's datasheet for the CPR. It's usually 360 or 300. This is the number of quadrature cycles the encoder will send out for one full rotation. | |||
Next, you need your encoder interface's resolution. The encoder port on the DCC1001 has a x4 resolution, meaning it reads in 4 pulses per quadrature cycle (see the [[Encoder_Guide#Quadrature_Encoding|Encoder Guide]] for a more in-depth explanation). | |||
Next, you need to find out the gear ratio in your motor's datasheet. | |||
'''Note:''' If you plan on having your motor run for many rotations in a row, try to find the exact gear ratio, expressed as a fraction. Using the rounded value will result in accumulating errors the more you rotate. | |||
Once you have these numbers, you can calculate the rescale factor: | |||
[[Image:DCC1000-equations.jpg|link=]] | |||
For example, if you wanted to have your motor's position measured in degrees and your encoder had 300 CPR and your motor had a 50 801⁄895 : 1 gearbox, you would set your rescale factor to 360 / 300*4*(50+(801/895)), or 0.005894. | |||
}} | |||
{{UGC-DataInterval}} | |||
{{UGC-Graphing}} | |||
{{UGC-Entry|My motor moves away from the target position in Position Controller mode!|| | |||
Reverse your motor’s wires. The control loop has to make an assumption about what direction your motor moves with a positive voltage, and in this case, the assumption was incorrect. Don’t worry, DC motors are fine being wired up backward since they’re essentially just a long loop of wire on the inside. | |||
}} | |||
{{ | {{UGC-End}} |
Latest revision as of 20:11, 1 June 2023
Part 1: Setup
Part 2: Using Your Phidget
About
The DCC1001 allows you to control a DC motor or DC linear actuator. With this Phidget, you can control your motor by:
- Setting the velocity and acceleration with the DC Motor Controller
- Setting a specific target position using the Motor Position Controller (requires an encoder)
Explore Your Phidget Channels Using the Control Panel
You can use your Control Panel to explore your Phidget's channels.
1. Open your Control Panel, and you will find the following channels:
2. Double click on a channel to open an example program. Each channel belongs to one of these channel classes:
In your Control Panel, double click on "DC Motor Controller":
In your Control Panel, double click on "Encoder Input":
In your Control Panel, double click on "Position Controller":
Part 3: Create your Program
Part 4: Advanced Topics and Troubleshooting
Firmware Upgrade
MacOS users can upgrade device firmware by double-clicking the device row in the Phidget Control Panel.
Linux users can upgrade via the phidget22admin tool (see included readme for instructions).
Windows users can upgrade the firmware for this device using the Phidget Control Panel as shown below.
Firmware Downgrade
Firmware upgrades include important bug fixes and performance improvements, but there are some situations where you may want to revert to an old version of the firmware (for instance, when an application you're using is compiled using an older version of phidget22 that doesn't recognize the new firmware).
MacOS and Linux users can downgrade using the phidget22admin tool in the terminal (see included readme for instructions).
Windows users can downgrade directly from the Phidget Control Panel if they have driver version 1.9.20220112 or newer:
Firmware Version Numbering Schema
Phidgets device firmware is represented by a 3-digit number. For firmware patch notes, see the device history section on the Specifications tab on your device's product page.
- If the digit in the 'ones' spot changes, it means there have been bug fixes or optimizations. Sometimes these changes can drastically improve the performance of the device, so you should still upgrade whenever possible. These upgrades are backwards compatible, meaning you can still use this Phidget on a computer that has Phidget22 drivers from before this firmware upgrade was released.
- If the digit in the 'tens' spot changes, it means some features were added (e.g. new API commands or events). These upgrades are also backwards compatible, in the sense that computers running old Phidget22 drivers will still be able to use the device, but they will not be able to use any of the new features this version added.
- If the digit in the 'hundreds' spot changes, it means a major change has occurred (e.g. a complete rewrite of the firmware or moving to a new architecture). These changes are not backwards compatible, so if you try to use the upgraded board on a computer with old Phidget22 drivers, it will show up as unsupported in the Control Panel and any applications build using the old libraries won't recognize it either. Sometimes, when a Phidget has a new hardware revision (e.g. 1018_2 -> 1018_3), the firmware version's hundreds digit will change because entirely new firmware was needed (usually because a change in the processor). In this case, older hardware revisions won't be able to be upgraded to the higher version number and instead continue to get bug fixes within the same major revision.
There are a number of settings that can be adjusted to customize the position controller. You can save these variables into the program so you don't have to re-enter them manually (NOTE: This does not store the settings on the DCC1001, it simply saves them inside the control panel program, so you'll have to re-enter them if it's used on another computer).
Kp, Ki, and Kd
You can set the control parameters Kp, Ki, and Kd in order to change the behavior of the control loop. For more information on how each of these three tuning parameters affect the control loop, see “Control Loop Parameters ”.
Velocity and Acceleration
Velocity is how fast the motor will move to the target position, and acceleration controls how quickly the motor will reach its velocity and how quickly it will slow down. These values are measured in position per second and position per second squared, and position by default is measured in encoder pulses.
Rescale Factor
If you want position to be measured in another unit (degrees, for example), you can set the rescale factor. For more information on choosing the correct rescale factor, see “Setting the Rescale Factor”.
Deadband
Sometimes the motor will oscillate back and forth across the target position when holding position. Adding a deadband will widen the target position so the motor will stop when it gets within the target position plus or minus the deadband.
Current Limit
Setting the current limit gives you control over how much power is being supplied to the motor. Generally, we advise that you set the current limit to your motor’s specified coil current.
Fan Mode
This turns the cooling fan on and off. Setting it to auto will result in the fan turning on only when the temperature sensor detects rising board temperatures.
Encoder IO Mode
Changes between different encoder modes based on your encoder’s circuitry. For more information see the Encoder Guide.
Current Regulator Gain
Depending on power supply voltage and motor coil inductance, the current through the motor can change relatively slowly or extremely rapidly. A physically larger DC Motor will typically have a lower inductance, requiring a higher current regulator gain. A higher power supply voltage will result in motor current changing more rapidly, requiring a higher current regulator gain. If the current regulator gain is too small, spikes in current will occur, causing large variations in torque, and possibly damaging the motor controller. If the current regulator gain is too high, the current will jitter, causing the motor to sound 'rough', especially when changing directions.
In order to get the desired behavior from your controller, you will have to tune your control parameters. This video explains the tuning procedure and gives information on how the controller works.
The DCC1001 can connect to any of the encoders we sell without any modification just by setting the EncoderIOMode property to Push-Pull . If you're trying to use your own encoder, you may need to change the IO mode to Open Collector or Line Driver mode. Have a look at the Encoder Guide for more details on what to use.
There are three pieces of information to consider when setting a rescale factor to change your units into degrees or rotations:
- Your encoder's CPR (counts per rotation)
- Your encoder interface's resolution
- Your motor's gear ratio
First, check your encoder's datasheet for the CPR. It's usually 360 or 300. This is the number of quadrature cycles the encoder will send out for one full rotation.
Next, you need your encoder interface's resolution. The encoder port on the DCC1001 has a x4 resolution, meaning it reads in 4 pulses per quadrature cycle (see the Encoder Guide for a more in-depth explanation).
Next, you need to find out the gear ratio in your motor's datasheet. Note: If you plan on having your motor run for many rotations in a row, try to find the exact gear ratio, expressed as a fraction. Using the rounded value will result in accumulating errors the more you rotate.
Once you have these numbers, you can calculate the rescale factor:
For example, if you wanted to have your motor's position measured in degrees and your encoder had 300 CPR and your motor had a 50 801⁄895 : 1 gearbox, you would set your rescale factor to 360 / 300*4*(50+(801/895)), or 0.005894.
The Change Trigger is the minimum change in the sensor data needed to trigger a new data event.
The Data Interval is the time (in ms) between data events sent out from your Phidget.
The Data Rate is the reciprocal of Data Interval (measured in Hz), and setting it will set the reciprocal value for Data Interval and vice-versa.
You can modify one or both of these values to achieve different data outputs. You can learn more about these properties here.
Note: Graphing and logging is currently only supported in the Windows version of the Phidget Control Panel.
In the Phidget Control Panel, open the channel for your device and click on the icon next to the data type that you want to plot. This will open up a new window:
If you need more complex functionality such as logging multiple sensors to the same sheet or performing calculations on the data, you'll need to write your own program. Generally this will involve addressing the correct channel, opening it, and then creating an Event Handler and adding graphing/logging code to it.
The quickest way to get started is to download some sample code for your desired programming language and then search google for logging or plotting in that language (e.g. "how to log to csv in python") and add the code to the existing change handler.
Filtering
You can perform filtering on the raw data in order to reduce noise in your graph. For more information, see the Control Panel Graphing page.
Graph Type
You can perform a transform on the incoming data to get different graph types that may provide insights into your sensor data. For more information on how to use these graph types, see the Control Panel Graphing page.
Reverse your motor’s wires. The control loop has to make an assumption about what direction your motor moves with a positive voltage, and in this case, the assumption was incorrect. Don’t worry, DC motors are fine being wired up backward since they’re essentially just a long loop of wire on the inside.