Skip to content

Commit 532acd6

Browse files
committed
dcmotor
1 parent 539a63b commit 532acd6

File tree

5 files changed

+132
-21
lines changed

5 files changed

+132
-21
lines changed

Arduino_Robot_Firmware.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,8 @@
66
#include "HAL_custom_init.h"
77
#include "encoder.h"
88
#include "rgb_led.h"
9+
#include "dcmotor.h"
10+
11+
912

1013
#endif

HAL_custom_init.h

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44

55
// Set PA_0 and PA_1 as alternate function 1 -> TIM2
6+
/*
67
void AF_Tim2_pins_encoder(){
78
GPIO_InitTypeDef GPIO_InitStruct;
89
__HAL_RCC_TIM2_CLK_ENABLE();
@@ -13,6 +14,13 @@ void AF_Tim2_pins_encoder(){
1314
GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;
1415
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
1516
}
17+
*/
18+
19+
20+
/***************************************************************/
21+
/* Encoder */
22+
/***************************************************************/
23+
1624

1725
// Set PA_0 and PA_1 as alternate function 1 -> TIM5
1826
void AF_Tim5_pins_encoder(){
@@ -38,6 +46,30 @@ void AF_Tim3_pins_encoder(){
3846
HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
3947
}
4048

49+
/***************************************************************/
50+
/* PWM */
51+
/***************************************************************/
52+
53+
void AF_Tim2_pwm(){
54+
GPIO_InitTypeDef GPIO_InitStructA;
55+
__HAL_RCC_TIM2_CLK_ENABLE();
56+
__HAL_RCC_GPIOA_CLK_ENABLE();
57+
GPIO_InitStructA.Pin = GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_15;
58+
GPIO_InitStructA.Mode = GPIO_MODE_AF_PP;
59+
GPIO_InitStructA.Pull = GPIO_NOPULL;
60+
GPIO_InitStructA.Alternate = GPIO_AF1_TIM2;
61+
HAL_GPIO_Init(GPIOA, &GPIO_InitStructA);
62+
63+
64+
GPIO_InitTypeDef GPIO_InitStructB;
65+
__HAL_RCC_TIM2_CLK_ENABLE();
66+
__HAL_RCC_GPIOB_CLK_ENABLE();
67+
GPIO_InitStructB.Pin = GPIO_PIN_3;
68+
GPIO_InitStructB.Mode = GPIO_MODE_AF_PP;
69+
GPIO_InitStructB.Pull = GPIO_NOPULL;
70+
GPIO_InitStructB.Alternate = GPIO_AF1_TIM2;
71+
HAL_GPIO_Init(GPIOB, &GPIO_InitStructB);
72+
}
4173

4274

4375

dcmotor.h

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#ifndef __DC_MOTOR_H__
2+
#define __DC_MOTOR_H__
3+
4+
#include "Arduino.h"
5+
6+
class DCmotor{
7+
private:
8+
uint32_t pinA;
9+
uint32_t chA;
10+
uint32_t pinB;
11+
uint32_t chB;
12+
TIM_HandleTypeDef htimX;
13+
HardwareTimer * timX;
14+
uint32_t frequency;
15+
16+
void pwmWrite(uint32_t ch, uint32_t value){
17+
timX->setCaptureCompare(ch, value, RESOLUTION_12B_COMPARE_FORMAT);
18+
}
19+
20+
public:
21+
DCmotor(const uint32_t _pinA, const uint32_t _chA, const uint32_t _pinB, const uint32_t _chB,
22+
const bool flip=false,TIM_TypeDef * _tim = TIM2, const uint32_t _frequency=20000){
23+
if (!flip){
24+
pinA=_pinA;
25+
chA=_chA;
26+
pinB=_pinB;
27+
chB=_chB;
28+
}
29+
else{
30+
pinA=_pinB;
31+
chA=_chB;
32+
pinB=_pinA;
33+
chB=_chA;
34+
}
35+
htimX.Instance = _tim;
36+
frequency=_frequency;
37+
}
38+
39+
void begin(){
40+
timX = new HardwareTimer(htimX.Instance);
41+
timX->setPWM(chA, pinA, frequency, 0);
42+
timX->setPWM(chB, pinB, frequency, 0);
43+
}
44+
45+
void setSpeed(const int speed){
46+
if (speed>=0){
47+
pwmWrite(chA,speed);
48+
pwmWrite(chB,0);
49+
}
50+
else{
51+
pwmWrite(chA,0);
52+
pwmWrite(chB,-speed);
53+
}
54+
}
55+
56+
void stop(){
57+
setSpeed(0);
58+
}
59+
};
60+
61+
#endif

examples/test/test.ino

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,42 @@
11
#include "Arduino_Robot_Firmware.h"
22

33
Encoder enc_right(TIM5);
4-
Encoder enc_left(TIM3);
5-
RGBled led1(LED_1_RED, LED_1_GREEN, LED_1_BLUE);
4+
//Encoder enc_left(TIM3);
5+
6+
DCmotor motor_right(MOTOR_RIGHT_A,MOTOR_RIGHT_A_CH,MOTOR_RIGHT_B,MOTOR_RIGHT_B_CH);
7+
DCmotor motor_left(MOTOR_LEFT_A,MOTOR_LEFT_A_CH,MOTOR_LEFT_B,MOTOR_LEFT_B_CH);
68

79

810
void setup(){
911
Serial.begin(115200);
1012
Serial.println("Start");
13+
Serial.println("af2");
14+
AF_Tim2_pwm();
15+
Serial.println("af5");
1116
AF_Tim5_pins_encoder();
12-
AF_Tim3_pins_encoder();
17+
//AF_Tim3_pins_encoder();
18+
Serial.println("encoder");
1319
enc_right.begin();
14-
enc_left.begin();
20+
//enc_left.begin();
21+
Serial.println("motor right");
22+
motor_right.begin();
23+
Serial.println("motor left");
24+
motor_left.begin();
1525

1626
}
1727

1828
void loop(){
19-
Serial.print(enc_right.getCount());
20-
if (enc_right.getCount()>0){
21-
led1.setBlue(HIGH);
22-
led1.setRed(LOW);
23-
}
24-
else{
25-
led1.setBlue(LOW);
26-
led1.setRed(HIGH);
29+
int k=-4096;
30+
while(k<4096){
31+
Serial.print(enc_right.getCount());
32+
Serial.print(" ");
33+
//Serial.print(enc_left.getCount());
34+
Serial.print(" ");
35+
Serial.print(k);
36+
Serial.print("\n");
37+
motor_right.setSpeed(k);
38+
motor_left.setSpeed(k);
39+
delay(10);
40+
k+=10;
2741
}
28-
Serial.print(" ");
29-
Serial.println(enc_left.getCount());
30-
delay(10);
3142
}

pinout_definitions.h

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@
66
#define ENC_RIGHT_TIMER TIM2
77
#define ENC_RIGHT_A PA_0
88
#define ENC_RIGHT_B PA_1
9-
#define MOTOR_RIGHT_A PA_2
10-
#define MOTOR_RIGHT_B PA_3
9+
#define MOTOR_RIGHT_A PA2
10+
#define MOTOR_RIGHT_A_CH 3
11+
#define MOTOR_RIGHT_B PA3
12+
#define MOTOR_RIGHT_B_CH 4
1113

1214
// Left Motor
1315
#define ENC_LEFT_TIMER TIM3
14-
#define ENC_RIGHT_A PC_6
15-
#define ENC_RIGHT_B PC_7
16-
#define MOTOR_RIGHT_A PA_15
17-
#define MOTOR_RIGHT_B PB_3
16+
#define ENC_LEFT_A PC_6
17+
#define ENC_LEFT_B PC_7
18+
#define MOTOR_LEFT_A PA15
19+
#define MOTOR_LEFT_A_CH 1
20+
#define MOTOR_LEFT_B PB3
21+
#define MOTOR_LEFT_B_CH 2
1822

1923

2024
// Leds

0 commit comments

Comments
 (0)