This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
subdevices [2023/12/06 10:47] – [Stepper Motor] ursgraf | subdevices [2024/04/09 20:46] (current) – [DAC] ursgraf | ||
---|---|---|---|
Line 34: | Line 34: | ||
|0x28|4|value_1|r|no|channel 1: digitized input value| | |0x28|4|value_1|r|no|channel 1: digitized input value| | ||
|..|4|..|r/ | |..|4|..|r/ | ||
- | The status register in the subheader is unused with this function. In the configuration register setting the bit 0 will reset the subdevice. This subdevice uses a pin on the FPGA device for each channel. | + | The status register in the subheader is unused with this function. In the configuration register setting the bit 0 will reset the subdevice. This subdevice uses 3 to 4 pins for the SPI depending |
==== Subtypes ==== | ==== Subtypes ==== | ||
Currently there are three subtypes of this subdevice. The subtype information can be found in the '' | Currently there are three subtypes of this subdevice. The subtype information can be found in the '' | ||
Line 49: | Line 49: | ||
|0x28|4|value_1|r/ | |0x28|4|value_1|r/ | ||
|..|4|..|r/ | |..|4|..|r/ | ||
- | The status register in the subheader is unused with this function. In the configuration register setting the bit 0 will reset the subdevice. This subdevice uses a pin on the FPGA device for each channel. | + | The status register in the subheader is unused with this function. In the configuration register setting the bit 0 will reset the subdevice. This subdevice uses 5 pins. |
==== Subtypes ==== | ==== Subtypes ==== | ||
Currently there is one subtype of this subdevice. The subtype information can be found in the '' | Currently there is one subtype of this subdevice. The subtype information can be found in the '' | ||
^Subtype ID^Description^Example^ | ^Subtype ID^Description^Example^ | ||
|0x1|Simple DAC where the outputs are continuously set. All channels are updated at the same time|AD5668| | |0x1|Simple DAC where the outputs are continuously set. All channels are updated at the same time|AD5668| | ||
+ | |0x2|Simple DAC where the outputs are continuously set. All channels are individually updated, +-10V|AD5754| | ||
===== GPIO ===== | ===== GPIO ===== | ||
Line 238: | Line 239: | ||
The status and control register in the subheader are described below. | The status and control register in the subheader are described below. | ||
- | === status | + | === Status Register |
| 31 | ... | 05..04 | 03..02 | 01 | 00 | | | 31 | ... | 05..04 | 03..02 | 01 | 00 | | ||
| | | ACCEL_FS_SEL |GYRO_FS_SEL|configuring| reset| | | | | ACCEL_FS_SEL |GYRO_FS_SEL|configuring| reset| | ||
Line 248: | Line 249: | ||
//all other//: All other bits are described in the MPU9250 register map in the manual. | //all other//: All other bits are described in the MPU9250 register map in the manual. | ||
- | === config | + | === Configuration Register |
| 31 | ... | 01 | 00 | | | 31 | ... | 01 | 00 | | ||
| | |update_config|reset| | | | |update_config|reset| | ||
Line 304: | Line 305: | ||
The status register in the subheader is unused with this function. In the configuration register setting the bit 0 will reset the subdevice. | The status register in the subheader is unused with this function. In the configuration register setting the bit 0 will reset the subdevice. | ||
- | === Signals=== | + | === Output |
This subdevice uses three pins to connect an ADC7476. Further, the appropriate number of pins for the decoder is number_of_sensors = 2< | This subdevice uses three pins to connect an ADC7476. Further, the appropriate number of pins for the decoder is number_of_sensors = 2< | ||
===== Stepper Motor ===== | ===== Stepper Motor ===== | ||
- | Used to control stepper motors | + | Used to control stepper motors. You can set several configuration parameters |
- | Changes in direction, step type, phase mode and start speed are only taken into account | + | Changes in direction, step type, phase mode and start speed are only taking place when the motor is stopped. |
+ | Make sure to set the base clock of this subdevice correctly (in Altera or Vivado), because prescalers | ||
- | Make sure to set the base clock of this subdevice correctly (in Altera or Vivado), because prescalers | + | ==== Modes of Operation ==== |
+ | === Step Mode === | ||
+ | The motor moves through the specified number of steps. It uses a ramp to accelerate up and down. Changes in the configuration, | ||
+ | |||
+ | === Speed Mode === | ||
+ | The motor ramps up to a preset speed. When the stop command is issued, the speed ramps down to a standstill. Changes | ||
+ | |||
+ | === Free Running === | ||
+ | The motor is freewheeling. This means that the windings are not magnetized and the motor has no holding torque. | ||
+ | |||
+ | === General Remarks === | ||
+ | It is not recommended to change from step mode to fix speed mode. It is better to stop the engine first and then change the mode. However, when changing from one of these two modes to free running mode, the motor will simply come to a stop without any braking effect (all windings will be non-magnetized). When resetting the module, the motor keeps the current step (the windings | ||
+ | |||
+ | ==== Configuration ==== | ||
+ | Setting the bit 0 in the configuration register | ||
- | === Specific Registers === | ||
^Offset^Size [byte] ^Name^r/ | ^Offset^Size [byte] ^Name^r/ | ||
|0x20|4|base_clk|r|yes|base clock in Hz| | |0x20|4|base_clk|r|yes|base clock in Hz| | ||
- | |0x24|4|conf_0|r/ | + | |0x24|4|conf_0|r/ |
- | |0x28|4|conf_1|r/ | + | |0x28|4|conf_1|r/ |
|..|4|..|r/ | |..|4|..|r/ | ||
|0xhh|4|set_conf_0|w|no|motor 0: set bits in conf_0 (atomic)| | |0xhh|4|set_conf_0|w|no|motor 0: set bits in conf_0 (atomic)| | ||
Line 326: | Line 341: | ||
|0xii+4|4|reset_conf_1|w|no|motor 1: reset bits in conf_0 (atomic)| | |0xii+4|4|reset_conf_1|w|no|motor 1: reset bits in conf_0 (atomic)| | ||
|..|4|..|w|no|..| | |..|4|..|w|no|..| | ||
- | |0xkk|4|start_0|r/ | + | |0xkk|4|start_0|r/ |
- | |0xkk+4|4|start_1|r/ | + | |0xkk+4|4|start_1|r/ |
|..|4|..|r/ | |..|4|..|r/ | ||
- | |0xll|4|top_0|r/ | + | |0xll|4|top_0|r/ |
- | |0xll+4|4|top_1|r/ | + | |0xll+4|4|top_1|r/ |
|..|4|..|r/ | |..|4|..|r/ | ||
- | |0xnn|4|acc_0|r/ | + | |0xnn|4|acc_0|r/ |
- | |0xnn+4|4|acc_1|r/ | + | |0xnn+4|4|acc_1|r/ |
|..|4|..|r/ | |..|4|..|r/ | ||
- | |0xoo|4|stepps_todo_0|r/ | + | |0xoo|4|dest_steps_0|r/ |
- | |0xoo+4|4|stepps_todo_1|r/ | + | |0xoo+4|4|dest_steps_1|r/ |
|..|4|..|r/ | |..|4|..|r/ | ||
- | |0xpp|4|stepps_done_0|r|no|motor 0: Number | + | |0xpp|4|curr_steps_0|r|no|motor 0: current position (number |
- | |0xpp+4|4|stepps_done_1|r|no|motor 1: Number | + | |0xpp+4|4|curr_steps_1|r|no|motor 1: current position (number |
|..|4|..|r|no|..| | |..|4|..|r|no|..| | ||
- | == Configuration Register == | + | === Motor Configuration Register |
| 31 | ... | 06 | 05 | 04..03 | 02 | 01 | 00 | | | 31 | ... | 06 | 05 | 04..03 | 02 | 01 | 00 | | ||
- | | | | Reset Stepcounter | + | | | | Reset Step Counter |
- | __Direction:__ 1 => CW; 0=> CCW\\ | + | * Direction: 1 => CW; 0=> CCW |
- | __Full | + | * Full Step: 1 => full step; 0=> half step |
- | __Two Phase:__ 1 => two phase operation; 0=> one phase operation. | + | * Two Phase: 1 => two phase operation, 0 => one phase operation. |
- | __Run Mode:__ 00 => no holding torque; 01 => stepping mode; 10 => fixed speed; 11 => reserved\\ | + | * Run Mode: 00 => free running, |
- | __Start:__ if set to 1 the motor will start until stopped by a 0 or the number of steps is reached | + | * Start: if set to 1 the motor will start. Writing |
- | __Reset Stepcounter:__ To reset the step counter, set it to 1 | + | * Reset Step Counter: A ' |
- | === Mode Description === | + | The motor configuration register can be reading or writing at address //conf_x//. You can set a given set of bits to ' |
- | __Gererell: | + | |
- | *It is not recommended to change from STEP MODE to FIX SPEED mode. It is better to stop the engine first and then change the mode. | + | |
- | *However, when changing from one of these two modes to DISABELD mode, the motor will simply coast to a stop without any braking effect (all windings will be non-magnetized). | + | |
- | *When resetting the modules, the motor keeps the current step (The windings are still magnetized). | + | |
- | *Attention: The acceleration is divided by two within the module. Since the motor accelerates with each trigger edge. Therefore the LSB is not considered by the acceleration. | + | |
- | *An interrupt is triggered when the motor has completed the shutdown | + | |
- | __DISABELD (RESERVED): | + | === Prescaler === |
- | | + | When a motor is started it will start with its start speed and accelerate |
- | + | The acceleration is calculated by the base clock of the submodule divided by 2 times the prescaler value. The acceleration | |
- | __STEP MODE:__ | + | |
- | *The motor moves through the specified number of steps. It uses a ramp to accelerate up and down. | + | |
- | *Changes in the configuration, prescaler and steps registers | + | |
- | *The module sends a signal to reset the start bit (osl_reset_start_bit). When the start bit is manually reset, | + | |
- | + | ||
- | __FIX SPEED:__ | + | |
- | *The motor ramps up to a preset speed. When the command to stop is given, | + | |
- | *Changes in acceleration | + | |
=== Interrupt === | === Interrupt === | ||
- | An interrupt is always triggered | + | An interrupt is asserted |
- | === Outputs | + | === Output Signals |
- | This subdevice uses 4 pins on the FPGA. They are called A, | + | This subdevice uses 4 pins per channel |
- | **Unipolar: | + | **Unipolar: |
- | **Bipolar: | + | **Bipolar: |
===== Interrupt Multiplexer ===== | ===== Interrupt Multiplexer ===== | ||
- | Used to connect a large number of IRQ lines coming from Flink devices to a limited number of IRQ lines going to the interrupt control hardware. | + | Used to connect a large number of IRQ lines coming from flink devices to a limited number of IRQ lines going to the interrupt control hardware |
^Offset^Size [byte] ^Name^r/ | ^Offset^Size [byte] ^Name^r/ | ||
- | |0x20|4|irq_line_0|r/ | + | |0x20|4|irq_line_0|r/ |
- | |0x24|4|irq_line_1|r/ | + | |0x24|4|irq_line_1|r/ |
|..|4|..|r/ | |..|4|..|r/ | ||
Line 396: | Line 397: | ||
1 => first signal (LSB) of the input vector.\\ | 1 => first signal (LSB) of the input vector.\\ | ||
2 => second signal of the input vector.\\ | 2 => second signal of the input vector.\\ | ||
- | ... (and so on) | + | ... |