/* PWM.h - PWM API header file. includes: PWM_Output_Init, PWM_Enable, PWM_Disable, PWM_SetFreq, PWM_SetDC, PWM_SetDT Copyright (C) 2011 Houtouridis Christos (http://houtouridis.blogspot.com/) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Author: Houtouridis Christos Date: 11/2011 Version: 0.1 */ #ifndef __PWM_h__ #define __PWM_h__ #include #include #include #include /* ================ User Defines ======================*/ #define PWM_DATA_SIZE (4) #define PWM_MINIMUM_STEPS (100) #define PWM_STD_DC (40) #define PWM_STD_FREQ (10000) #define PWM_DEBUG_MODE (1) /* ========= General Defines ========*/ #define PWM_MAXIMUM_STEPS (0xFFFF) #define PWM_DT_A_MAX (0x7F) #define PWM_DT_B_MAX (0xFE) #define PWM_DT_C_MAX (0x1F8) #define PWM_DT_D_MAX (0x3F0) #define PWM_DTG_A_MASK (0) #define PWM_DTG_B_MASK (0x80) #define PWM_DTG_C_MASK (0xC0) #define PWM_DTG_D_MASK (0xE0) #define PWM_TIM_CCMR1_1_MODE1 ((uint16_t)0x0060) #define PWM_TIM_CCMR1_1_MODE2 ((uint16_t)0x0070) #define PWM_TIM_CCMR1_2_MODE1 ((uint16_t)0x6000) #define PWM_TIM_CCMR1_2_MODE2 ((uint16_t)0x7000) #define PWM_TIM_CCMR2_3_MODE1 ((uint16_t)0x0060) #define PWM_TIM_CCMR2_3_MODE2 ((uint16_t)0x0060) #define PWM_TIM_CCMR2_4_MODE1 ((uint16_t)0x6000) #define PWM_TIM_CCMR2_4_MODE2 ((uint16_t)0x7000) /*================ General Data Types ======================*/ typedef enum { TIM_CH1, TIM_CH1N, TIM_CH1CMP, TIM_CH2, TIM_CH2N, TIM_CH2CMP, TIM_CH3, TIM_CH3N, TIM_CH3CMP, TIM_CH4 }PWM_Channel_t; /* See User manual page 257 and 227 */ typedef enum { PWM_MODE_1_UP, PWM_MODE_1_DOWN, PWM_MODE_2_UP, PWM_MODE_2_DOWN }PWM_Mode_t; typedef uint16_t PWM_PSC_t; // Timer typedefs typedef TIM_TypeDef PWM_Timer_t; typedef uint32_t PWM_Timer_Freq_t; // PWM typedefs typedef float PWM_Freq_t; typedef float PWM_DC_t; typedef float PWM_DT_t; typedef uint8_t PWM_DTG_t; typedef volatile struct { PWM_Timer_t *tim; PWM_Timer_Freq_t tim_freq; PWM_Channel_t ch; PWM_Mode_t mode; PWM_Freq_t freq; PWM_DC_t dc; PWM_DT_t dt; }PWM_t; typedef enum { PWM_EXIT_OK, PWM_EXIT_ERROR }PWM_EXIT_t; /*================ Static Functions ======================*/ #define PWM_DTG_A(__dt, __tfreq) ( (PWM_DTG_t)(__dt * __tfreq) ) #define PWM_DTG_B(__dt, __tfreq) ( (PWM_DTG_t)(((__dt * __tfreq) / 2 ) - 64 ) ) #define PWM_DTG_C(__dt, __tfreq) ( (PWM_DTG_t)(((__dt * __tfreq) / 8 ) - 32 ) ) #define PWM_DTG_D(__dt, __tfreq) ( (PWM_DTG_t)(((__dt * __tfreq) / 16) - 32 ) ) /*================ Exported Functions ======================*/ PWM_EXIT_t PWM_Output_Init (PWM_t *pwm); PWM_EXIT_t PWM_Enable (PWM_t *pwm); PWM_EXIT_t PWM_Disable (PWM_t *pwm); PWM_EXIT_t PWM_SetFreq (PWM_t *pwm, PWM_Freq_t f); PWM_EXIT_t PWM_SetDC (PWM_t *pwm, PWM_DC_t dc); PWM_EXIT_t PWM_SetDT (PWM_t *pwm, PWM_DT_t dt); #endif //#ifndef __PWM_h__