2#include "../../hardware_api.h"
4#if defined(__AVR_ATmega32U4__)
7#pragma message("SimpleFOC: compiling for Arduino/ATmega32U4")
11void _pinHighFrequency(
const int pin){
14 if (pin == 3 || pin == 11 ) {
15 TCCR0A = ((TCCR0A & 0b11111100) | 0x01);
16 TCCR0B = ((TCCR0B & 0b11110000) | 0x01);
18 else if (pin == 9 || pin == 10 )
19 TCCR1B = ((TCCR1B & 0b11111000) | 0x01);
21 TCCR3B = ((TCCR3B & 0b11111000) | 0x01);
22 else if ( pin == 6 || pin == 13 ) {
24 PLLFRQ= ((PLLFRQ & 0b11001111) | 0x20);
25 TCCR4B = ((TCCR4B & 0b11110000) | 0xB);
26 TCCR4D = ((TCCR4D & 0b11111100) | 0x01);
28 if (pin == 6) TCCR4A = 0x82;
29 else if (pin == 13) TCCR4C |= 0x09;
41 _pinHighFrequency(
pinA);
44 .pwm_frequency = pwm_frequency,
56 _pinHighFrequency(
pinA);
57 _pinHighFrequency(
pinB);
60 .pwm_frequency = pwm_frequency,
72 _pinHighFrequency(
pinA);
73 _pinHighFrequency(
pinB);
74 _pinHighFrequency(
pinC);
77 .pwm_frequency = pwm_frequency,
119 _pinHighFrequency(
pin1A);
120 _pinHighFrequency(
pin1B);
121 _pinHighFrequency(
pin2A);
122 _pinHighFrequency(
pin2B);
125 .pwm_frequency = pwm_frequency,
146int _configureComplementaryPair(
int pinH,
int pinL) {
147 if( (pinH == 3 && pinL == 11 ) || (pinH == 11 && pinL == 3 ) ){
149 TCCR0A = ((TCCR0A & 0b11111100) | 0x01);
151 if(pinH == 11 ) TCCR0A = 0b10110000 | (TCCR0A & 0b00001111) ;
152 else TCCR0A = 0b11100000 | (TCCR0A & 0b00001111) ;
154 TCCR0B = ((TCCR0B & 0b11110000) | 0x01);
155 }
else if( (pinH == 9 && pinL == 10 ) || (pinH == 10 && pinL == 9 ) ){
157 TCCR1B = ((TCCR1B & 0b11111000) | 0x01);
159 if(pinH == 9 ) TCCR1A = 0b10110000 | (TCCR1A & 0b00001111) ;
160 else TCCR1A = 0b11100000 | (TCCR1A & 0b00001111) ;
161 }
else if((pinH == 6 && pinL == 13 ) || (pinH == 13 && pinL == 6 ) ){
163 PLLFRQ= ((PLLFRQ & 0b11001111) | 0x20);
164 TCCR4B = ((TCCR4B & 0b11110000) | 0xB);
165 TCCR4D = ((TCCR4D & 0b11111100) | 0x01);
189 ret_flag += _configureComplementaryPair(
pinA_h,
pinA_l);
190 ret_flag += _configureComplementaryPair(
pinB_h,
pinB_l);
191 ret_flag += _configureComplementaryPair(
pinC_h,
pinC_l);
195 .pwm_frequency = pwm_frequency,
202void _setPwmPair(
int pinH,
int pinL,
float val,
int dead_time)
204 int pwm_h =
_constrain(val-dead_time/2,0,255);
205 int pwm_l =
_constrain(val+dead_time/2,0,255);
208 if(pwm_l == 255 || pwm_l == 0)
209 digitalWrite(pinL, pwm_l ? LOW : HIGH);
const int const int const int pinC
GenericCurrentSenseParams * params
void * _configure4PWM(long pwm_frequency, const int pin1A, const int pin1B, const int pin2A, const int pin2B)
void * _configure6PWM(long pwm_frequency, float dead_zone, const int pinA_h, const int pinA_l, const int pinB_h, const int pinB_l, const int pinC_h, const int pinC_l)
void * _configure2PWM(long pwm_frequency, const int pinA, const int pinB)
void _writeDutyCycle2PWM(float dc_a, float dc_b, void *params)
void _writeDutyCycle1PWM(float dc_a, void *params)
#define SIMPLEFOC_DRIVER_INIT_FAILED
void _writeDutyCycle4PWM(float dc_1a, float dc_1b, float dc_2a, float dc_2b, void *params)
void * _configure3PWM(long pwm_frequency, const int pinA, const int pinB, const int pinC)
void _writeDutyCycle6PWM(float dc_a, float dc_b, float dc_c, PhaseState *phase_state, void *params)
void * _configure1PWM(long pwm_frequency, const int pinA)
void _writeDutyCycle3PWM(float dc_a, float dc_b, float dc_c, void *params)
float const int const int const int pinB_h
float const int const int const int const int pinB_l
const int const int pin1B
const int const int const int pin2A
float const int const int const int const int const int pinC_h
float float PhaseState * phase_state
float const int const int const int const int const int const int pinC_l
float const int const int pinA_l
analogWrite(((GenericDriverParams *) params) ->pins[1], 255.0f *dc_b)
const int const int const int const int pin2B
#define _constrain(amt, low, high)