144 lines
4.0 KiB
C
144 lines
4.0 KiB
C
/*
|
|
|
|
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 <http://www.gnu.org/licenses/>.
|
|
|
|
Author: Houtouridis Christos <houtouridis.ch@gmail.com>
|
|
Date: 11/2011
|
|
Version: 0.1
|
|
|
|
*/
|
|
|
|
#ifndef __PWM_h__
|
|
#define __PWM_h__
|
|
|
|
|
|
#include <stm32f10x.h>
|
|
#include <stm32f10x_systick.h>
|
|
#include <stm32f10x_clock.h>
|
|
#include <math.h>
|
|
|
|
/* ================ 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__
|