Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed mbed-rtos MotionSensor EthernetInterface
PWM/CarPWM.cpp@0:88faaa1afb83, 2016-04-11 (annotated)
- Committer:
- drelliak
- Date:
- Mon Apr 11 05:20:40 2016 +0000
- Revision:
- 0:88faaa1afb83
Trekking Controller
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| drelliak | 0:88faaa1afb83 | 1 | #include "CarPWM.h" |
| drelliak | 0:88faaa1afb83 | 2 | #include "mbed.h" |
| drelliak | 0:88faaa1afb83 | 3 | |
| drelliak | 0:88faaa1afb83 | 4 | #define MINIMUM_MOTOR_WIDTH 1160 // microseconds |
| drelliak | 0:88faaa1afb83 | 5 | #define ZERO_MOTOR_WIDTH 1505 // microseconds |
| drelliak | 0:88faaa1afb83 | 6 | #define MAXIMUM_MOTOR_WIDTH 1910 // microseconds |
| drelliak | 0:88faaa1afb83 | 7 | #define MINIMUM_SERVO_WIDTH 1016 // microseconds |
| drelliak | 0:88faaa1afb83 | 8 | #define ZERO_SERVO_WIDTH 1470 // microseconds |
| drelliak | 0:88faaa1afb83 | 9 | #define MAXIMUM_SERVO_WIDTH 1858 // microseconds |
| drelliak | 0:88faaa1afb83 | 10 | #define PERIOD 13500 // miliseconds |
| drelliak | 0:88faaa1afb83 | 11 | #define MOTOR_RANGE_MAX 100 |
| drelliak | 0:88faaa1afb83 | 12 | #define SERVO_ANGLE_MAX 100 |
| drelliak | 0:88faaa1afb83 | 13 | |
| drelliak | 0:88faaa1afb83 | 14 | void initialize(PwmOut motor, PwmOut servo){ |
| drelliak | 0:88faaa1afb83 | 15 | motor.period_us(PERIOD); |
| drelliak | 0:88faaa1afb83 | 16 | servo.period_us(PERIOD); |
| drelliak | 0:88faaa1afb83 | 17 | } |
| drelliak | 0:88faaa1afb83 | 18 | void setServoPWM(float angle, PwmOut servo){ |
| drelliak | 0:88faaa1afb83 | 19 | if(angle > SERVO_ANGLE_MAX) |
| drelliak | 0:88faaa1afb83 | 20 | angle = SERVO_ANGLE_MAX; |
| drelliak | 0:88faaa1afb83 | 21 | else if(angle < -SERVO_ANGLE_MAX) |
| drelliak | 0:88faaa1afb83 | 22 | angle = - SERVO_ANGLE_MAX; |
| drelliak | 0:88faaa1afb83 | 23 | float servo_width = ZERO_SERVO_WIDTH + (angle/SERVO_ANGLE_MAX)*(MAXIMUM_SERVO_WIDTH - ZERO_SERVO_WIDTH); |
| drelliak | 0:88faaa1afb83 | 24 | servo.pulsewidth_us(servo_width); |
| drelliak | 0:88faaa1afb83 | 25 | // Serial pc(USBTX, USBRX); |
| drelliak | 0:88faaa1afb83 | 26 | // pc.printf("\nServo: %f ",servo_width); |
| drelliak | 0:88faaa1afb83 | 27 | } |
| drelliak | 0:88faaa1afb83 | 28 | void setMotorPWM(float speed, PwmOut motor){ |
| drelliak | 0:88faaa1afb83 | 29 | if(speed > MOTOR_RANGE_MAX) |
| drelliak | 0:88faaa1afb83 | 30 | speed = MOTOR_RANGE_MAX; |
| drelliak | 0:88faaa1afb83 | 31 | else if(speed < -MOTOR_RANGE_MAX) |
| drelliak | 0:88faaa1afb83 | 32 | speed = - MOTOR_RANGE_MAX; |
| drelliak | 0:88faaa1afb83 | 33 | float motor_speed = ZERO_MOTOR_WIDTH + (speed/MOTOR_RANGE_MAX)*(MAXIMUM_MOTOR_WIDTH - ZERO_MOTOR_WIDTH); |
| drelliak | 0:88faaa1afb83 | 34 | motor.pulsewidth_us(motor_speed); |
| drelliak | 0:88faaa1afb83 | 35 | // Serial pc(USBTX, USBRX); |
| drelliak | 0:88faaa1afb83 | 36 | // pc.printf("Motor: %f ",motor_speed); |
| drelliak | 0:88faaa1afb83 | 37 | |
| drelliak | 0:88faaa1afb83 | 38 | } |