你(们)好。
我想编写一个代码、以启动我的 BLDC。 我想将电压和频率设置为两个所需的值。 使用 PWM 时、电机应从零开始到所需的值、例如斜坡功能。 代码应像变频器一样工作。
对于代码、我将执行实验11、并添加了一些行。 当我选择低电压(3伏)和低频率(10 Hz)时、电机开始旋转。 但代码应适用于每个频率和电压。
我希望有人会有一个有帮助的想法。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
你(们)好。
我想编写一个代码、以启动我的 BLDC。 我想将电压和频率设置为两个所需的值。 使用 PWM 时、电机应从零开始到所需的值、例如斜坡功能。 代码应像变频器一样工作。
对于代码、我将执行实验11、并添加了一些行。 当我选择低电压(3伏)和低频率(10 Hz)时、电机开始旋转。 但代码应适用于每个频率和电压。
我希望有人会有一个有帮助的想法。
我为我的代码添加了标头和源文件("hochlauf.h"和"hochlauf.c")。 我发现、有一个数学块(rampgen)、它会生成一个斜坡(我想)。 我复制了项目文件夹中的这个头文件。 是否可以使用此宏来斜升频率? 我不知道变量"Stepanglemax"和"Stepanglem"是什么意思以及它们应该得到什么值。
由于我使用的是德国自变量捆、我会向您解释:
***_soll =设定值
***_ist =实际值
在这里、我的代码:
---- 霍克劳夫
#ifndef HOCHLAUF_H_
#define HOCHLAUF_H_
#include "sw/modules/math/src/32b/math.h"
#include "sw/modules/IQMath/src/32b/IQmathLib.h"
#include "user.h"
#include "sw/modules/est/src/est_states.h"
#include "rampgen.h"
#define USER_MATH_CONST1 ((float_t)((float_t) 0.06)/((float_t)(MATH_two_PI)))
#define USER_TS ((float_t)((float_t)(1)/((float_t) USER_EST_FREQ_Hz))
#define USER_MATH_CONST2 ((float_t)(50*MATH_two_pi*USER_TS)
typedef 结构_HOCHLAUF_Obj_
{
float_t 相位;
float_t freq_soll;
float_t freq_ist;
float_t 振幅_soll;
float_t 振幅_ist;
float_t inc_u;
EST_State_e estState;
} HOCHLAUF_Obj;
typedef struct _HOCHLAUF_Obj_* HOCHLAUF_Handle;
HOCHLAUF_Handle HOCHLAUF_INIT (void *pMemory、const size_t numBytes);
void HOCHLAUF_setParams (HOCHLAUF_Handle handle);
void HOCHLAUF_RESET (HOCHLAUF_Handle handle);
void HOCHLAUF_run (HOCHLAUF_Handle handle、MATH_vec2 * pVab);
void HOCHLAUF_setIdle (HOCHLAUF_Handle handle);
EST_State_e HOCHLAUF_getState (HOCHLAUF_Handle handle);
void HOCHLAUF_setRunning (HOCHLAUF_Handle handle);
#endif /* HOCHLAUF_H_*
----霍克劳夫 c ----
#include "hochlauf.h"
HOCHLAUF_Handle HOCHLAUF_INIT (void *pMemory、const size_t numBytes)
{
HOCHLAUF_Handle handle;
if (numBytes < sizeof (HOCHLAUF_Obj))
{
返回((HOCHLAUF_Handle) NULL);
}
//分配句柄
Handle =(HOCHLAUF_Handle) pMemory;
返回(句柄);
}
void HOCHLAUF_setParams (HOCHLAUF_Handle handle)
{
HOCHLAUF_Obj *obj =(HOCHLAUF_Obj*)句柄;
obj->sulation_soll = 3;
obj->national_ist = 0;
obj->inc_u = 0.5;
obj->freq_soll = 5* MATH_two_pi;
obj->freq_ist = 0;
obj->phase = 0;
obj->estState = EST_State_Idle;
}
void HOCHLAUF_RESET (HOCHLAUF_Handle handle)
{
HOCHLAUF_Obj *obj =(HOCHLAUF_Obj*)句柄;
obj->phase = 0;
}
void HOCHLAUF_run (HOCHLAUF_Handle handle、MATH_vec2 * pVab)
{
HOCHLAUF_Obj *obj =(HOCHLAUF_Obj*)句柄;
if (obj->estState ==EST_State_OnLine)
{
RAMPGEN rg1 = RAMPGEN_DEFAULTS;
rg1.Freq = 0;
RG_MACRO (rg1);
obj->freq_ist = rg1.out;
//Abfrage ob frequenz_Soll erreicht ist
if (obj->freq_ist >obj->freq_soll)
obj->freq_ist = obj->freq_soll;
float_t PHASE_OLD = obj->PHASE;
obj->phase =(obj->freq_ist * user_TS + PHASE_OLD);
if (obj->phase > MATH_Two _PI) //Abfrage nach 2 Pi
obj->phase = obj->phase - MATH_two_pi;
obj->sample_ist = obj->freq_ist * obj->inc_u;// Erhöhen der Amplitude
if (obj->page_ist > obj->page_soll)// Abfrage ob Amplanduren_Solwert erreicht ist
obj->幅度_ist = obj->幅度_soll;
_IQ 放大器=_IQ (obj->vamp_ist/USER_IQ_FULL_SCALE_VOLTAGE_V);
_iq phase _IQ =_IQ (obj->phase / Math_two_pi);
pVab->value[0]=_IQmpy (amp、_IQsincPU (PHASE_IQ)); //β- Komponente
pVab->value[1]=_IQmpy (amp、_IQcosPU (PHASE_IQ)); // alpha-Komponente
}
其他
{
obj->phase = 0;
pVab->value[0]= 0;
pVab->value[1]= 0;
}
}
void HOCHLAUF_setIdle (HOCHLAUF_Handle handle)
{
HOCHLAUF_Obj *obj =(HOCHLAUF_Obj*)句柄;
obj->phase = 0;
obj->estState = EST_State_Idle;
}
void HOCHLAUF_setRunning (HOCHLAUF_Handle handle)
{
HOCHLAUF_Obj *obj =(HOCHLAUF_Obj*)句柄;
obj->estState = EST_State_OnLine;
}
EST_State_e HOCHLAUF_getState (HOCHLAUF_Handle handle)
{
HOCHLAUF_Obj *obj =(HOCHLAUF_Obj*)句柄;
返回 obj->estState;
}
---结束---
我尝试使用该代码启动 BLDC、但电机未旋转。
我希望你能帮助我。
此致!