1 | // Init der GPIO's
|
2 |
|
3 | void InitGPIO (void)
|
4 | {
|
5 | // GPIO für PWMServo (PA1)
|
6 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
|
7 |
|
8 | GPIO_InitTypeDef GPIO_InitStructurePWMServo; // GPIOC Configuration: TIM2 CH2 (PA1)
|
9 | GPIO_InitStructurePWMServo.GPIO_Pin=GPIO_Pin_1; // PWM Signalausgang an PA1
|
10 | GPIO_InitStructurePWMServo.GPIO_Mode=GPIO_Mode_AF; // _IN _AF:Alternate _AN:Analog
|
11 | GPIO_InitStructurePWMServo.GPIO_Speed=GPIO_Speed_100MHz; // _2MHz _10MHz
|
12 | GPIO_InitStructurePWMServo.GPIO_OType=GPIO_OType_PP; // _PP:Push/Pull _OD:OpenDrain
|
13 | GPIO_InitStructurePWMServo.GPIO_PuPd=GPIO_PuPd_UP; // _No Pull _UP _DOWN
|
14 | GPIO_Init(GPIOA,&GPIO_InitStructurePWMServo);
|
15 |
|
16 | GPIO_PinAFConfig(GPIOA,GPIO_PinSource1,GPIO_AF_TIM2); // TIM2, CH2, AF2
|
17 |
|
18 |
|
19 |
|
20 | // GPIO für PWMEngine (PA2)
|
21 | RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
|
22 |
|
23 | GPIO_InitTypeDef GPIO_InitStructurePWMEngine; // GPIOC Configuration: TIM5 CH3 (PA2)
|
24 | GPIO_InitStructurePWMEngine.GPIO_Pin=GPIO_Pin_2; // PWM Signalausgang an PA2
|
25 | GPIO_InitStructurePWMEngine.GPIO_Mode=GPIO_Mode_AF; // _IN _AF:Alternate _AN:Analog
|
26 | GPIO_InitStructurePWMEngine.GPIO_Speed=GPIO_Speed_100MHz; // _2MHz _10MHz
|
27 | GPIO_InitStructurePWMEngine.GPIO_OType=GPIO_OType_PP; // _PP:Push/Pull _OD:OpenDrain
|
28 | GPIO_InitStructurePWMEngine.GPIO_PuPd=GPIO_PuPd_UP; // _No Pull _UP _DOWN
|
29 | GPIO_Init(GPIOA,&GPIO_InitStructurePWMEngine);
|
30 |
|
31 | GPIO_PinAFConfig(GPIOA,GPIO_PinSource2,GPIO_AF_TIM5); // TIM5, CH3, AF2
|
32 |
|
33 | }
|
34 |
|
35 |
|
36 |
|
37 |
|
38 | // Init der Timer
|
39 |
|
40 | void InitPWMServo (void)
|
41 | {
|
42 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); // 42 MHz * 2 = 84 MHz
|
43 |
|
44 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructurePWMServo;
|
45 | TIM_TimeBaseStructurePWMServo.TIM_Period=400;
|
46 | TIM_TimeBaseStructurePWMServo.TIM_Prescaler=839;
|
47 | TIM_TimeBaseStructurePWMServo.TIM_CounterMode=TIM_CounterMode_Up;
|
48 | TIM_TimeBaseStructurePWMServo.TIM_ClockDivision=0;
|
49 | TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructurePWMServo);
|
50 |
|
51 | TIM_OCInitTypeDef TIM_OCInitStructurePWMServo;
|
52 | TIM_OCInitStructurePWMServo.TIM_OCMode=TIM_OCMode_PWM1;
|
53 | TIM_OCInitStructurePWMServo.TIM_OutputState=TIM_OutputState_Enable;
|
54 | TIM_OCInitStructurePWMServo.TIM_Pulse=CCR2Servo_Val; // CCR2Servo_Val = 30 für Servo Mittelstellung zu Beginn
|
55 | TIM_OCInitStructurePWMServo.TIM_OCPolarity=TIM_OCPolarity_High;
|
56 | TIM_OC2Init(TIM2,&TIM_OCInitStructurePWMServo);
|
57 |
|
58 | TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable);
|
59 |
|
60 | TIM_Cmd(TIM2,ENABLE);
|
61 |
|
62 | }
|
63 |
|
64 |
|
65 | void InitPWMEngine (void)
|
66 | {
|
67 | RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE); // 42 MHz * 2 = 84 MHz
|
68 |
|
69 |
|
70 | TIM_TimeBaseInitTypeDef TIM_TimeBaseStructurePWMEngine;
|
71 | TIM_TimeBaseStructurePWMEngine.TIM_Period=30;
|
72 | TIM_TimeBaseStructurePWMEngine.TIM_Prescaler=249;
|
73 | TIM_TimeBaseStructurePWMEngine.TIM_CounterMode=TIM_CounterMode_Up;
|
74 | TIM_TimeBaseStructurePWMEngine.TIM_ClockDivision=0;
|
75 | TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStructurePWMEngine);
|
76 |
|
77 | TIM_OCInitTypeDef TIM_OCInitStructurePWMEngine;
|
78 | TIM_OCInitStructurePWMEngine.TIM_OCMode=TIM_OCMode_PWM1;
|
79 | TIM_OCInitStructurePWMEngine.TIM_OutputState=TIM_OutputState_Enable;
|
80 | TIM_OCInitStructurePWMEngine.TIM_Pulse=CCR3Engine_Val; // CCR3Engine_Val= 0 für Motorstillstand zu Beginn
|
81 | TIM_OCInitStructurePWMEngine.TIM_OCPolarity=TIM_OCPolarity_High;
|
82 | TIM_OC3Init(TIM5,&TIM_OCInitStructurePWMEngine);
|
83 |
|
84 | TIM_OC3PreloadConfig(TIM5,TIM_OCPreload_Enable);
|
85 |
|
86 | TIM_Cmd(TIM5,ENABLE);
|
87 | }
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | // Main - Abfahren von Min bis Max Werte zum testen des Servo Motors und des DC Motors
|
94 |
|
95 |
|
96 | for (WertServo = Servo_MIN_VALUE; WertServo <= Servo_MAX_VALUE; WertServo = WertServo+5)
|
97 | {
|
98 | int a;
|
99 |
|
100 | for (a = 0; a < 0x000AFFFF; ++a)
|
101 | {
|
102 | }
|
103 |
|
104 | SERVO_PWM_VALUE = WertServo; // #define SERVO_PWM_VALUE TIM2->CCR2
|
105 | }
|
106 |
|
107 |
|
108 |
|
109 | for (WertEngine = 0; WertEngine <= 25; WertEngine = WertEngine+1)
|
110 | {
|
111 | int i;
|
112 |
|
113 | for (i = 0; i < 0x000AFFFF; ++i)
|
114 | {
|
115 | }
|
116 |
|
117 | ENGINE_PWM_VALUE = WertEngine; // #define ENGINE_PWM_VALUE TIM5->CCR3
|
118 | }
|