-inline void simple_hall_commutator(struct rpi_in data){
- /* pwm3 */
- if (data.hal2 && !data.hal3){
- pwm1=0;
- pwm2=0;
- pwm3=simple_hall_duty;
- /* pwm1 */
- }else if (data.hal1 && !data.hal2){
- pwm1=simple_hall_duty;
- pwm2=0;
- pwm3=0;
- /* pwm2 */
- }else if (!data.hal1 && data.hal3){
- pwm1=0;
- pwm2=simple_hall_duty;
- pwm3=0;
+inline void simple_hall_commutator(struct rpi_in data, int duty){
+ if (duty>=0){ /* clockwise - so that position increase */
+ /* pwm3 */
+ if (data.hal2 && !data.hal3){
+ pwm1=0;
+ pwm2=0;
+ pwm3=duty;
+ /* pwm1 */
+ }else if (data.hal1 && !data.hal2){
+ pwm1=duty;
+ pwm2=0;
+ pwm3=0;
+ /* pwm2 */
+ }else if (!data.hal1 && data.hal3){
+ pwm1=0;
+ pwm2=duty;
+ pwm3=0;
+ }
+ }else{ /*counter-clockwise - position decrease */
+ /* pwm3 */
+ if (!data.hal2 && data.hal3){
+ pwm1=0;
+ pwm2=0;
+ pwm3=-duty;
+ /* pwm1 */
+ }else if (!data.hal1 && data.hal2){
+ pwm1=-duty;
+ pwm2=0;
+ pwm3=0;
+ /* pwm2 */
+ }else if (data.hal1 && !data.hal3){
+ pwm1=0;
+ pwm2=-duty;
+ pwm3=0;
+ }