This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
en:wheel_subsys [2018/01/23 15:47] ashley |
en:wheel_subsys [2020/03/25 16:28] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | **Orientation flywheel** \\ | + | ====== Reaction Wheel ====== |
- | Virtual [[power_subsys|consumption]] - 2000mA | + | |
+ | Virtual power draw: 2000 mA | ||
- | {{ ru:wheel.jpg?direct&200|}} | + | {{ :ru:маховик.png?direct&200| Двигатель-маховик}} |
- | When in orbit, many satellites require precise orientation of certain surfaces in the correct direction - relative to the Earth, the Sun, stars or some other reference point. For example, the [[camera_subsys|camera]] should be oriented towards the [[sim_earth|ground]] and the [[sun_battery|solar panels]] should be oriented towards the Sun. There are several known approaches for solving this problem. For example, you can use jet (rocket) orientation engines, which causes the spacecraft to rotate in the desired direction relative to the center of mass. However, this method requires the consumption of a working fluid (fuel), requires a complex system of engine nozzles, is potentially unsafe, etc. On small spacecraft, [[wheel_subsys|flywheels]] are most often used to provide a given orientation of the satellite in space relative to the center of mass. | + | |
- | The flywheel is an electromechanical device that consists of an electric motor with a wheel mounted on its axis of rotation. As the engine accelerates or decelerates, the spacecraft itself rotates faster or slower according to the law of conservation of the kinetic moment. Since there are no external forces in outer space and the amount {{ ru::arch.php.gif?200|}}of motion cannot change, turning the flywheel clockwise causes the whole spacecraft to rotate counterclockwise. Thus, by controlling the engine and the rotation of the [[wheel_subsys|flywheel]], you can control the motion of the whole spacecraft (in fact, the rotation) around its center of mass. | + | As they travel along the orbit, many satellites need precise positioning whereby specific edges would be aligned with particular directions relative to Earth, Sun, fixed stars or some other reference. A particular application would require the satellite to have its observation camera face Earth or solar cells face Sun. In smaller-scale orbiters the required spatial orientation of the satellite relative to the mass center is achieved most often using reaction wheels. |
- | In our model, free rotation of the spacecraft, and hence the [[wheel_subsys|flywheel]], is possible only around one axis - vertical. Therefore, only one orientation flywheel is installed on the "satellite." | + | A reaction wheel is a mechanical device comprising an electric motor with a wheel fixed on its spindle. The engine spins by accelerating and decelerating alternately, and the angular momentum conservation law will make the orbiter itself spin faster or slower. Considering that there are no external forces in the space and the amount of motion cannot change, clockwise rotation of the wheel would make the entire orbiter rotate counterclockwise. So, by controlling the motor and the reaction wheel we can control motion around the mass center (in essence, rotation) of the entire orbiter. |
- | The following functions are used for working with the flywheel motor: \\ | + | In our model free rotation of the Orbicraft Construction Set and hence the reaction wheel is only possible around a single axis – the vertical axis. For that reason the “satellite” only has a single positioning reaction wheel. |
- | //int32_t motor_set_speed(uint16_t num,int16_t RPM,int16_t *confirm);// \\ | + | The following functions (in C) are used for interacting with the reaction wheel motor: |
- | The function allows you to set the flywheel speed. If everything is successful, it will return the LSS_OK code and the "confirm" value equal to the desired RPM. However, it can take quite a long time for the [[wheel_subsys|flywheel]] to accelerate to the required speed. | + | |
+ | <code C>int32_t motor_set_speed(uint16_t num,int16_t RPM,int16_t *confirm);</code> | ||
+ | |||
+ | Commands a speed setpoint to the wheel, returning the LSS_OK code upon success and the requested RPM in the confirm variable. However it could take quite some time for the wheel to actually reach the requested speed. | ||
+ | |||
+ | The following function queries the current wheel rotation speed: | ||
+ | |||
+ | <code C>int32_t motor_request_speed(uint16_t num,int16_t *pRPM);</code> | ||
+ | |||
+ | ==== Sample C Test Code for the Reaction Wheel ==== | ||
+ | |||
+ | <file c Wheel_test.c> | ||
+ | #include "libschsat.h" | ||
+ | /* | ||
+ | ** Lab 5: manage motor speed | ||
+ | */ | ||
+ | void control(void) | ||
+ | { | ||
+ | const int num = 1; /* motor number #1 */ | ||
+ | int16_t temp; | ||
+ | int16_t rpm = -3000; /* -3000 ... +3000 */ | ||
+ | printf("Enable motor #%d\n", num); | ||
+ | motor_turn_on(num); | ||
+ | printf("Manage speed motor #%d\n", num); | ||
+ | while (rpm <= 3000) { | ||
+ | printf("<<< Set speed to %d\n", rpm); | ||
+ | if (LSS_OK == motor_set_speed(num, rpm, &temp)) { | ||
+ | if (temp == rpm) | ||
+ | printf("\t%d confirmed\n", rpm); | ||
+ | } | ||
+ | Sleep(1); | ||
+ | if (LSS_OK == motor_request_speed(num, &temp)) { | ||
+ | printf("Got speed %d >>>\n", temp); | ||
+ | } else { | ||
+ | puts("Fail! >>>"); | ||
+ | } | ||
+ | rpm += 500; | ||
+ | } | ||
+ | printf("<<< Set speed to 0\n"); | ||
+ | if (LSS_OK == motor_set_speed(num, 0, &temp)) { | ||
+ | if (temp == 0) | ||
+ | printf("\t%d confirmed\n", 0); | ||
+ | } | ||
+ | Sleep(1); | ||
+ | if (LSS_OK == motor_request_speed(num, &temp)) { | ||
+ | printf("Got speed %d >>>\n", temp); | ||
+ | } else { | ||
+ | puts("Fail! >>>"); | ||
+ | } | ||
+ | Sleep(1); | ||
+ | motor_set_speed(num, 0, &temp); | ||
+ | Sleep(1); | ||
+ | printf("Disable motor #%d\n", num); | ||
+ | motor_turn_off(num); | ||
+ | } | ||
+ | </file> | ||
- | //int32_t motor_request_speed(uint16_t num,int16_t *pRPM);// \\ | ||
- | This function allows you to request the current flywheel speed. |