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.
main.cpp@0:534dccd9b32a, 2020-05-17 (annotated)
- Committer:
- spiderkiller
- Date:
- Sun May 17 07:03:08 2020 +0000
- Revision:
- 0:534dccd9b32a
good;
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |