eLab Team / Mbed OS DcMotorTest
Committer:
elab
Date:
Thu Jan 28 09:51:37 2021 +0000
Revision:
0:708b17957be1
Child:
1:77096ac47e7a
To test Lego Power Function;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elab 0:708b17957be1 1 #include "mbed.h"
elab 0:708b17957be1 2 #include "stdio.h"
elab 0:708b17957be1 3
elab 0:708b17957be1 4 DigitalOut gpo(D10);
elab 0:708b17957be1 5 DigitalOut led(LED1);
elab 0:708b17957be1 6
elab 0:708b17957be1 7 Serial pc(USBTX, USBRX);
elab 0:708b17957be1 8 DigitalIn my_button(USER_BUTTON); // Use the user button to switch from dc motor to servo motor and vice versa
elab 0:708b17957be1 9 DigitalIn end_stop(D2); // relais fin de course
elab 0:708b17957be1 10
elab 0:708b17957be1 11 PwmOut l1_dc_motor_en(D6);
elab 0:708b17957be1 12 DigitalOut l1_dc_motor_cw(D7);
elab 0:708b17957be1 13 DigitalOut l1_dc_motor_ccw(D8);
elab 0:708b17957be1 14
elab 0:708b17957be1 15 PwmOut l1_servo_en(D4);
elab 0:708b17957be1 16 DigitalOut l1_servo_cw(D5);
elab 0:708b17957be1 17 DigitalOut l1_servo_ccw(D3);
elab 0:708b17957be1 18
elab 0:708b17957be1 19 void run_l1_dc_motor_cw(void){
elab 0:708b17957be1 20 l1_dc_motor_en.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 0:708b17957be1 21 l1_dc_motor_en.pulsewidth_us(3000);
elab 0:708b17957be1 22 l1_dc_motor_cw=0;
elab 0:708b17957be1 23 l1_dc_motor_ccw=1;
elab 0:708b17957be1 24 }
elab 0:708b17957be1 25 void run_l1_dc_motor_ccw(void){
elab 0:708b17957be1 26 l1_dc_motor_en.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 0:708b17957be1 27 l1_dc_motor_en.pulsewidth_us(3000);
elab 0:708b17957be1 28 l1_dc_motor_cw=1;
elab 0:708b17957be1 29 l1_dc_motor_ccw=0;
elab 0:708b17957be1 30 }
elab 0:708b17957be1 31 void stop_dc_motor(void){
elab 0:708b17957be1 32 l1_dc_motor_cw=0;
elab 0:708b17957be1 33 l1_dc_motor_ccw=0;
elab 0:708b17957be1 34 }
elab 0:708b17957be1 35
elab 0:708b17957be1 36 void run_l1_servo_cw(void){
elab 0:708b17957be1 37 l1_servo_cw=1;
elab 0:708b17957be1 38 l1_servo_ccw=0;
elab 0:708b17957be1 39 l1_servo_en.period_us(870);
elab 0:708b17957be1 40 l1_servo_en.pulsewidth_ms(870);
elab 0:708b17957be1 41 }
elab 0:708b17957be1 42 void run_l1_servo_ccw(void){
elab 0:708b17957be1 43 l1_servo_cw=0;
elab 0:708b17957be1 44 l1_servo_ccw=1;
elab 0:708b17957be1 45 l1_servo_en.period_us(870);
elab 0:708b17957be1 46 l1_servo_en.pulsewidth_ms(870);
elab 0:708b17957be1 47 }
elab 0:708b17957be1 48 void stop_servo(void){
elab 0:708b17957be1 49 l1_servo_cw=0;
elab 0:708b17957be1 50 l1_servo_ccw=0;
elab 0:708b17957be1 51 }
elab 0:708b17957be1 52
elab 0:708b17957be1 53
elab 0:708b17957be1 54 void test_limite(void){
elab 0:708b17957be1 55 end_stop.mode(PullDown);
elab 0:708b17957be1 56 while(1){
elab 0:708b17957be1 57 printf("lim=%d\n", end_stop.read());
elab 0:708b17957be1 58
elab 0:708b17957be1 59 if(end_stop.read()==1){
elab 0:708b17957be1 60 stop_dc_motor();
elab 0:708b17957be1 61 led=0;
elab 0:708b17957be1 62 printf("stop_dc_motor\n");
elab 0:708b17957be1 63 }
elab 0:708b17957be1 64 else{
elab 0:708b17957be1 65 run_l1_dc_motor_ccw();
elab 0:708b17957be1 66 printf("motor runs\n");
elab 0:708b17957be1 67 led=1;
elab 0:708b17957be1 68 }
elab 0:708b17957be1 69 }
elab 0:708b17957be1 70
elab 0:708b17957be1 71 }
elab 0:708b17957be1 72
elab 0:708b17957be1 73
elab 0:708b17957be1 74 int main()
elab 0:708b17957be1 75 {
elab 0:708b17957be1 76 unsigned char cmd=0;
elab 0:708b17957be1 77
elab 0:708b17957be1 78 while (true) {
elab 0:708b17957be1 79 scanf("%c", &cmd);
elab 0:708b17957be1 80 if(cmd == '1')
elab 0:708b17957be1 81 {
elab 0:708b17957be1 82 cmd = 0;
elab 0:708b17957be1 83 stop_dc_motor();
elab 0:708b17957be1 84 printf("stop_dc_motor\r\n");
elab 0:708b17957be1 85 }
elab 0:708b17957be1 86 if(cmd == '2')
elab 0:708b17957be1 87 {
elab 0:708b17957be1 88 cmd = 0;
elab 0:708b17957be1 89 run_l1_dc_motor_cw();
elab 0:708b17957be1 90 printf("run_l1_dc_motor_cw\r\n");
elab 0:708b17957be1 91 }
elab 0:708b17957be1 92 if(cmd == '3')
elab 0:708b17957be1 93 {
elab 0:708b17957be1 94 cmd = 0;
elab 0:708b17957be1 95 run_l1_dc_motor_ccw();
elab 0:708b17957be1 96 printf("run_l1_dc_motor_ccw\r\n");
elab 0:708b17957be1 97 }
elab 0:708b17957be1 98 if(cmd == '4')
elab 0:708b17957be1 99 {
elab 0:708b17957be1 100 cmd = 0;
elab 0:708b17957be1 101 run_l1_servo_cw();
elab 0:708b17957be1 102 wait(1);
elab 0:708b17957be1 103 stop_servo();
elab 0:708b17957be1 104 printf("run_l1_servo_cw\r\n");
elab 0:708b17957be1 105 }
elab 0:708b17957be1 106 if(cmd == '5')
elab 0:708b17957be1 107 {
elab 0:708b17957be1 108 cmd = 0;
elab 0:708b17957be1 109 run_l1_servo_ccw();
elab 0:708b17957be1 110 wait(1);
elab 0:708b17957be1 111 stop_servo();
elab 0:708b17957be1 112 printf("run_l1_servo_ccw\r\n");
elab 0:708b17957be1 113 }
elab 0:708b17957be1 114 if(cmd == 'h')
elab 0:708b17957be1 115 {
elab 0:708b17957be1 116 cmd=0;
elab 0:708b17957be1 117 printf("1=stop_dc_motor; 2=run_l1_dc_motor_cw; 3=run_l1_dc_motor_ccw; 4=run_l1_servo_cw; 5=run_l1_servo_ccw");
elab 0:708b17957be1 118 }
elab 0:708b17957be1 119 }
elab 0:708b17957be1 120
elab 0:708b17957be1 121 }