motorcontroldemo_035/Vinclude/V_PWM_Module.h
2019-07-29 08:17:46 +03:00

174 lines
6.8 KiB
C

/*!
Copyright 2017 ÀÎ "ÍÈÈÝÒ" è ÎÎÎ "ÍÏÔ ÂÅÊÒÎÐ"
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
\file V_PWM_Module.h
\brief Ìîäóëü ðåàëèçàöèè âåêòîðíîé ØÈÌ (ñì. TPWM_Module)
\author ÎÎÎ "ÍÏÔ Âåêòîð". http://motorcontrol.ru
\version v 2.0 25/03/2016
\defgroup V_PWM_Module Ìîäóëü ðåàëèçàöèè âåêòîðíîé ØÈÌ (ñì. TPWM_Module)
@{*/
#ifndef _V_PWM_Module_
#define _V_PWM_Module_
#ifdef __cplusplus
extern "C"
{
#endif
#define _1_SQRT3 _IQ(0.5773503)
#define _2_SQRT3 _IQ(1.1547005)
//! Îãðàíè÷åíèÿ ÷àñòîòû ØÈÌ (êÃö) min
#define PWM_FREQ_MIN _IQ10(2)
//! Îãðàíè÷åíèÿ ÷àñòîòû ØÈÌ (êÃö) max
#define PWM_FREQ_MAX _IQ10(100.0)
//!Âåêòîðíàÿ 6-òè ñåêòîðíàÿ ØÈÌ
#define PWM_TYPE_6SECT_NO_SV 0
//!Ñèíóñîèäàëüíàÿ ØÈÌ
#define PWM_TYPE_SIN_PWM 1
//!Âåêòîðíàÿ 12-òè ñåêòîðíàÿ ØÈÌ
#define PWM_TYPE_12SECT_NO_SV 2
//!ØÈÌ ìåòîäîì âû÷èñëåíèÿ ôàçíûõ ïîòåíöèàëîâ
#define PWM_TYPE_FLY_12SECT 3
//!ØÈÌ äëÿ óïðàâëåíèÿ ÄÏÒ
#define PWM_TYPE_DC_DRIVE 4
//!ØÈÌ äëÿ óïðàâëåíèÿ SRM
#define PWM_TYPE_SRD 5
//! Îãðàíè÷åíèÿ âåëè÷èíû "ì¸ðòâîãî âðåìåíè", ìêñ, min
#define DEAD_BAND_MIN _IQ(0)
//! Îãðàíè÷åíèÿ âåëè÷èíû "ì¸ðòâîãî âðåìåíè", ìêñ, max
#define DEAD_BAND_MAX _IQ(10)
//! Îãðàíè÷åíèÿ âåëè÷èíû "ìèíèìàëüíîé ñêâàæíîñòè", ìêñ, min
#define GAMMA_LIMIT_MIN _IQ(0)
//! Îãðàíè÷åíèÿ âåëè÷èíû "ìèíèìàëüíîé ñêâàæíîñòè", ìêñ, max
#define GAMMA_LIMIT_MAX _IQ(10)
// Êîíñòàíòû çàãðóçêè ðåãèñòðîâ AQCTL# è AQCSFRC (ePWM)
// (îïðåäåëÿþò íàñòðîéêó ñîáûòèé äëÿ âûõîäîâ ØÈÌ)
#define AQ_EPWM_DISABLE 0x0000 //!< âñå ñîáûòèÿ çàïðåùåíû
//! Ôëàã ðàçðåøåíèÿ âíóòðåííåé ïðèâÿçêè ØÈÌ-âûõîäîâ
#define ENABLE_PULLUP 0
//!÷òî äåëàòü ïðè àïïàðàòíîé àâàðèè ñ íîæêàìè
#define TZ_STATE TZ_HIZ
/*! \class TPWM_Module
\brief Ìîäóëü ðåàëèçàöèè ØÈÌ
Êëàññ \a TPWM_Module, îñíîâàííûé íà ñòðóêòóðå SPWM_Module, ðåàëèçóåò
âåêòîðíóþ è ñêàëÿðíóþ øèðîòíî-èìïóëüñíóþ ìîäóëÿöèþ äëÿ óïðàâëåíèÿ
øåñòèêëþ÷åâûì èíâåðòîðîì. Èìååò íàñòðîéêè ìåðòâîãî âðåìåíè,
÷àñòîòû, êîððåêöèþ â çàâèñèìîñòè îò íàïðÿæåíèÿ ÇÏÒ,
êîìïåíñàöèþ ìåðòâîãî âðåìåíè.
Çàäàíèå íàïðÿæåíèÿ ïðîèñõîäèò ïî äâóì ïåðïåíäèêóëÿðíûì îñÿì àëüôà è áåòòà.
Ïðè ýòîì îñü àëüôà ñîíàïðàâëåíà ñ îñüþ À òðåõôàçíîé ñèñòåìû êîîðäèíàò. Äëÿ çàäàíèÿ íîâîãî íàïðÿæåíèÿ íóæíî
ïîìåñòèòü çàäàíèå â UalphaRef, UbetaRef è âûçâàòü update. Â çàâèñèìîñòè îò òîãî,
êàêîé òèï ØÈÌ âûáðàí â íàñòðîéêàõ (íàñòðàèâàåòñÿ ïîëüçîâàòåëåì â ïåðåìåííîé PWM_type),
ôóíêöèÿ PWM_Module_Update âûçîâåò íóæíóþ ôóíêöèþ, ðåàëèçóþùóþ òðåáóåìûé òèï ØÈÌ.
 ðåçóëüòàòå ýòîãî íà òðåõ ôàçàõ èíâåðòîðà â ñðåäíåì çà ïåðèîä ØÈÌ áóäåò ðåàëèçîâàí
òàêîé âåêòîð íàïðÿæåíèÿ, êîòîðûé çàäàí â UalphaRef, UbetaRef. ×òîáû ñîçäàòü ïåðåìåííîå
ñèíóñîèäàëüíîå íàïðÿæåíèå, òðåáóåòñÿ âðàùàòü âåêòîð çàäàíèÿ âíåøíåé ïî îòíîøåíèþ ê ìîäóëþ ØÈÌ ïðîãðàììîé.
*/
//! ñì. TPWM_Module
struct SPWM_Module {
int16 Enabled; //!< Ôëàã äëÿ ÷òåíèÿ - âêëþ÷åí ØÈÌ èëè âûêëþ÷åí.
int32 UalphaRef; //!<Çàäàíèå ïî îñè àñüôà (çàäàåòñÿ)
int32 UbetaRef; //!<Çàäàíèå ïî îñè áåòòà (çàäàåòñÿ)
int32 UPhARef; //!<Çàäàíèå ïî ôàçå A (çàäàåòñÿ)
int32 UPhBRef; //!<Çàäàíèå ïî ôàçå B (çàäàåòñÿ)
int32 UPhCRef; //!<Çàäàíèå ïî ôàçå c (çàäàåòñÿ)
int32 k_pwm; //!< Ïåðèîä òàéìåðà ØÈÌ, äëÿ ÷òåíèÿ.
int32 U_mag; //!< Òåêóùàÿ àìïëèòóäà íàïðÿæåíèÿ, äëÿ ÷òåíèÿ.
int32 U_lim; //!< Îãðàíè÷åíèå âåêòîðà íàïðÿæåíèÿ, çàäàåòñÿ
int32 GammaA; //!< Ñêâàæíîñòü ôàçû À â ðàçìåðíîñòè òàéìåðà ØÈÌ, äëÿ ÷òåíèÿ.
int32 GammaB; //!< Ñêâàæíîñòü ôàçû B â ðàçìåðíîñòè òàéìåðà ØÈÌ, äëÿ ÷òåíèÿ.
int32 GammaC; //!< Ñêâàæíîñòü ôàçû C â ðàçìåðíîñòè òàéìåðà ØÈÌ, äëÿ ÷òåíèÿ.
int16 PWM_type; //!< Òèï ØÈÌ. Ïðèíèìàåò çíà÷åíèÿ êîíñòàíò ñ ïðåôèêâîì PWM_TYPE_. Çàäàåòñÿ.
int16 PWM_typeOld; //!< Ïðåäûäóùåå çíà÷åíèÿ òèïà ØÈÌ, ñëóæåáíàÿ ïåðåìåííàÿ.
int16 sector; //!< Òåêóùèé ñåêòîð â âåêòîðíîì òèïå ØÈÌ. Äëÿ ÷òåíèÿ.
int32 UalphaNorm; //!< Íîðìèðîâàííîå çàäàíèå, ñëóæåáíàÿ ïåðåìåííàÿ.
int32 UbetaNorm; //!< Íîðìèðîâàííîå çàäàíèå, ñëóæåáíàÿ ïåðåìåííàÿ.
int32 UdCorTmp; //!<Ñëóæåáíàÿ ïåðåìåííàÿ äëÿ êîððåêòèðîâêè âûõîäíîãî íàïðÿæåíèÿ â çàâèñèìîñòè îò íàïðÿæåíèÿ ÇÏÒ
int32 UdCompK; //!< Êîýôôèöèåíò êîððåêòèðîâêè âûõîäíîãî íàïðÿæåíèÿ èíâåðòîðà â çàâèñèìîñòè îò èçìåíåíèÿ íàïðÿæåíèÿ ÇÏÒ îò íîìèíàëüíîãî. Çàäàåòñÿ.
int32 UdCompEnable; //!< Ðàçðåøåíèå êîððåêòèðîâêè âûõîäíîãî íàïðÿæåíèÿ èíâåðòîðà â çàâèñèìîñòè îò èçìåíåíèÿ íàïðÿæåíèÿ ÇÏÒ îò íîìèíàëüíîãî. Çàäàåòñÿ.
int16 ULimitation; //!< ôëàã î òîì, ÷òî èäåò îãðàíè÷åíèå íàïðÿæåíèÿ - âûõîäíîå íàïðÿæåíèå ìåíüøå çàäàííîãî. Äëÿ ÷òåíèÿ.
_iq Frequency; //!< ×àñòîòà ØÈÌ â êÃö. Ôîðìàò 22.10! Çàäàåòñÿ.
_iq FreqPrev; //!< Ïðåäóäóùàÿ ÷àñòîòà ØÈÌ, ñëóæåáíàÿ ïåðåìåííàÿ.
int32 DeadBand; //!< âåëè÷èíà "ì¸ðòâîãî âðåìåíè", ìêñ, çàäàåòñÿ.
int32 MinGammaLimit; //!< ìèíèìàëüíàÿ ñêâàæíîñòü íà êëþ÷å, çàäàåòñÿ.
int PDP_Fault; //!< Ôëàã î òîì, ÷òî ìîóäëåì ØÈÌ çàôèêñèðîâàíà àïïàðàòíàÿ àâàðèÿ îò èíâåðòîðà. Äëÿ ÷òåíèÿ. Ïî íåé íåîáõîäèìà ðåàêöèÿ ìîäóëÿ çàùèò!
int ChargingMode; //!< Ðåæåì çàðÿäà áóäñòðåïíûõ êîíäåíñàòîðîâ. Äîëæåí âûñòàâëÿòüñÿ â åäåíèöó íà âðåìÿ 2-10 ìñ âíåøíåé ïðîãðàììîé ïåðåä çàïóñêîì ØÈÌ.
void (*init)(volatile struct SPWM_Module*); /* Pointer to the init function */
void (*update)(volatile struct SPWM_Module*); /* Pointer to the update function */
void (*slow_calc)(volatile struct SPWM_Module*);
void (*On)(volatile struct SPWM_Module*); //!< ïðîöåäóðà âêëþ÷åíèÿ (ðàçðåøåíèÿ) ØÈÌ-âûõîäîâ
void (*Off)(volatile struct SPWM_Module*); //!< ïðîöåäóðà îòêëþ÷åíèÿ (çàïðåùåíèÿ) ØÈÌ-âûõîäîâ
};
typedef volatile struct SPWM_Module TPWM_Module;
//! Èíèöèàëèçàòîð ïî-óìîë÷àíèþ.
#define PWM_Module_DEFAULTS {\
0,0,0, \
0,0,0, \
0, \
0, \
_IQ(0.866),0, \
0,0,\
0,0,\
0,\
0,0,0,0,0,0,0x1400,0,0,0,0,0,\
PWM_Module_Init, \
PWM_Module_Update, \
PWM_Module_SlowCalc, \
PWM_Module_On, \
PWM_Module_Off, \
}
//! \memberof TPWM_Module
void PWM_Module_Init(TPWM_Module *);
//! \memberof TPWM_Module
void PWM_Module_Update(TPWM_Module *);
//! \memberof TPWM_Module
void PWM_Module_SlowCalc(TPWM_Module *);
//! \memberof TPWM_Module
void PWM_Module_On(TPWM_Module *);
//! \memberof TPWM_Module
void PWM_Module_Off(TPWM_Module *);
//âåêòîðíûå ôóíêöèè èç áèáëèîòåêè
void PWM_Module_No_SV_Update(TPWM_Module *);
#ifdef __cplusplus
}
#endif
#endif
/*@}*/