Lucky Yu / Mbed 2 deprecated SOLamr_base_controller

Dependencies:   mbed

Committer:
spiderkiller
Date:
Sun May 17 07:03:08 2020 +0000
Revision:
0:534dccd9b32a
good;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
spiderkiller 0:534dccd9b32a 1 #include "mbed.h"
spiderkiller 0:534dccd9b32a 2 #include "Encoder.h"
spiderkiller 0:534dccd9b32a 3
spiderkiller 0:534dccd9b32a 4 //STM mbed bug: these macros are MISSING from stm32f3xx_hal_tim.h
spiderkiller 0:534dccd9b32a 5 #ifdef TARGET_STM32F3
spiderkiller 0:534dccd9b32a 6 #define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
spiderkiller 0:534dccd9b32a 7 #define __HAL_TIM_IS_TIM_COUNTING_DOWN(__HANDLE__) (((__HANDLE__)->Instance->CR1 &(TIM_CR1_DIR)) == (TIM_CR1_DIR))
spiderkiller 0:534dccd9b32a 8 #endif
spiderkiller 0:534dccd9b32a 9
spiderkiller 0:534dccd9b32a 10 // For encoder
spiderkiller 0:534dccd9b32a 11 TIM_Encoder_InitTypeDef encoder2, encoder3;
spiderkiller 0:534dccd9b32a 12 TIM_HandleTypeDef timer2, timer3;
spiderkiller 0:534dccd9b32a 13
spiderkiller 0:534dccd9b32a 14 //For usb port serial
spiderkiller 0:534dccd9b32a 15 Serial pc(USBTX, USBRX);
spiderkiller 0:534dccd9b32a 16 //Led on F4446RE
spiderkiller 0:534dccd9b32a 17 DigitalOut my_led(LED1);
spiderkiller 0:534dccd9b32a 18 // Blue button on F446RE
spiderkiller 0:534dccd9b32a 19 InterruptIn my_button(USER_BUTTON);
spiderkiller 0:534dccd9b32a 20
spiderkiller 0:534dccd9b32a 21 // For PWM for control DC-motor
spiderkiller 0:534dccd9b32a 22 PwmOut motor_R(D2);
spiderkiller 0:534dccd9b32a 23 DigitalOut motor_R_dir(D3);
spiderkiller 0:534dccd9b32a 24 PwmOut motor_L(D7);
spiderkiller 0:534dccd9b32a 25 DigitalOut motor_L_dir(D6);
spiderkiller 0:534dccd9b32a 26
spiderkiller 0:534dccd9b32a 27 void pressed() {
spiderkiller 0:534dccd9b32a 28 // Event handler, pressed blue button
spiderkiller 0:534dccd9b32a 29 // Reverse direction of motor
spiderkiller 0:534dccd9b32a 30 motor_R_dir = !motor_R_dir;
spiderkiller 0:534dccd9b32a 31 motor_L_dir = !motor_L_dir;
spiderkiller 0:534dccd9b32a 32 }
spiderkiller 0:534dccd9b32a 33
spiderkiller 0:534dccd9b32a 34 int main()
spiderkiller 0:534dccd9b32a 35 {
spiderkiller 0:534dccd9b32a 36 motor_R_dir = 0;
spiderkiller 0:534dccd9b32a 37 motor_L_dir = 0;
spiderkiller 0:534dccd9b32a 38 // Set PWM
spiderkiller 0:534dccd9b32a 39 motor_R.period_ms(10);
spiderkiller 0:534dccd9b32a 40 motor_L.period_ms(10);
spiderkiller 0:534dccd9b32a 41
spiderkiller 0:534dccd9b32a 42 // Set button
spiderkiller 0:534dccd9b32a 43 my_button.fall(&pressed); // falling trigger
spiderkiller 0:534dccd9b32a 44
spiderkiller 0:534dccd9b32a 45 pc.baud (115200); // USB port baud rate
spiderkiller 0:534dccd9b32a 46
spiderkiller 0:534dccd9b32a 47 //counting on both A&B inputs, 4 ticks per cycle, full 32-bit count
spiderkiller 0:534dccd9b32a 48 EncoderInit(&encoder2, &timer2, TIM2, 0xffffffff, TIM_ENCODERMODE_TI12);//PA0 PA1 = Nucleo A0 A1 // right motor encoder
spiderkiller 0:534dccd9b32a 49
spiderkiller 0:534dccd9b32a 50 //counting on both A&B inputs, 4 ticks per cycle, full 32-bit count
spiderkiller 0:534dccd9b32a 51 EncoderInit(&encoder3, &timer3, TIM3, 0xffffffff, TIM_ENCODERMODE_TI12);//PB4 PB5 = Nucleo D5 D4// left motor encoder
spiderkiller 0:534dccd9b32a 52
spiderkiller 0:534dccd9b32a 53 while (1) {
spiderkiller 0:534dccd9b32a 54 uint32_t en_count_R=0, en_count_L=0;
spiderkiller 0:534dccd9b32a 55 int8_t en_dir_R, en_dir_L;
spiderkiller 0:534dccd9b32a 56
spiderkiller 0:534dccd9b32a 57 //OK 401 411 446 NOK 030
spiderkiller 0:534dccd9b32a 58 //count2=TIM2->CNT;
spiderkiller 0:534dccd9b32a 59 //dir2=TIM2->CR1&TIM_CR1_DIR;
spiderkiller 0:534dccd9b32a 60 en_count_R=__HAL_TIM_GET_COUNTER(&timer2);
spiderkiller 0:534dccd9b32a 61 en_dir_R = __HAL_TIM_IS_TIM_COUNTING_DOWN(&timer2);
spiderkiller 0:534dccd9b32a 62
spiderkiller 0:534dccd9b32a 63 //OK 401 411 446 030
spiderkiller 0:534dccd9b32a 64 //count3=TIM3->CNT;
spiderkiller 0:534dccd9b32a 65 //dir3=TIM3->CR1&TIM_CR1_DIR;
spiderkiller 0:534dccd9b32a 66 en_count_L=__HAL_TIM_GET_COUNTER(&timer3);
spiderkiller 0:534dccd9b32a 67 en_dir_L = __HAL_TIM_IS_TIM_COUNTING_DOWN(&timer3);
spiderkiller 0:534dccd9b32a 68
spiderkiller 0:534dccd9b32a 69 printf("%d%s %d%s \r\n", en_count_R, en_dir_R==0 ? "+":"-",en_count_L, en_dir_L==0 ? "+":"-");
spiderkiller 0:534dccd9b32a 70
spiderkiller 0:534dccd9b32a 71 // Controll motor
spiderkiller 0:534dccd9b32a 72 motor_R.write(0.1); // duty time 10%
spiderkiller 0:534dccd9b32a 73 motor_L.write(0.1);
spiderkiller 0:534dccd9b32a 74 my_led = !my_led; // blink LED on STM
spiderkiller 0:534dccd9b32a 75 wait(0.01); // 10 ms
spiderkiller 0:534dccd9b32a 76 }
spiderkiller 0:534dccd9b32a 77 }