/
main.h
executable file
·160 lines (110 loc) · 6.21 KB
/
main.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/*
* TongSheng TSDZ2 motor controller firmware/
*
* Copyright (C) Casainho, 2018.
*
* Released under the GPL License, Version 3
*/
#ifndef _MAIN_H_
#define _MAIN_H_
#include "config.h"
//#define DISABLE_PWM_CHANNELS_1_3
#define PWM_CYCLES_COUNTER_MAX 3800 // 5 erps minimum speed; 1/5 = 200ms; 200ms/52.6us = 3800
#define PWM_CYCLES_SECOND 19011L // 1 / 64us(PWM period)
#define PWM_DUTY_CYCLE_MAX 254
#define PWM_DUTY_CYCLE_MIN 20
#define MIDDLE_PWM_DUTY_CYCLE_MAX (PWM_DUTY_CYCLE_MAX/2)
#define FIELD_WEAKENING_ANGLE_MAX 8 // 8 * 1.4 = 11 | tested by Casainho on 2020.04.23 and gives up to 125% more motor speed
#define MOTOR_ROTOR_ANGLE_90 (63 + MOTOR_ROTOR_OFFSET_ANGLE)
#define MOTOR_ROTOR_ANGLE_150 (106 + MOTOR_ROTOR_OFFSET_ANGLE)
#define MOTOR_ROTOR_ANGLE_210 (148 + MOTOR_ROTOR_OFFSET_ANGLE)
#define MOTOR_ROTOR_ANGLE_270 (191 + MOTOR_ROTOR_OFFSET_ANGLE)
#define MOTOR_ROTOR_ANGLE_330 (233 + MOTOR_ROTOR_OFFSET_ANGLE)
#define MOTOR_ROTOR_ANGLE_30 (20 + MOTOR_ROTOR_OFFSET_ANGLE)
// motor maximum rotation
#define MOTOR_OVER_SPEED_ERPS 700 // 675 is equal to 120 cadence, as TSDZ2 has a reduciton ratio of 41.8
#define MOTOR_SPEED_FIELD_WEAKEANING_MIN 250
// throttle
#define THROTTLE_FILTER_COEFFICIENT 1 // see note below
#define ADC_THROTTLE_THRESHOLD 10 // value in ADC 8 bits step
/*---------------------------------------------------------
NOTE: regarding throttle
Possible values: 0, 1, 2, 3, 4, 5, 6
0 equals to no filtering and no delay, higher values
will increase filtering but will also add a bigger delay.
---------------------------------------------------------*/
// walk assist and cruise
#define WALK_ASSIST_CRUISE_THRESHOLD_SPEED_X10 80 // 8.0 km/h
#define CRUISE_PID_KP 7 // 48 volt motor: 6, 36 volt motor: 7
#define CRUISE_PID_KI 0.35 // 48 volt motor: 0.5, 36 volt motor: 0.35
#define CRUISE_PID_INTEGRAL_LIMIT 1000
#define CRUISE_PID_KD 0
// throttle ADC values
#define ADC_THROTTLE_MIN_VALUE 47
#define ADC_THROTTLE_MAX_VALUE 176
/*---------------------------------------------------------
NOTE: regarding throttle ADC values
Max voltage value for throttle, in ADC 8 bits step,
each ADC 8 bits step = (5 V / 256) = 0.0195
---------------------------------------------------------*/
// torque sensor
/*---------------------------------------------------------
NOTE: regarding torque sensor
Force (Nm) = weight Kg * 9.81 * 0.17 (0.17 = arm cranks size)
---------------------------------------------------------*/
#define TORQUE_SENSOR_WEIGHT_TO_FORCE_X10 17
/*---------------------------------------------------------
NOTE: regarding torque sensor
NOTE: the following information is incorrect as the torque sensor output is not linear.
Torque (force) value found experimentaly.
Measured with a cheap digital hook scale, we found that
each torque sensor unit is equal to 0.52 Nm. Using the
scale it was found that 0.33 kg was measured as 1 torque
sensor unit.
Force (Nm) = 1 Kg * 9.18 * 0.17 (0.17 = arm cranks size)
---------------------------------------------------------*/
#define PEDAL_TORQUE_X100 52
// PAS
#define PAS_NUMBER_MAGNETS 20 // see note below
#define PAS_NUMBER_MAGNETS_X2 (PAS_NUMBER_MAGNETS * 2)
#define PAS_ABSOLUTE_MAX_CADENCE_PWM_CYCLE_TICKS (7625 / PAS_NUMBER_MAGNETS) // max hard limit to 150 RPM PAS cadence, see note below
#define PAS_ABSOLUTE_MIN_CADENCE_PWM_CYCLE_TICKS (114375 / PAS_NUMBER_MAGNETS) // min hard limit to 10 RPM PAS cadence, see note below
/*---------------------------------------------------------
NOTE: regarding PAS
PAS_NUMBER_MAGNETS = 20, was validated on August 2018
by Casainho and jbalat
x = (1/(150RPM/60)) / (0.000064)
PAS_ABSOLUTE_MAX_CADENCE_PWM_CYCLE_TICKS =
(x / PAS_NUMBER_MAGNETS)
---------------------------------------------------------*/
// Wheel speed sensor
#define WHEEL_SPEED_SENSOR_MAX_PWM_CYCLE_TICKS 165 // something like 200 m/h with a 6'' wheel
#define WHEEL_SPEED_SENSOR_MIN_PWM_CYCLE_TICKS 39976 // could be a bigger number but will make for a slow detection of stopped wheel speed
// default values for ramp up
#define DEFAULT_VALUE_RAMP_UP_AMPS_PER_SECOND_X10 50 // 5.0 amps per second ramp up
// ADC battery voltage measurement
#define ADC10BITS_BATTERY_VOLTAGE_PER_ADC_STEP_X512 44
#define ADC10BITS_BATTERY_VOLTAGE_PER_ADC_STEP_X256 (ADC10BITS_BATTERY_VOLTAGE_PER_ADC_STEP_X512 >> 1)
#define ADC8BITS_BATTERY_VOLTAGE_PER_ADC_STEP_INVERSE_X256 (ADC10BITS_BATTERY_VOLTAGE_PER_ADC_STEP_X256 << 2)
/*---------------------------------------------------------
NOTE: regarding ADC battery voltage measurement
0.344 per ADC_8bits step:
17.9 V --> ADC_8bits = 52;
40 V --> ADC_8bits = 116;
This signal is atenuated by the opamp 358.
---------------------------------------------------------*/
// ADC battery current measurement and filter
#define ADC10BITS_BATTERY_CURRENT_PER_ADC_STEP_X512 80 // 1A per 6.4 steps of ADC_10bits (0.156A per each ADC step)
#define READ_BATTERY_CURRENT_FILTER_COEFFICIENT 2
#define READ_MOTOR_CURRENT_FILTER_COEFFICIENT 2
#define READ_BATTERY_VOLTAGE_FILTER_COEFFICIENT 2
/*---------------------------------------------------------
NOTE: regarding ADC battery current measurement and
filter coefficients
Possible values: 0, 1, 2, 3, 4, 5, 6
0 equals to no filtering and no delay, higher values
will increase filtering but will also add a bigger delay.
---------------------------------------------------------*/
// motor temperature filter coefficient
#define READ_MOTOR_TEMPERATURE_FILTER_COEFFICIENT 5
#endif // _MAIN_H_