You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

81 lines
2.7 KiB

#include "ozone_pwm_control.h"
uint32_t s_hardware_frequency; //单位ms,保存现在的PWM频率
uint32_t s_hardware_duty; //单位ms,保存现在的PWM占空比
uint32_t s_large_period; //单位ms,保存现在的定时周期
uint32_t s_large_duty = 100; //单位ms,保存现在的定时占空比
uint32_t begin_ticket;
bool ozone_pwm_control_enable_falg = false;
void HOOK_pwm_module_set_pwm_duty(uint32_t frequency, uint32_t duty);
void HOOK_pwm_stop(void);
bool HOOK_pwm_is_enable(void);
static void prv_update_begin_ticket(void) {
begin_ticket = get_sys_ticket(); //更新大周期的开始时间(间歇时间的开始的时间)
}
void ozone_pwm_control_enable(void) { ozone_pwm_control_enable_falg = true; }
void ozone_pwm_control_disable(void) { ozone_pwm_control_enable_falg = false; }
bool ozone_pwm_control_is_enable(void) { return ozone_pwm_control_enable_falg; }
/**
* @brief 一直工作的时间定时的占空比为100,
* 间歇时间设置300000
* @param freq
* @param duty
*/
void ozone_pwm_control_module_set_pwm_output_1(uint32_t large_period, uint8_t large_duty) {
s_large_period = large_period;
s_large_duty = large_duty;
prv_update_begin_ticket();
ozone_pwm_control_enable();
if (large_duty == 100) {
ozone_pwm_control_disable();
}
}
/**
* @brief 定时和PWM
*
* @param hardware_period pwm频率
* @param hardware_duty pwm占空比
* @param large_period 定时周期
* @param large_duty 定时占空比
*/
void ozone_pwm_control_module_set_pwm_output_2(uint32_t hardware_period, uint8_t hardware_duty, uint32_t large_period,
uint8_t large_duty) {
s_hardware_frequency = hardware_period;
s_hardware_duty = hardware_duty;
s_large_period = large_period;
s_large_duty = large_duty;
prv_update_begin_ticket();
ozone_pwm_control_enable();
HOOK_pwm_module_set_pwm_duty(hardware_period, hardware_duty);
if (large_duty == 100) {
ozone_pwm_control_disable();
}
}
void ozone_pwm_control_module_stop_pwm(void) {}
void ozone_pwm_control_module_loop(void) {
static uint32_t hardware_frequency;
static uint32_t hardware_duty;
if (ozone_pwm_control_is_enable() == false) { //没有使能直接退出
HOOK_pwm_stop();
return;
}
if (port_haspassedms(begin_ticket) % s_large_period <= s_large_period * s_large_duty / 100) {
if (!HOOK_pwm_is_enable()) {
printf("set work\r\n");
HOOK_pwm_module_set_pwm_duty(hardware_frequency, hardware_duty);
}
} else {
if (HOOK_pwm_is_enable()) {
printf("set rest\r\n");
hardware_frequency = s_hardware_frequency; //将关闭之前的频率进行保存
hardware_duty = s_hardware_duty; //将关闭之前的占空比进行保存
HOOK_pwm_stop();
}
}
}