Kart/stepper motor controller

From FSI
(Difference between revisions)
Jump to: navigation, search
(FPGA design)
(HTTP 301)
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{TOC right}}
+
#REDIRECT [[Kart]]
 
+
The [[Kart|kart's]] stepper motor controller module generates 4 coil driving signals and receives a ''stepper end'' input.
+
 
+
[[File:Kart_stepper_module.jpg|center|1400px|stepper motor module]]
+
 
+
== Stepper motor ==
+
 
+
=== Hardware ===
+
 
+
The '''stepper motor''' is a [[Media:SP3575M0906-A.pdf|Nanotec SP3575M0906-A]].
+
 
+
It has a step angle of 7.5°, and as such 48 steps per turn.
+
It is attached to a 100:1 reductor, which leads to an output axis with 4800 steps per turn.
+
 
+
The [[Media:Kart_dc_stepper_schematic.pdf|DC/stepper control board]] hosts a dual full H-bridge to control the 4 coils of the stepper motor.
+
 
+
The '''end switch''' is connected between one of the FPGAs I/O with an internal pull-up enabled and the GND. The logic is internally reverted (i.e. a '1' is read when the switch is closed).
+
 
+
=== Connector ===
+
 
+
The cables are connected as follows:
+
:{| cellpadding="4" cellspacing="0" border="1"
+
! Signal
+
! Color
+
|-
+
| phase 1
+
| white
+
|-
+
| phase 2
+
| blue
+
|-
+
| phase 3
+
| red
+
|-
+
| phase 4
+
| yellow
+
|-
+
| +5V / 2A
+
| brown, black
+
|}
+
 
+
== FPGA design ==
+
[[File:Kart_stepper_block.jpg|right|500px|stepper motor module]]
+
The [https://en.wikipedia.org/wiki/Stepper_motor stepper motor] controller has to generate the [https://en.wikipedia.org/wiki/Stepper_motor#Phase_current_waveforms 4 phases] to turn the kart's steering wheels to the desired angle.
+
The <code>target angle</code> is set in the [[Kart/serial_link#SmartPhone_to_Kart|desired steering angle register]].
+
 
+
To begin with, the [[Kart#FPGA_Design|design environment]] has to be downloaded.
+
It comprises the <code>stepperMotorController</code> block which contains the registers and events manager and an empty <code>angleControl</code> block which is to be completed.
+
 
+
=== Functionality ===
+
 
+
The block receives a <code>targetAngle</code> unsigned number and has to step the coils at each occurrence of the <code>stepEn</code> signal until the desired angle is reached.
+
 
+
The coils are controlled through the 4&nbsp;outputs <code>coil1</code> to <code>coil4</code>. When a '1' is applied, the corresponding coil is magnetized.
+
{{WarningBox|content=
+
To control the stepper, one coil at a time should be magnetized, known as [https://en.wikipedia.org/wiki/Stepper_motor#Wave_drive_(one_phase_on) '''wave drive'''].
+
 
+
The switching frequency should also be chosen carefully. A frequency of 285 Hz is near the slip limit of the motor.
+
The frequency is given by the formula : f = 100k / prescaler.
+
A prescaler ('''clockDivider''') of '''400''' (i.e. a frequency of 250 Hz) is a great first approach.
+
}}
+
The steering angle, <code>actual</code>, is estimated with the help of a counter which increments or decrements each time the coils change.
+
 
+
It is joined with a logic signal, <code>reached</code>, telling if the desired angle has been reached.
+
This information is sent back to the [[Kart#Android_App|controlling smartphone]].
+
 
+
=== Zero position ===
+
 
+
A switch contact, providing the signal <code>stepperEnd</code>, has to be mechanically fitted on the kart in order set one end of the wheels' direction movement.
+
As soon as <code>stepperEnd</code> is '1', the stepper motor is stopped and the <code>actual</code> angle is reset.
+
 
+
With this, the steering motor will not try to turn further than what the kart's mechanical structure allows it to do in one of the directions.
+
In the other direction, it is the programmer's task not to request a too large <code>target</code> angle.
+
This also means that the angles are always considered as positive numbers, the zero position being given by the <code>stepperEnd</code> switch.
+
 
+
{{WarningBox|content=
+
* In order to limit the current consumption, turn off the current in all the coils when the stepper motor is not turning any more.
+
* Make sure that both the first and the last pulse of the coil control signals have the same duration as all the others.
+
}}
+
{{TaskBox|content=
+
Draw the schematics of the <code>angleControl</code> block.
+
}}
+
 
+
=== Hardware orientation ===
+
 
+
The mechanical design allows for the following variations:
+
* the <code>stepperEnd</code> switch can be placed such as to detect the maximal steering angle either on the left or on the right side
+
* switching the coil controls in the sequence <code>1 - 2 - 3 - 4 - 1 - 2 - …</code> can result in the kart to turn either to the left or to the right
+
 
+
In order to cope with all possibilities, 2&nbsp;setup signals are provided to the block:
+
* <code>sensorLeft</code> being '1' means that the <code>stepperEnd</code> switch has been placed such as to react when the wheels are oriented to the maximal steering angle on the left side
+
* <code>clockwise</code> being '1' means that the sequence <code>1 - 2 - 3 - 4 - 1 - 2 - …</code> lets the steering turn to the right
+
 
+
[[File:Kart stepper hw orientation.svg|center|stepper hardware orientation controls]]
+
 
+
{{TaskBox|content=
+
Update the schematics of the <code>angleControl</code> block in order to cope for the different mechanical design possibilities.
+
}}
+
 
+
The corresponding setup bits are configured in the [[Kart/serial_link#Hardware_control_register|hardware control register]].
+
 
+
=== Initial position ===
+
 
+
The [[Kart/serial_link#Hardware_control_register|hardware control register]] also contains the bit <code>restart</code> allowing to let the stepper motor turn all the way to the angle where the <code>stepperEnd</code> switch is pressed.
+
 
+
This has to be sent by the [[Kart#Android_App|remote control smartphone]] after a successful Bluetooth pairing, together with the appropriate <code>sensorLeft</code> and <code>clockwise</code> setup bits, in order for the FPGA hardware to discover the zero angle position.
+
Obviously, this should only be done after the [[Kart/serial_link#SmartPhone_to_Kart|Stepper motor period register]] has been set to a proper value.
+
 
+
Restarting to the zero position can also be a help if too much current has been drawn from the batteries and the FPGAs' power has sunk in a way that they have performed a reset.
+
 
+
{{TaskBox|content=
+
Update the schematics of the <code>angleControl</code> block in order to turn all the way to the <code>stepperEnd</code> position once the input <code>restart</code> has been set.
+
 
+
The stepper motor should wait for the <code>restart</code> signal to be released before acting normally.
+
 
+
It should not turn while a first <code>restart</code> has not been performed, at choice either directly on startup or once requested from the smartphone.
+
}}
+
  
 
[[Category:Kart]]
 
[[Category:Kart]]

Latest revision as of 20:38, 17 September 2024

  1. REDIRECT Kart
Personal tools
Namespaces
Variants
Actions
Navigation
Modules / Projects
Browse
Toolbox