Files

80 lines
2.5 KiB
C
Raw Permalink Normal View History

#ifndef _PWM_H_
#define _PWM_H_
#include "apt32f102.h"
#include "apt32f102_ept.h"
#define PWM_OUT_VAL_MAX 3000
#define PWM_OUT_VAL_MIN 0
#define BRIGHTNESS_MAX 100
#define BRIGHTNESS_MIN 0
#define BRIGHTNESS_UP_LIMIT 100
#define BRIGHTNESS_DOWN_LIMIT 0
typedef enum
{
PWM_OUT_CH1 = 0x00,
PWM_OUT_CH2,
PWM_OUT_CH3,
PWM_OUT_CH4,
PWM_OUT_CH_MAX,
}PWM_CHN_e;
typedef enum{
PWMA_Decreasing = 0, //PWM调节方向 - 递减
PWMA_Ascending, //PWM调节方向 - 递增
PWMA_Nochange, //PWM调节方向 - 不调节
}PWM_ADJUST_ORIENTATION;
typedef struct{
U8_T irqEnable; //PWM控制中断使能状态
U8_T allBrightness; //全局调光
U8_T allBrightnessUpLimit; //全局调光上限百分比
U8_T allBrightnessDownLimit; //全局调光下限百分比
U8_T brightnessCurr[PWM_OUT_CH_MAX]; //当前PWM 百分比亮度
U8_T switchState[PWM_OUT_CH_MAX];
U8_T controlFlag[PWM_OUT_CH_MAX];
U8_T addOrDecFlag[PWM_OUT_CH_MAX];
U16_T allPwmUpLimit; //全局可调上限
U16_T allPwmDownLimit; //全局可调下限
U16_T pwmValCurr[PWM_OUT_CH_MAX]; //当前PWM
U16_T pwmValTarget[PWM_OUT_CH_MAX]; //目标PWM
U16_T gradualTime[PWM_OUT_CH_MAX]; //调节时间 , 单位ms
float pwmStep[PWM_OUT_CH_MAX]; //步进值
float pwmFloatValCurr[PWM_OUT_CH_MAX]; //当前PWM - 浮点类型
}PWM_CONTROL_T;
typedef struct{
U8_T enable[PWM_OUT_CH_MAX]; //自动调节使能状态 0x01:使能0x00:未使能
U8_T adjMode[PWM_OUT_CH_MAX]; //0x00:调节到顶端停止 0x01:循环调节 0x02:停止调节
U8_T adjDir[PWM_OUT_CH_MAX]; //0x00:递减 0x01:递增 0x02:与上次命令相反
float pwmStep[PWM_OUT_CH_MAX]; //PWM步进值
U32_T pwmStepTime[PWM_OUT_CH_MAX]; //步进时间 单位ms
U32_T pwmStepTick[PWM_OUT_CH_MAX]; //步进时间戳 单位ms
}PWM_AUTO_ADJUST_T;
extern PWM_CONTROL_T g_pwm;
extern PWM_AUTO_ADJUST_T g_pwmAutoAdj;
void PWM_Init(void);
void PWM_SetUpLimitVal(U8_T val);
void PWM_SetDownLimitVal(U8_T val);
void Pwm_SetAllBrightness(U8_T val);
void PWM_SetOutDuty(U8_T index,U16_T val);
void PWM_SetCHGradualTime(U8_T index, U16_T val);
void Pwm_SetOnOffState(U8_T index, U8_T state);
void PWM_SetOutBrightness(U8_T index, U8_T brightness);
void PWM_SetAutoAdjust(U8_T index,U8_T mode,U8_T adj,U16_T adj_time);
void PWM_Timer_Enable(void);
void PWM_Timer_Disable(void);
void PWM_Timer_1ms_Task(void);
#endif