Class: Tinkerforge::BrickDC
- Defined in:
- lib/tinkerforge/brick_dc.rb
Overview
Drives one brushed DC motor with up to 28V and 5A (peak)
Constant Summary collapse
- DEVICE_IDENTIFIER =
:nodoc:
11- DEVICE_DISPLAY_NAME =
:nodoc:
'DC Brick'- CALLBACK_UNDER_VOLTAGE =
This callback is triggered when the input voltage drops below the value set by BrickDC#set_minimum_voltage. The parameter is the current voltage given in mV.
21- CALLBACK_EMERGENCY_SHUTDOWN =
This callback is triggered if either the current consumption is too high (above 5A) or the temperature of the driver chip is too high (above 175°C). These two possibilities are essentially the same, since the temperature will reach this threshold immediately if the motor consumes too much current. In case of a voltage below 3.3V (external or stack) this callback is triggered as well.
If this callback is triggered, the driver chip gets disabled at the same time. That means, BrickDC#enable has to be called to drive the motor again.
- .. note
-
This callback only works in Drive/Brake mode (see BrickDC#set_drive_mode). In Drive/Coast mode it is unfortunately impossible to reliably read the overcurrent/overtemperature signal from the driver chip.
22- CALLBACK_VELOCITY_REACHED =
This callback is triggered whenever a set velocity is reached. For example: If a velocity of 0 is present, acceleration is set to 5000 and velocity to 10000, CALLBACK_VELOCITY_REACHED will be triggered after about 2 seconds, when the set velocity is actually reached.
- .. note
-
Since we can’t get any feedback from the DC motor, this only works if the acceleration (see BrickDC#set_acceleration) is set smaller or equal to the maximum acceleration of the motor. Otherwise the motor will lag behind the control value and the callback will be triggered too early.
23- CALLBACK_CURRENT_VELOCITY =
This callback is triggered with the period that is set by BrickDC#set_current_velocity_period. The parameter is the current velocity used by the motor.
CALLBACK_CURRENT_VELOCITY is only triggered after the set period if there is a change in the velocity.
24- FUNCTION_SET_VELOCITY =
:nodoc:
1- FUNCTION_GET_VELOCITY =
:nodoc:
2- FUNCTION_GET_CURRENT_VELOCITY =
:nodoc:
3- FUNCTION_SET_ACCELERATION =
:nodoc:
4- FUNCTION_GET_ACCELERATION =
:nodoc:
5- FUNCTION_SET_PWM_FREQUENCY =
:nodoc:
6- FUNCTION_GET_PWM_FREQUENCY =
:nodoc:
7- FUNCTION_FULL_BRAKE =
:nodoc:
8- FUNCTION_GET_STACK_INPUT_VOLTAGE =
:nodoc:
9- FUNCTION_GET_EXTERNAL_INPUT_VOLTAGE =
:nodoc:
10- FUNCTION_GET_CURRENT_CONSUMPTION =
:nodoc:
11- FUNCTION_ENABLE =
:nodoc:
12- FUNCTION_DISABLE =
:nodoc:
13- FUNCTION_IS_ENABLED =
:nodoc:
14- FUNCTION_SET_MINIMUM_VOLTAGE =
:nodoc:
15- FUNCTION_GET_MINIMUM_VOLTAGE =
:nodoc:
16- FUNCTION_SET_DRIVE_MODE =
:nodoc:
17- FUNCTION_GET_DRIVE_MODE =
:nodoc:
18- FUNCTION_SET_CURRENT_VELOCITY_PERIOD =
:nodoc:
19- FUNCTION_GET_CURRENT_VELOCITY_PERIOD =
:nodoc:
20- FUNCTION_ENABLE_STATUS_LED =
:nodoc:
238- FUNCTION_DISABLE_STATUS_LED =
:nodoc:
239- FUNCTION_IS_STATUS_LED_ENABLED =
:nodoc:
240- FUNCTION_GET_PROTOCOL1_BRICKLET_NAME =
:nodoc:
241- FUNCTION_GET_CHIP_TEMPERATURE =
:nodoc:
242- FUNCTION_RESET =
:nodoc:
243- FUNCTION_GET_IDENTITY =
:nodoc:
255- DRIVE_MODE_DRIVE_BRAKE =
:nodoc:
0- DRIVE_MODE_DRIVE_COAST =
:nodoc:
1
Constants inherited from Device
Device::RESPONSE_EXPECTED_ALWAYS_FALSE, Device::RESPONSE_EXPECTED_ALWAYS_TRUE, Device::RESPONSE_EXPECTED_FALSE, Device::RESPONSE_EXPECTED_INVALID_FUNCTION_ID, Device::RESPONSE_EXPECTED_TRUE
Instance Attribute Summary
Attributes inherited from Device
#callback_formats, #expected_response_function_id, #expected_response_sequence_number, #registered_callbacks, #uid
Instance Method Summary collapse
-
#disable ⇒ Object
Disables the driver chip.
-
#disable_status_led ⇒ Object
Disables the status LED.
-
#enable ⇒ Object
Enables the driver chip.
-
#enable_status_led ⇒ Object
Enables the status LED.
-
#full_brake ⇒ Object
Executes an active full brake.
-
#get_acceleration ⇒ Object
Returns the acceleration as set by BrickDC#set_acceleration.
-
#get_chip_temperature ⇒ Object
Returns the temperature in °C/10 as measured inside the microcontroller.
-
#get_current_consumption ⇒ Object
Returns the current consumption of the motor in mA.
-
#get_current_velocity ⇒ Object
Returns the current velocity of the motor.
-
#get_current_velocity_period ⇒ Object
Returns the period as set by BrickDC#set_current_velocity_period.
-
#get_drive_mode ⇒ Object
Returns the drive mode, as set by BrickDC#set_drive_mode.
-
#get_external_input_voltage ⇒ Object
Returns the external input voltage in mV.
-
#get_identity ⇒ Object
Returns the UID, the UID where the Brick is connected to, the position, the hardware and firmware version as well as the device identifier.
-
#get_minimum_voltage ⇒ Object
Returns the minimum voltage as set by BrickDC#set_minimum_voltage.
-
#get_protocol1_bricklet_name(port) ⇒ Object
Returns the firmware and protocol version and the name of the Bricklet for a given port.
-
#get_pwm_frequency ⇒ Object
Returns the PWM frequency (in Hz) as set by BrickDC#set_pwm_frequency.
-
#get_stack_input_voltage ⇒ Object
Returns the stack input voltage in mV.
-
#get_velocity ⇒ Object
Returns the velocity as set by BrickDC#set_velocity.
-
#initialize(uid, ipcon) ⇒ BrickDC
constructor
Creates an object with the unique device ID
uidand adds it to the IP Connectionipcon. -
#is_enabled ⇒ Object
Returns true if the driver chip is enabled, false otherwise.
-
#is_status_led_enabled ⇒ Object
Returns true if the status LED is enabled, false otherwise.
-
#register_callback(id, &block) ⇒ Object
Registers a callback with ID
idto the blockblock. -
#reset ⇒ Object
Calling this function will reset the Brick.
-
#set_acceleration(acceleration) ⇒ Object
Sets the acceleration of the motor.
-
#set_current_velocity_period(period) ⇒ Object
Sets a period in ms with which the CALLBACK_CURRENT_VELOCITY callback is triggered.
-
#set_drive_mode(mode) ⇒ Object
Sets the drive mode.
-
#set_minimum_voltage(voltage) ⇒ Object
Sets the minimum voltage in mV, below which the CALLBACK_UNDER_VOLTAGE callback is triggered.
-
#set_pwm_frequency(frequency) ⇒ Object
Sets the frequency (in Hz) of the PWM with which the motor is driven.
-
#set_velocity(velocity) ⇒ Object
Sets the velocity of the motor.
Methods inherited from Device
#dequeue_response, #enqueue_response, #get_api_version, #get_response_expected, #send_request, #set_response_expected, #set_response_expected_all
Constructor Details
#initialize(uid, ipcon) ⇒ BrickDC
Creates an object with the unique device ID uid and adds it to the IP Connection ipcon.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/tinkerforge/brick_dc.rb', line 92 def initialize(uid, ipcon) super uid, ipcon @api_version = [2, 0, 0] @response_expected[FUNCTION_SET_VELOCITY] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_GET_VELOCITY] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_GET_CURRENT_VELOCITY] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_SET_ACCELERATION] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_GET_ACCELERATION] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_SET_PWM_FREQUENCY] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_GET_PWM_FREQUENCY] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_FULL_BRAKE] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_GET_STACK_INPUT_VOLTAGE] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_GET_EXTERNAL_INPUT_VOLTAGE] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_GET_CURRENT_CONSUMPTION] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_ENABLE] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_DISABLE] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_IS_ENABLED] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_SET_MINIMUM_VOLTAGE] = RESPONSE_EXPECTED_TRUE @response_expected[FUNCTION_GET_MINIMUM_VOLTAGE] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_SET_DRIVE_MODE] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_GET_DRIVE_MODE] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_SET_CURRENT_VELOCITY_PERIOD] = RESPONSE_EXPECTED_TRUE @response_expected[FUNCTION_GET_CURRENT_VELOCITY_PERIOD] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[CALLBACK_UNDER_VOLTAGE] = RESPONSE_EXPECTED_ALWAYS_FALSE @response_expected[CALLBACK_EMERGENCY_SHUTDOWN] = RESPONSE_EXPECTED_ALWAYS_FALSE @response_expected[CALLBACK_VELOCITY_REACHED] = RESPONSE_EXPECTED_ALWAYS_FALSE @response_expected[CALLBACK_CURRENT_VELOCITY] = RESPONSE_EXPECTED_ALWAYS_FALSE @response_expected[FUNCTION_ENABLE_STATUS_LED] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_DISABLE_STATUS_LED] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_IS_STATUS_LED_ENABLED] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_GET_PROTOCOL1_BRICKLET_NAME] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_GET_CHIP_TEMPERATURE] = RESPONSE_EXPECTED_ALWAYS_TRUE @response_expected[FUNCTION_RESET] = RESPONSE_EXPECTED_FALSE @response_expected[FUNCTION_GET_IDENTITY] = RESPONSE_EXPECTED_ALWAYS_TRUE @callback_formats[CALLBACK_UNDER_VOLTAGE] = 'S' @callback_formats[CALLBACK_EMERGENCY_SHUTDOWN] = '' @callback_formats[CALLBACK_VELOCITY_REACHED] = 's' @callback_formats[CALLBACK_CURRENT_VELOCITY] = 's' end |
Instance Method Details
#disable ⇒ Object
Disables the driver chip. The configurations are kept (velocity, acceleration, etc) but the motor is not driven until it is enabled again.
250 251 252 |
# File 'lib/tinkerforge/brick_dc.rb', line 250 def disable send_request(FUNCTION_DISABLE, [], '', 0, '') end |
#disable_status_led ⇒ Object
Disables the status LED.
The status LED is the blue LED next to the USB connector. If enabled is is on and it flickers if data is transfered. If disabled it is always off.
The default state is enabled.
- .. versionadded
-
2.3.1$nbsp;(Firmware)
334 335 336 |
# File 'lib/tinkerforge/brick_dc.rb', line 334 def disable_status_led send_request(FUNCTION_DISABLE_STATUS_LED, [], '', 0, '') end |
#enable ⇒ Object
Enables the driver chip. The driver parameters can be configured (velocity, acceleration, etc) before it is enabled.
244 245 246 |
# File 'lib/tinkerforge/brick_dc.rb', line 244 def enable send_request(FUNCTION_ENABLE, [], '', 0, '') end |
#enable_status_led ⇒ Object
Enables the status LED.
The status LED is the blue LED next to the USB connector. If enabled is is on and it flickers if data is transfered. If disabled it is always off.
The default state is enabled.
- .. versionadded
-
2.3.1$nbsp;(Firmware)
322 323 324 |
# File 'lib/tinkerforge/brick_dc.rb', line 322 def enable_status_led send_request(FUNCTION_ENABLE_STATUS_LED, [], '', 0, '') end |
#full_brake ⇒ Object
Executes an active full brake.
- .. warning
-
This function is for emergency purposes, where an immediate brake is necessary. Depending on the current velocity and the strength of the motor, a full brake can be quite violent.
Call BrickDC#set_velocity with 0 if you just want to stop the motor.
210 211 212 |
# File 'lib/tinkerforge/brick_dc.rb', line 210 def full_brake send_request(FUNCTION_FULL_BRAKE, [], '', 0, '') end |
#get_acceleration ⇒ Object
Returns the acceleration as set by BrickDC#set_acceleration.
179 180 181 |
# File 'lib/tinkerforge/brick_dc.rb', line 179 def get_acceleration send_request(FUNCTION_GET_ACCELERATION, [], '', 2, 'S') end |
#get_chip_temperature ⇒ Object
Returns the temperature in °C/10 as measured inside the microcontroller. The value returned is not the ambient temperature!
The temperature is only proportional to the real temperature and it has an accuracy of +-15%. Practically it is only useful as an indicator for temperature changes.
360 361 362 |
# File 'lib/tinkerforge/brick_dc.rb', line 360 def get_chip_temperature send_request(FUNCTION_GET_CHIP_TEMPERATURE, [], '', 2, 's') end |
#get_current_consumption ⇒ Object
Returns the current consumption of the motor in mA.
238 239 240 |
# File 'lib/tinkerforge/brick_dc.rb', line 238 def get_current_consumption send_request(FUNCTION_GET_CURRENT_CONSUMPTION, [], '', 2, 'S') end |
#get_current_velocity ⇒ Object
Returns the current velocity of the motor. This value is different from BrickDC#get_velocity whenever the motor is currently accelerating to a goal set by BrickDC#set_velocity.
158 159 160 |
# File 'lib/tinkerforge/brick_dc.rb', line 158 def get_current_velocity send_request(FUNCTION_GET_CURRENT_VELOCITY, [], '', 2, 's') end |
#get_current_velocity_period ⇒ Object
Returns the period as set by BrickDC#set_current_velocity_period.
310 311 312 |
# File 'lib/tinkerforge/brick_dc.rb', line 310 def get_current_velocity_period send_request(FUNCTION_GET_CURRENT_VELOCITY_PERIOD, [], '', 2, 'S') end |
#get_drive_mode ⇒ Object
Returns the drive mode, as set by BrickDC#set_drive_mode.
297 298 299 |
# File 'lib/tinkerforge/brick_dc.rb', line 297 def get_drive_mode send_request(FUNCTION_GET_DRIVE_MODE, [], '', 1, 'C') end |
#get_external_input_voltage ⇒ Object
Returns the external input voltage in mV. The external input voltage is given via the black power input connector on the DC Brick.
If there is an external input voltage and a stack input voltage, the motor will be driven by the external input voltage. If there is only a stack voltage present, the motor will be driven by this voltage.
- .. warning
-
This means, if you have a high stack voltage and a low external voltage, the motor will be driven with the low external voltage. If you then remove the external connection, it will immediately be driven by the high stack voltage.
233 234 235 |
# File 'lib/tinkerforge/brick_dc.rb', line 233 def get_external_input_voltage send_request(FUNCTION_GET_EXTERNAL_INPUT_VOLTAGE, [], '', 2, 'S') end |
#get_identity ⇒ Object
Returns the UID, the UID where the Brick is connected to, the position, the hardware and firmware version as well as the device identifier.
The position can be ‘0’-‘8’ (stack position).
The device identifier numbers can be found :ref:‘here <device_identifier>`. |device_identifier_constant|
382 383 384 |
# File 'lib/tinkerforge/brick_dc.rb', line 382 def get_identity send_request(FUNCTION_GET_IDENTITY, [], '', 25, 'Z8 Z8 k C3 C3 S') end |
#get_minimum_voltage ⇒ Object
Returns the minimum voltage as set by BrickDC#set_minimum_voltage
271 272 273 |
# File 'lib/tinkerforge/brick_dc.rb', line 271 def get_minimum_voltage send_request(FUNCTION_GET_MINIMUM_VOLTAGE, [], '', 2, 'S') end |
#get_protocol1_bricklet_name(port) ⇒ Object
Returns the firmware and protocol version and the name of the Bricklet for a given port.
This functions sole purpose is to allow automatic flashing of v1.x.y Bricklet plugins.
350 351 352 |
# File 'lib/tinkerforge/brick_dc.rb', line 350 def get_protocol1_bricklet_name(port) send_request(FUNCTION_GET_PROTOCOL1_BRICKLET_NAME, [port], 'k', 44, 'C C3 Z40') end |
#get_pwm_frequency ⇒ Object
Returns the PWM frequency (in Hz) as set by BrickDC#set_pwm_frequency.
198 199 200 |
# File 'lib/tinkerforge/brick_dc.rb', line 198 def get_pwm_frequency send_request(FUNCTION_GET_PWM_FREQUENCY, [], '', 2, 'S') end |
#get_stack_input_voltage ⇒ Object
Returns the stack input voltage in mV. The stack input voltage is the voltage that is supplied via the stack, i.e. it is given by a Step-Down or Step-Up Power Supply.
217 218 219 |
# File 'lib/tinkerforge/brick_dc.rb', line 217 def get_stack_input_voltage send_request(FUNCTION_GET_STACK_INPUT_VOLTAGE, [], '', 2, 'S') end |
#get_velocity ⇒ Object
Returns the velocity as set by BrickDC#set_velocity.
151 152 153 |
# File 'lib/tinkerforge/brick_dc.rb', line 151 def get_velocity send_request(FUNCTION_GET_VELOCITY, [], '', 2, 's') end |
#is_enabled ⇒ Object
Returns true if the driver chip is enabled, false otherwise.
255 256 257 |
# File 'lib/tinkerforge/brick_dc.rb', line 255 def is_enabled send_request(FUNCTION_IS_ENABLED, [], '', 1, '?') end |
#is_status_led_enabled ⇒ Object
Returns true if the status LED is enabled, false otherwise.
- .. versionadded
-
2.3.1$nbsp;(Firmware)
341 342 343 |
# File 'lib/tinkerforge/brick_dc.rb', line 341 def is_status_led_enabled send_request(FUNCTION_IS_STATUS_LED_ENABLED, [], '', 1, '?') end |
#register_callback(id, &block) ⇒ Object
Registers a callback with ID id to the block block.
387 388 389 390 |
# File 'lib/tinkerforge/brick_dc.rb', line 387 def register_callback(id, &block) callback = block @registered_callbacks[id] = callback end |
#reset ⇒ Object
Calling this function will reset the Brick. Calling this function on a Brick inside of a stack will reset the whole stack.
After a reset you have to create new device objects, calling functions on the existing ones will result in undefined behavior!
370 371 372 |
# File 'lib/tinkerforge/brick_dc.rb', line 370 def reset send_request(FUNCTION_RESET, [], '', 0, '') end |
#set_acceleration(acceleration) ⇒ Object
Sets the acceleration of the motor. It is given in velocity/s. An acceleration of 10000 means, that every second the velocity is increased by 10000 (or about 30% duty cycle).
For example: If the current velocity is 0 and you want to accelerate to a velocity of 16000 (about 50% duty cycle) in 10 seconds, you should set an acceleration of 1600.
If acceleration is set to 0, there is no speed ramping, i.e. a new velocity is immediately given to the motor.
The default acceleration is 10000.
174 175 176 |
# File 'lib/tinkerforge/brick_dc.rb', line 174 def set_acceleration(acceleration) send_request(FUNCTION_SET_ACCELERATION, [acceleration], 'S', 0, '') end |
#set_current_velocity_period(period) ⇒ Object
Sets a period in ms with which the CALLBACK_CURRENT_VELOCITY callback is triggered. A period of 0 turns the callback off.
The default value is 0.
305 306 307 |
# File 'lib/tinkerforge/brick_dc.rb', line 305 def set_current_velocity_period(period) send_request(FUNCTION_SET_CURRENT_VELOCITY_PERIOD, [period], 'S', 0, '') end |
#set_drive_mode(mode) ⇒ Object
Sets the drive mode. Possible modes are:
-
0 = Drive/Brake
-
1 = Drive/Coast
These modes are different kinds of motor controls.
In Drive/Brake mode, the motor is always either driving or braking. There is no freewheeling. Advantages are: A more linear correlation between PWM and velocity, more exact accelerations and the possibility to drive with slower velocities.
In Drive/Coast mode, the motor is always either driving or freewheeling. Advantages are: Less current consumption and less demands on the motor and driver chip.
The default value is 0 = Drive/Brake.
292 293 294 |
# File 'lib/tinkerforge/brick_dc.rb', line 292 def set_drive_mode(mode) send_request(FUNCTION_SET_DRIVE_MODE, [mode], 'C', 0, '') end |
#set_minimum_voltage(voltage) ⇒ Object
Sets the minimum voltage in mV, below which the CALLBACK_UNDER_VOLTAGE callback is triggered. The minimum possible value that works with the DC Brick is 6V. You can use this function to detect the discharge of a battery that is used to drive the motor. If you have a fixed power supply, you likely do not need this functionality.
The default value is 6V.
266 267 268 |
# File 'lib/tinkerforge/brick_dc.rb', line 266 def set_minimum_voltage(voltage) send_request(FUNCTION_SET_MINIMUM_VOLTAGE, [voltage], 'S', 0, '') end |
#set_pwm_frequency(frequency) ⇒ Object
Sets the frequency (in Hz) of the PWM with which the motor is driven. The possible range of the frequency is 1-20000Hz. Often a high frequency is less noisy and the motor runs smoother. However, with a low frequency there are less switches and therefore fewer switching losses. Also with most motors lower frequencies enable higher torque.
If you have no idea what all this means, just ignore this function and use the default frequency, it will very likely work fine.
The default frequency is 15 kHz.
193 194 195 |
# File 'lib/tinkerforge/brick_dc.rb', line 193 def set_pwm_frequency(frequency) send_request(FUNCTION_SET_PWM_FREQUENCY, [frequency], 'S', 0, '') end |
#set_velocity(velocity) ⇒ Object
Sets the velocity of the motor. Whereas -32767 is full speed backward, 0 is stop and 32767 is full speed forward. Depending on the acceleration (see BrickDC#set_acceleration), the motor is not immediately brought to the velocity but smoothly accelerated.
The velocity describes the duty cycle of the PWM with which the motor is controlled, e.g. a velocity of 3277 sets a PWM with a 10% duty cycle. You can not only control the duty cycle of the PWM but also the frequency, see BrickDC#set_pwm_frequency.
The default velocity is 0.
146 147 148 |
# File 'lib/tinkerforge/brick_dc.rb', line 146 def set_velocity(velocity) send_request(FUNCTION_SET_VELOCITY, [velocity], 's', 0, '') end |