mcpwm.h
Go to the documentation of this file.
1 /*
2  Copyright 2012-2014 Benjamin Vedder benjamin@vedder.se
3 
4  This program is free software: you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation, either version 3 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 /*
19  * mc_pwm.h
20  *
21  * Created on: 13 okt 2012
22  * Author: benjamin
23  */
24 
25 #ifndef MCPWM_H_
26 #define MCPWM_H_
27 
28 #include "conf_general.h"
29 #include "datatypes.h"
30 #include <stdbool.h>
31 
32 // Functions
33 void mcpwm_init(mc_configuration *configuration);
34 const volatile mc_configuration* mcpwm_get_configuration(void);
35 void mcpwm_set_configuration(mc_configuration *configuration);
36 void mcpwm_init_hall_table(int8_t *table);
37 void mcpwm_set_duty(float dutyCycle);
38 void mcpwm_set_pid_speed(float rpm);
39 void mcpwm_set_pid_pos(float pos);
40 void mcpwm_set_current(float current);
41 void mcpwm_set_brake_current(float current);
42 void mcpwm_brake_now(void);
43 void mcpwm_release_motor(void);
44 void mcpwm_lock(void);
45 void mcpwm_unlock(void);
46 void mcpwm_lock_override_once(void);
47 int mcpwm_get_comm_step(void);
48 float mcpwm_get_duty_cycle_set(void);
49 float mcpwm_get_duty_cycle_now(void);
51 float mcpwm_get_rpm(void);
54 const char* mcpwm_fault_to_string(mc_fault_code fault);
55 float mcpwm_get_kv(void);
56 float mcpwm_get_kv_filtered(void);
57 int mcpwm_get_tachometer_value(bool reset);
58 int mcpwm_get_tachometer_abs_value(bool reset);
59 float mcpwm_get_amp_hours(bool reset);
60 float mcpwm_get_amp_hours_charged(bool reset);
61 float mcpwm_get_watt_hours(bool reset);
62 float mcpwm_get_watt_hours_charged(bool reset);
63 float mcpwm_get_tot_current(void);
67 float mcpwm_get_tot_current_in(void);
69 void mcpwm_set_detect(void);
70 float mcpwm_get_detect_pos(void);
72 int mcpwm_get_hall_detect_result(int8_t *table);
73 int mcpwm_read_hall_phase(void);
77 void mcpwm_set_min_rpm(float rpm);
78 float mcpwm_get_min_rpm(void);
84 
85 // Interrupt handlers
86 void mcpwm_adc_inj_int_handler(void);
87 void mcpwm_adc_int_handler(void *p, uint32_t flags);
88 
89 // External variables
90 extern volatile uint16_t ADC_Value[];
91 extern volatile int ADC_curr_norm_value[];
92 extern volatile float mcpwm_detect_currents[];
93 extern volatile float mcpwm_detect_voltages[];
94 extern volatile float mcpwm_detect_currents_diff[];
95 extern volatile int mcpwm_vzero;
96 
97 /*
98  * Fixed parameters
99  */
100 #define MCPWM_SWITCH_FREQUENCY_MIN 3000 // The lowest switching frequency in Hz
101 #define MCPWM_SWITCH_FREQUENCY_MAX 40000 // The highest switching frequency in Hz
102 #define MCPWM_SWITCH_FREQUENCY_DC_MOTOR 25000 // The DC motor switching frequency
103 #define MCPWM_DEAD_TIME_CYCLES 100 // Dead time
104 #define MCPWM_RPM_TIMER_FREQ 1000000.0 // Frequency of the RPM measurement timer
105 #define MCPWM_CMD_STOP_TIME 0 // Ignore commands for this duration in msec after a stop has been sent
106 #define MCPWM_DETECT_STOP_TIME 500 // Ignore commands for this duration in msec after a detect command
107 
108 // Speed PID parameters
109 #define MCPWM_PID_TIME_K 0.001 // Pid controller sample time in seconds
110 
111 #endif /* MC_PWM_H_ */
int mcpwm_get_hall_detect_result(int8_t *table)
Definition: mcpwm.c:2386
mc_rpm_dep_struct mcpwm_get_rpm_dep(void)
Definition: mcpwm.c:2363
void mcpwm_adc_int_handler(void *p, uint32_t flags)
Definition: mcpwm.c:1805
float mcpwm_get_tot_current_in_filtered(void)
Definition: mcpwm.c:904
float mcpwm_get_watt_hours(bool reset)
Definition: mcpwm.c:996
volatile float mcpwm_detect_voltages[]
Definition: mcpwm.c:137
mc_state mcpwm_get_state(void)
Definition: mcpwm.c:792
volatile float mcpwm_detect_currents_diff[]
Definition: mcpwm.c:138
float mcpwm_get_tot_current_directional(void)
Definition: mcpwm.c:871
void mcpwm_unlock(void)
Definition: mcpwm.c:741
int mcpwm_get_tachometer_value(bool reset)
Definition: mcpwm.c:919
int mcpwm_get_comm_step(void)
Definition: mcpwm.c:758
float mcpwm_get_tot_current_in(void)
Definition: mcpwm.c:894
float mcpwm_get_duty_cycle_set(void)
Definition: mcpwm.c:762
float mcpwm_get_last_inj_adc_isr_duration(void)
Definition: mcpwm.c:2359
float mcpwm_get_duty_cycle_now(void)
Definition: mcpwm.c:766
Definition: datatypes.h:81
float mcpwm_get_detect_pos(void)
Definition: mcpwm.c:2255
float mcpwm_read_reset_avg_motor_current(void)
Definition: mcpwm.c:2296
float mcpwm_get_watt_hours_charged(bool reset)
Definition: mcpwm.c:1015
void mcpwm_set_pid_speed(float rpm)
Definition: mcpwm.c:617
mc_fault_code mcpwm_get_fault(void)
Definition: mcpwm.c:796
void mcpwm_set_pid_pos(float pos)
Definition: mcpwm.c:633
void mcpwm_lock(void)
Definition: mcpwm.c:734
int mcpwm_get_tachometer_abs_value(bool reset)
Definition: mcpwm.c:939
const volatile mc_configuration * mcpwm_get_configuration(void)
Definition: mcpwm.c:487
float mcpwm_get_amp_hours_charged(bool reset)
Definition: mcpwm.c:977
volatile int ADC_curr_norm_value[]
Definition: mcpwm.c:135
void mcpwm_init(mc_configuration *configuration)
Definition: mcpwm.c:174
void mcpwm_set_min_rpm(float rpm)
Definition: mcpwm.c:2324
float mcpwm_get_tot_current(void)
Definition: mcpwm.c:848
float mcpwm_get_tot_current_filtered(void)
Definition: mcpwm.c:860
void mcpwm_init_hall_table(int8_t *table)
Definition: mcpwm.c:510
mc_comm_mode mcpwm_get_comm_mode(void)
Definition: mcpwm.c:2351
void mcpwm_reset_hall_detect_table(void)
Definition: mcpwm.c:2370
float mcpwm_get_tot_current_directional_filtered(void)
Definition: mcpwm.c:883
float mcpwm_get_amp_hours(bool reset)
Definition: mcpwm.c:958
float mcpwm_get_switching_frequency_now(void)
Definition: mcpwm.c:776
mc_comm_mode
Definition: datatypes.h:46
void mcpwm_set_comm_mode(mc_comm_mode mode)
Definition: mcpwm.c:2347
mc_state
Definition: datatypes.h:33
void mcpwm_set_configuration(mc_configuration *configuration)
Definition: mcpwm.c:491
float mcpwm_get_min_rpm(void)
Definition: mcpwm.c:2334
Definition: datatypes.h:91
void mcpwm_set_current(float current)
Definition: mcpwm.c:654
void mcpwm_brake_now(void)
Definition: mcpwm.c:720
void mcpwm_set_detect(void)
Definition: mcpwm.c:2236
float mcpwm_read_reset_avg_cycle_integrator(void)
Definition: mcpwm.c:2310
float mcpwm_get_kv(void)
Definition: mcpwm.c:821
int mcpwm_read_hall_phase(void)
Definition: mcpwm.c:2433
volatile uint16_t ADC_Value[]
Definition: mcpwm.c:134
void mcpwm_adc_inj_int_handler(void)
Definition: mcpwm.c:1583
void mcpwm_release_motor(void)
Definition: mcpwm.c:727
volatile float mcpwm_detect_currents[]
Definition: mcpwm.c:136
float mcpwm_get_last_adc_isr_duration(void)
Definition: mcpwm.c:2355
mc_fault_code
Definition: datatypes.h:62
void mcpwm_lock_override_once(void)
Definition: mcpwm.c:748
const char * mcpwm_fault_to_string(mc_fault_code fault)
Definition: mcpwm.c:800
float mcpwm_read_reset_avg_input_current(void)
Definition: mcpwm.c:2303
volatile int mcpwm_vzero
Definition: mcpwm.c:139
void mcpwm_set_duty(float dutyCycle)
Definition: mcpwm.c:601
float mcpwm_get_rpm(void)
Definition: mcpwm.c:788
void mcpwm_set_brake_current(float current)
Definition: mcpwm.c:682
float mcpwm_get_kv_filtered(void)
Definition: mcpwm.c:833