eLab Team / Mbed OS DcMotorTest
Committer:
elab
Date:
Sat Feb 20 09:04:41 2021 +0000
Revision:
2:72952132894a
Version 1 of the smart marbles factory

Who changed what in which revision?

UserRevisionLine numberNew contents of line
elab 2:72952132894a 1 #include "mbed.h"
elab 2:72952132894a 2 #include "stdio.h"
elab 2:72952132894a 3
elab 2:72952132894a 4 //DigitalOut led(LED1);
elab 2:72952132894a 5
elab 2:72952132894a 6 Serial pc(USBTX, USBRX);
elab 2:72952132894a 7 DigitalIn my_button(USER_BUTTON); // Use the user button to switch from dc motor to servo motor and vice versa
elab 2:72952132894a 8 DigitalIn end_stop(D12); // relais fin de course
elab 2:72952132894a 9
elab 2:72952132894a 10 PwmOut l1_dc_motor_en(D0);
elab 2:72952132894a 11 DigitalOut l1_dc_motor_cw(D1);
elab 2:72952132894a 12 DigitalOut l1_dc_motor_ccw(D2);
elab 2:72952132894a 13
elab 2:72952132894a 14 PwmOut l1_servo_en(D5);
elab 2:72952132894a 15 DigitalOut l1_servo_cw(D3);
elab 2:72952132894a 16 DigitalOut l1_servo_ccw(D4);
elab 2:72952132894a 17
elab 2:72952132894a 18 //
elab 2:72952132894a 19 //PwmOut l2_dc_motor_en(D6);
elab 2:72952132894a 20 //DigitalOut l2_dc_motor_cw(D7);
elab 2:72952132894a 21 //DigitalOut l2_dc_motor_ccw(D8);
elab 2:72952132894a 22 //
elab 2:72952132894a 23 //PwmOut l2_servo_en(D11);
elab 2:72952132894a 24 //DigitalOut l2_servo_cw(D9);
elab 2:72952132894a 25 //DigitalOut l2_servo_ccw(D10);
elab 2:72952132894a 26
elab 2:72952132894a 27
elab 2:72952132894a 28 void run_l1_dc_motor_cw(void){
elab 2:72952132894a 29 l1_dc_motor_en.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 30 l1_dc_motor_en.pulsewidth_us(3000);
elab 2:72952132894a 31 l1_dc_motor_cw=0;
elab 2:72952132894a 32 l1_dc_motor_ccw=1;
elab 2:72952132894a 33 }
elab 2:72952132894a 34 void run_l1_dc_motor_ccw(void){
elab 2:72952132894a 35 l1_dc_motor_en.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 36 l1_dc_motor_en.pulsewidth_us(3000);
elab 2:72952132894a 37 l1_dc_motor_cw=1;
elab 2:72952132894a 38 l1_dc_motor_ccw=0;
elab 2:72952132894a 39 }
elab 2:72952132894a 40 //void run_l2_dc_motor_cw(void){
elab 2:72952132894a 41 // l2_dc_motor_en.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 42 // l2_dc_motor_en.pulsewidth_us(3000);
elab 2:72952132894a 43 // l2_dc_motor_cw=0;
elab 2:72952132894a 44 // l2_dc_motor_ccw=1;
elab 2:72952132894a 45 //}
elab 2:72952132894a 46 //void run_l2_dc_motor_ccw(void){
elab 2:72952132894a 47 // l2_dc_motor_en.period_ms(20); // shoul be 20 ms (490 Hz) and 10 ms for the servo (980 Hz)
elab 2:72952132894a 48 // l2_dc_motor_en.pulsewidth_us(3000);
elab 2:72952132894a 49 // l2_dc_motor_cw=1;
elab 2:72952132894a 50 // l2_dc_motor_ccw=0;
elab 2:72952132894a 51 //}
elab 2:72952132894a 52
elab 2:72952132894a 53
elab 2:72952132894a 54 void stop_dc_motor(void){
elab 2:72952132894a 55 l1_dc_motor_cw=0;
elab 2:72952132894a 56 l1_dc_motor_ccw=0;
elab 2:72952132894a 57 // l2_dc_motor_cw=0;
elab 2:72952132894a 58 // l2_dc_motor_ccw=0;
elab 2:72952132894a 59
elab 2:72952132894a 60 }
elab 2:72952132894a 61
elab 2:72952132894a 62 void run_l1_servo_cw(void){
elab 2:72952132894a 63 l1_servo_cw=1;
elab 2:72952132894a 64 l1_servo_ccw=0;
elab 2:72952132894a 65 l1_servo_en.period_us(870);
elab 2:72952132894a 66 l1_servo_en.pulsewidth_ms(870);
elab 2:72952132894a 67 }
elab 2:72952132894a 68 void run_l1_servo_ccw(void){
elab 2:72952132894a 69 l1_servo_cw=0;
elab 2:72952132894a 70 l1_servo_ccw=1;
elab 2:72952132894a 71 l1_servo_en.period_us(870);
elab 2:72952132894a 72 l1_servo_en.pulsewidth_ms(870);
elab 2:72952132894a 73 }
elab 2:72952132894a 74 void stop_servo(void){
elab 2:72952132894a 75 l1_servo_cw=0;
elab 2:72952132894a 76 l1_servo_ccw=0;
elab 2:72952132894a 77 }
elab 2:72952132894a 78
elab 2:72952132894a 79
elab 2:72952132894a 80 void test_limite(void){
elab 2:72952132894a 81 end_stop.mode(PullDown);
elab 2:72952132894a 82 while(1){
elab 2:72952132894a 83 printf("lim=%d\n", end_stop.read());
elab 2:72952132894a 84
elab 2:72952132894a 85 if(end_stop.read()==1){
elab 2:72952132894a 86 stop_dc_motor();
elab 2:72952132894a 87 // led=0;
elab 2:72952132894a 88 printf("stop_dc_motor\n");
elab 2:72952132894a 89 }
elab 2:72952132894a 90 else{
elab 2:72952132894a 91 run_l1_dc_motor_ccw();
elab 2:72952132894a 92 printf("motor runs\n");
elab 2:72952132894a 93 // led=1;
elab 2:72952132894a 94 }
elab 2:72952132894a 95 }
elab 2:72952132894a 96
elab 2:72952132894a 97 }
elab 2:72952132894a 98
elab 2:72952132894a 99
elab 2:72952132894a 100 int main()
elab 2:72952132894a 101 {
elab 2:72952132894a 102 unsigned char cmd=0;
elab 2:72952132894a 103
elab 2:72952132894a 104 while (true) {
elab 2:72952132894a 105 scanf("%c", &cmd);
elab 2:72952132894a 106 if(cmd == '1')
elab 2:72952132894a 107 {
elab 2:72952132894a 108 cmd = 0;
elab 2:72952132894a 109 stop_dc_motor();
elab 2:72952132894a 110 printf("stop_dc_motor\r\n");
elab 2:72952132894a 111 }
elab 2:72952132894a 112 if(cmd == '2')
elab 2:72952132894a 113 {
elab 2:72952132894a 114 cmd = 0;
elab 2:72952132894a 115 run_l1_dc_motor_cw();
elab 2:72952132894a 116 printf("run_l1_dc_motor_cw\r\n");
elab 2:72952132894a 117 }
elab 2:72952132894a 118 if(cmd == '3')
elab 2:72952132894a 119 {
elab 2:72952132894a 120 cmd = 0;
elab 2:72952132894a 121 run_l1_dc_motor_ccw();
elab 2:72952132894a 122 printf("run_l1_dc_motor_ccw\r\n");
elab 2:72952132894a 123 }
elab 2:72952132894a 124 if(cmd == '4')
elab 2:72952132894a 125 {
elab 2:72952132894a 126 cmd = 0;
elab 2:72952132894a 127 run_l1_servo_cw();
elab 2:72952132894a 128 wait(1);
elab 2:72952132894a 129 stop_servo();
elab 2:72952132894a 130 printf("run_l1_servo_cw\r\n");
elab 2:72952132894a 131 }
elab 2:72952132894a 132 if(cmd == '5')
elab 2:72952132894a 133 {
elab 2:72952132894a 134 cmd = 0;
elab 2:72952132894a 135 run_l1_servo_ccw();
elab 2:72952132894a 136 wait(1);
elab 2:72952132894a 137 stop_servo();
elab 2:72952132894a 138 printf("run_l1_servo_ccw\r\n");
elab 2:72952132894a 139 }
elab 2:72952132894a 140 if(cmd == '6')
elab 2:72952132894a 141 {
elab 2:72952132894a 142 // cmd = 0;
elab 2:72952132894a 143 // run_l2_dc_motor_cw();
elab 2:72952132894a 144 // printf("run_l2_dc_motor_cw\r\n");
elab 2:72952132894a 145 }
elab 2:72952132894a 146 if(cmd == '7')
elab 2:72952132894a 147 {
elab 2:72952132894a 148 // cmd = 0;
elab 2:72952132894a 149 // run_l2_dc_motor_ccw();
elab 2:72952132894a 150 // printf("run_l2_dc_motor_ccw\r\n");
elab 2:72952132894a 151 }
elab 2:72952132894a 152
elab 2:72952132894a 153
elab 2:72952132894a 154
elab 2:72952132894a 155 if(cmd == 'h')
elab 2:72952132894a 156 {
elab 2:72952132894a 157 cmd=0;
elab 2:72952132894a 158 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, 6=run_l1_dc_motor_cw; 7=run_l1_dc_motor_ccw\n");
elab 2:72952132894a 159 }
elab 2:72952132894a 160 }
elab 2:72952132894a 161
elab 2:72952132894a 162 }