环境:C语言 +STM32
有一个功能诉求:单边机通过模拟量输出控制变频器,现在我需要实现在特定的时间内,每分钟变频器的频率降低1HZ。35分钟,变频降到15HZ
现在的问题是实现不了这个功能,请指正。
代码如下:
case ZN2_NO_HEAT:
{
set_max_out(100); // 加热棒100%输出;
set_pwm1(znhzj); //此项为输出的比例值 已经定义为static uint16_t znhzj = 50;
bc_zn2_run.tick = HAL_GetTick();
if((HAL_GetTick()-bc_zn2_run.tick)>10000) //10秒
{
count++;
if(count>210) // 35分钟
{
count = 0;
set_pwm1(15);
zn2_sta = ZN2_NO_HEAT2; // 35分钟后进入到ZN2_NO_HEAT2
}
else
{
countjs++;
if(countjs>6) //6个10秒
{
znhzj--;
set_pwm1(znhzj); // znhzj数值减1 1分钟后 set_pwm1(49) 变频输出49hz
countjs=0; //重新开始计算
}
}
bc_zn2_run.tick = HAL_GetTick();
}
}break;
<#include "pwm.h">
#ifndef _PWM_H
#define _PWM_H
#include "main.h"
#include "data_mode.h"
// 0100 风机100 加热
void set_pwm1(const uint8_t value);
uint8_t cur_pwm1();
// 0
//void set_pwm2(const uint8_t value);
//uint8_t cur_pwm2();
void pwm_task();
void pid_run(const BOOL set);
#endif // _PWM_H
你要先区分下是set_pwm1(xx);函数的功能没有实现函数你的分钟控制、35分钟控制不准确,可以固定设置set_pwm1(xx)为某个参数值例如15,25,50等等,测试set_pwm1(xx)的功能是否我的实现,没问题后再看你的count计数是否正确,就是说是否在规定的时间执行力set_pwm1(xx)函数,都没有问题的话你的功能就全部实现了
STM32F407简易变频器svpwm源码
https://blog.csdn.net/m0_71245222/article/details/124914598
如果还有其他问题,可以发出来,
1. TIM_ARRPreloadConfig(TIM2,ENABLE); //ARPE,预装载,ENABLE DISABLE
//目前是使能打开,如果不好的时候,可以试着关闭;
2. 在修改频率函数 Pluse_SetFreq(),在修改ARR寄存器的时候,一定要加上这句话;
TIM2->CNT = TIM2->CCR1;
完整语句如下:
TIM2->ARR = ePluse_clk[ch]/Feq_VAL-1;
TIM2->CCR1 = (TIM2->ARR+1)/2;
TIM2->CNT = TIM2->CCR1; //这句话必加!