亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? bldcmotor.c

?? DSP2812開(kāi)發(fā)的無(wú)刷直流電機(jī)控制程序,希望對(duì)大家有幫助!
?? C
字號(hào):
/////////////////////////// 無(wú)刷直流電動(dòng)機(jī) 24V seakeke@163.com 和我聯(lián)系//////////////////////////////////////////

#include "DSP281x_Device.h"     // DSP281x Headerfile Include File
#include "DSPMotor_Head.h"

#include "IQmathLib.h"
#include "BLDCMotor.h"
#include "parameter.h"

#include <math.h>
///// 函數(shù)聲明 ////////////////////////////////////////////////////////////
interrupt void MainISR(void);

///// 全局變量聲明
float32 SpeedRef = 0.20;           // Speed reference (pu)
float32 T = 0.001/ISR_FREQUENCY;   // Samping period (sec), see parameter.h

Uint32 VirtualTimer = 0;
Uint16 ILoopFlag = FALSE;
Uint16 SpeedLoopFlag = FALSE;
int16 DFuncDesired = 0x1A00;      // Desired duty cycle (Q15)=0.2

_iq CurrentSet = _IQ(0.3);

Uint16 IsrTicker = 0;
Uint16 BackTicker = 0;

int16 DlogCh1 = 0;
int16 DlogCh2 = 0;
int16 DlogCh3 = 0;
int16 DlogCh4 = 0;

// Instance PID regulator to regulate the DC-bus current and speed
PIDREG3 pid1_idc = PIDREG3_DEFAULTS;
PIDREG3 pid1_spd = PIDREG3_DEFAULTS;

// Instance a PWM driver instance
PWMGEN pwm1 = PWMGEN_DEFAULTS;

// Create an instance of the ADC driver
ADCVALS adc1 = ADCVALS_DEFAULTS;

// Instance a Hall effect driver
HALL3 hall1 = HALL3_DEFAULTS;

// Instance a ramp controller to smoothly ramp the frequency
RMPCNTL rc1 = RMPCNTL_DEFAULTS;

// Instance a RAMP2 Module
RMP2 rmp2 = RMP2_DEFAULTS;

// Instance a MOD6 Module
MOD6CNT mod1 = MOD6CNT_DEFAULTS;

// Instance a SPEED_PR Module
SPEED_MEAS_CAP speed1 = SPEED_MEAS_CAP_DEFAULTS;

// Create an instance of DATALOG Module
DLOG_4CH dlog = DLOG_4CH_DEFAULTS; 

////////////////////////// 主程序 //////////////////////////////////////////////

void main(void)
{

// Initialize System Control registers, PLL, WatchDog, Clocks to default state:
        // This function is found in the DSP281x_SysCtrl.c file.
	InitSysCtrl();

// HISPCP prescale register settings, normally it will be set to default values
    EALLOW;   // This is needed to write to EALLOW protected registers
    SysCtrlRegs.HISPCP.all = 0x0000;     // SYSCLKOUT/1 
    EDIS;   // This is needed to disable write to EALLOW protected registers 

// Disable and clear all CPU interrupts:
	DINT;
	IER = 0x0000;
	IFR = 0x0000;

// Initialize Pie Control Registers To Default State:
        // This function is found in the DSP281x_PieCtrl.c file.
	InitPieCtrl();

// Initialize the PIE Vector Table To a Known State:
        // This function is found in DSP281x_PieVect.c.
	// This function populates the PIE vector table with pointers
        // to the shell ISR functions found in DSP281x_DefaultIsr.c.
	InitPieVectTable();	
	
// User specific functions, Reassign vectors (optional), Enable Interrupts:
	
// Initialize EVA Timer 1/2:
    // Setup Timer 1/2 Registers (EV A)
    EvaRegs.GPTCONA.all = 0;

    // Set the Period for the GP timer 2
    EvaRegs.T2PR = SYSTEM_FREQUENCY*1000000*T;  // Perscaler X1 (T2), ISR period = T x 1
    
    // Clear the counter/compare Regs for GP timer 2
    EvaRegs.T2CNT = 0x0000;
    EvaRegs.T2CMPR = 0x0000;     

// Enable Period interrupt bits for GP timer 2
    EvaRegs.EVAIMRB.bit.T2PINT = 1;
    EvaRegs.EVAIFRB.bit.T2PINT = 1;

    // Count up, x1, internal clk, disable compare, use own period
    EvaRegs.T2CON.all = 0x1040;

// Reassign ISRs. 
        // Reassign the PIE vector for T2PINT to point to a different 
        // ISR then the shell routine found in DSP281x_DefaultIsr.c.
        // This is done if the user does not want to use the shell ISR routine
        // but instead wants to use their own ISR.
	
	EALLOW;	// This is needed to write to EALLOW protected registers
	PieVectTable.T2PINT = &MainISR;
	EDIS;   // This is needed to disable write to EALLOW protected registers

// Enable PIE group 3 interrupt 1 for T2PINT
    PieCtrlRegs.PIEIER3.all = M_INT1;

// Enable CPU INT3 for T2PINT:
	IER |= M_INT3;

// Initialize PWM module
    pwm1.PeriodMax = (SYSTEM_FREQUENCY/PWM_FREQUENCY)*1000;  // Asymmetric PWM
    pwm1.DutyFunc = DFuncDesired;                            // DutyFunc = Q15  
    pwm1.init(&pwm1);
    
// Initialize DATALOG module        
    dlog.iptr1 = &DlogCh1;  
    dlog.iptr2 = &DlogCh2;
    dlog.iptr3 = &DlogCh3;
    dlog.iptr4 = &DlogCh4;
    dlog.trig_value = 0x01;
    dlog.size = 0x400;
    dlog.prescalar = 1;
    dlog.init(&dlog);

// Initialize ADC module
    adc1.ChSelect = 0x6543;   // for DMC1500 and eZdsp2812/eZdsp2808 boards
	adc1.init(&adc1);

// Initialize the SPEED_PR module (150 MHz, N = 1 event period/rev)
 	speed1.InputSelect = 0;
 	speed1.BaseRpm = 120*(BASE_FREQ/P);
 	speed1.SpeedScaler = (Uint32)(ISR_FREQUENCY/(1*BASE_FREQ*0.001));

// Initialize RMPCNTL module
    rc1.RampDelayMax = 20;
    rc1.RampLowLimit = _IQ(0);
    rc1.RampHighLimit = _IQ(1);

// Initialize Hall module   
    hall1.DebounceAmount = 5;
    hall1.Revolutions = -10;
    hall1.init(&hall1);

// Initialize RMP2 module
	rmp2.Out = (int32)DFuncDesired;
	rmp2.Ramp2Delay = 0x00000050;
    rmp2.Ramp2Max = 0x00007FFF;
    rmp2.Ramp2Min = 0x0000000F;

// Initialize the PID_REG3 module for dc-bus current
    pid1_idc.Kp = _IQ(1);                  
	pid1_idc.Ki = _IQ(T/0.003);			
	pid1_idc.Kd = _IQ(0/T);					
 	pid1_idc.Kc = _IQ(0.2);
    pid1_idc.OutMax = _IQ(0.99);
    pid1_idc.OutMin = _IQ(0); 

// Initialize the PID_REG3 module for speed
    pid1_spd.Kp = _IQ(1);
	pid1_spd.Ki = _IQ(T/0.1);
	pid1_spd.Kd = _IQ(0/T);
 	pid1_spd.Kc = _IQ(0.2);
    pid1_spd.OutMax = _IQ(0.99);
    pid1_spd.OutMin = _IQ(0); 

// Enable global Interrupts and higher priority real-time debug events:
	EINT;   // Enable Global interrupt INTM
	ERTM;	// Enable Global realtime interrupt DBGM

// IDLE loop. Just sit and loop forever:	
	for(;;) BackTicker++;

} 	

interrupt void MainISR(void)
{

// Verifying the ISR
     IsrTicker++;

// ------------------------------------------------------------------------------
//    Call the ADC04U_DRV read function.
// ------------------------------------------------------------------------------
	  adc1.read(&adc1);

// ------------------------------------------------------------------------------
//    Connect inputs of the RMP module and call the Ramp control
//    calculation function.
// ------------------------------------------------------------------------------
      rc1.TargetValue = _IQ(SpeedRef);
      rc1.calc(&rc1);

// ------------------------------------------------------------------------------
//    Connect inputs of the HALL module and call the Hall sensor
//    read function.
// ------------------------------------------------------------------------------
      hall1.HallMapPointer = (int16)mod1.Counter; 
      hall1.read(&hall1);

// ------------------------------------------------------------------------------
//    Connect inputs of the MOD6 module and call the Modulo 6 counter
//    calculation function.
// ------------------------------------------------------------------------------
      mod1.TrigInput =(int32)hall1.CmtnTrigHall;
      mod1.Counter = (int32)hall1.HallMapPointer; 
      mod1.calc(&mod1);

// ------------------------------------------------------------------------------
//    Connect inputs of the RMP2 module and call the Ramp control 2
//    calculation function.
// ------------------------------------------------------------------------------
      rmp2.DesiredInput = (int32)DFuncDesired;
      rmp2.calc(&rmp2);

// ------------------------------------------------------------------------------
//    Connect inputs of the PID_REG3 module and call the PID speed controller
//    calculation function.
// ------------------------------------------------------------------------------  
      pid1_spd.Ref = rc1.SetpointValue;
      pid1_spd.Fdb = speed1.Speed;
      pid1_spd.calc(&pid1_spd);

// ------------------------------------------------------------------------------
//    Set the speed closed loop flag once the speed is built up to a desired value. 
// ------------------------------------------------------------------------------
      if (rc1.EqualFlag == 0x7FFFFFFF)  {
         SpeedLoopFlag = TRUE; 
         rc1.RampDelayMax = 300;  
      }

// ------------------------------------------------------------------------------
//    Connect inputs of the PWM_DRV module and call the PWM signal generation
//    update function.
// ------------------------------------------------------------------------------
   // Switch from fixed duty-cycle or controlled Speed duty-cycle by SpeedLoopFlag variable
      if (SpeedLoopFlag == FALSE)
         pwm1.DutyFunc = (int16)rmp2.Out;           // fixed duty-cycle
      else 
         pwm1.DutyFunc = (int16)_IQtoIQ15(pid1_spd.Out);   // controlled Speed duty-cycle

      pwm1.CmtnPointer = (int16)mod1.Counter;
      pwm1.update(&pwm1);

// ------------------------------------------------------------------------------
//    Connect inputs of the SPEED_PR module and call the speed calculation 
//    function.
// ------------------------------------------------------------------------------  
      if ((mod1.Counter == 5)&(hall1.CmtnTrigHall == 0x7FFF)) {
         speed1.TimeStamp = VirtualTimer;
         speed1.calc(speed1);
      }

// ------------------------------------------------------------------------------
//    Connect inputs of the DATALOG module 
// ------------------------------------------------------------------------------
      DlogCh1 = (int16)mod1.Counter; 
      DlogCh2 = (int16)mod1.TrigInput;
      DlogCh3 = (int16)_IQtoIQ15(pid1_spd.Ref);
      DlogCh4 = (int16)_IQtoIQ15(pid1_spd.Fdb);

// ------------------------------------------------------------------------------
//    Increase virtual timer and force 15 bit wrap around
// ------------------------------------------------------------------------------
	VirtualTimer++;
	VirtualTimer &= 0x00007FFF;

// ------------------------------------------------------------------------------
//    Call the DATALOG update function.
// ------------------------------------------------------------------------------
    dlog.update(&dlog);

// Enable more interrupts from this timer
	EvaRegs.EVAIMRB.bit.T2PINT = 1;
	
// Note: To be safe, use a mask value to write to the entire
	// EVAIFRB register.  Writing to one bit will cause a read-modify-write
	// operation that may have the result of writing 1's to clear 
	// bits other then those intended. 
    EvaRegs.EVAIFRB.all = BIT0;
	
// Acknowledge interrupt to recieve more interrupts from PIE group 3
	PieCtrlRegs.PIEACK.all |= PIEACK_GROUP3;
}


//===========================================================================
// No more.
//===========================================================================

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲男人都懂的| 国产在线国偷精品免费看| 精品盗摄一区二区三区| 色综合咪咪久久| 国产精品一区免费视频| 午夜欧美大尺度福利影院在线看| 久久久久久久久久久久久夜| 69堂精品视频| 91丨porny丨首页| 国产成人亚洲综合a∨婷婷| 日韩va欧美va亚洲va久久| 亚洲精品乱码久久久久久日本蜜臀| 欧美刺激午夜性久久久久久久| 欧洲一区在线电影| 97超碰欧美中文字幕| 国产精品一区二区男女羞羞无遮挡| 亚洲成av人片观看| 亚洲久草在线视频| 国产精品第四页| 国产精品午夜春色av| 久久只精品国产| 日韩欧美一区在线| 欧美一卡在线观看| 欧美日韩免费高清一区色橹橹| 97se狠狠狠综合亚洲狠狠| 成人一区二区三区中文字幕| 国内精品久久久久影院色| 日本怡春院一区二区| 天堂一区二区在线免费观看| 亚洲一区二区三区四区不卡| 一区二区三区在线观看欧美| 日韩理论在线观看| 亚洲欧洲日韩女同| 国产精品久久久99| 欧美国产精品中文字幕| 欧美经典一区二区| 国产蜜臀97一区二区三区| 久久天天做天天爱综合色| 久久亚洲二区三区| 久久精品一区二区三区av| 国产网站一区二区三区| 国产午夜精品一区二区三区视频 | 日韩欧美一级二级三级久久久| 欧美日韩国产区一| 欧美日韩一卡二卡三卡| 在线成人免费观看| 日韩一区二区三区高清免费看看| 日韩色视频在线观看| 精品88久久久久88久久久| 精品1区2区在线观看| 日本一区二区三级电影在线观看| 国产精品美女久久久久久| 亚洲同性同志一二三专区| 一区二区三区欧美视频| 亚洲成人精品一区二区| 日韩av中文字幕一区二区| 精品亚洲成a人| 成人福利视频网站| 日本福利一区二区| 欧美一级欧美三级在线观看| 精品国产123| 亚洲欧洲av色图| 亚洲二区在线观看| 精品亚洲porn| 91色在线porny| 91精品国产麻豆国产自产在线| 久久久午夜精品理论片中文字幕| 自拍偷拍欧美精品| 免费高清不卡av| 成人一级黄色片| 欧美日韩小视频| 久久亚区不卡日本| 一级女性全黄久久生活片免费| 免费看日韩精品| 91在线视频在线| 7799精品视频| 国产精品久久久久国产精品日日| 亚洲国产精品一区二区www在线 | 亚洲一区二区三区小说| 老司机一区二区| www.av亚洲| 欧美成人一级视频| 亚洲欧美韩国综合色| 美女尤物国产一区| 色婷婷久久99综合精品jk白丝| 日韩欧美久久久| 亚洲男人都懂的| 国产精品主播直播| 欧美体内she精高潮| 久久精品夜色噜噜亚洲aⅴ| 亚洲制服丝袜av| 国产成人在线视频网站| 欧美精品亚洲二区| 国产精品国模大尺度视频| 麻豆中文一区二区| 欧美午夜理伦三级在线观看| 国产午夜精品一区二区三区嫩草| 亚洲va在线va天堂| 成人av免费在线播放| 日韩欧美黄色影院| 亚洲综合一二区| 成人听书哪个软件好| 精品国产一区二区三区四区四| 亚洲一区在线看| 91影院在线观看| 久久久久久久久久久99999| 视频精品一区二区| 91一区二区在线观看| 欧美激情综合网| 国产又黄又大久久| 欧美日韩电影在线播放| 有码一区二区三区| 成人国产精品免费网站| 久久久久97国产精华液好用吗| 美女脱光内衣内裤视频久久网站| 欧美探花视频资源| 亚洲人成7777| av电影天堂一区二区在线| 亚洲国产精品黑人久久久| 国内精品伊人久久久久av影院| 91精品国产福利在线观看| 亚洲第一狼人社区| 欧美午夜片在线观看| 一区二区三区精品在线| 色88888久久久久久影院野外| 国产精品高潮久久久久无| 国产成人亚洲精品狼色在线| 久久新电视剧免费观看| 国产精品一区二区三区99| 2020国产精品自拍| 国产精品一区免费视频| www国产精品av| 国产福利一区在线| 国产精品日韩成人| 成人动漫一区二区在线| 国产精品高潮呻吟| 91论坛在线播放| 亚洲国产综合人成综合网站| 欧美三区在线观看| 日韩成人一区二区三区在线观看| 欧美疯狂做受xxxx富婆| 麻豆国产欧美一区二区三区| 精品免费视频.| 国产成人av一区二区三区在线观看| 国产拍欧美日韩视频二区| 成人h精品动漫一区二区三区| 国产精品久久网站| 色婷婷久久久综合中文字幕 | 国产日韩欧美精品电影三级在线| 国v精品久久久网| 亚洲日本韩国一区| 欧美色欧美亚洲另类二区| 日本欧美在线观看| 久久久天堂av| 91亚洲午夜精品久久久久久| 亚洲午夜在线视频| 日韩一区二区在线播放| 黄色成人免费在线| 国产精品传媒入口麻豆| 欧美日韩情趣电影| 精品在线你懂的| 一区精品在线播放| 欧美一区二区三区人| 国产精一区二区三区| 一区二区在线观看免费视频播放| 91麻豆精品国产91久久久| 国内精品伊人久久久久av影院| 国产精品九色蝌蚪自拍| 欧美美女黄视频| 国产99一区视频免费| 亚洲一级二级三级| 26uuu另类欧美| 日本电影亚洲天堂一区| 捆绑调教美女网站视频一区| 国产精品进线69影院| 555www色欧美视频| av一区二区不卡| 男男视频亚洲欧美| 亚洲欧洲韩国日本视频| 日韩一二三区不卡| 99久久精品久久久久久清纯| 免费美女久久99| 亚洲欧美激情小说另类| 精品免费国产一区二区三区四区| 99re热视频这里只精品| 极品尤物av久久免费看| 亚洲在线中文字幕| 国产精品五月天| 日韩欧美综合在线| 色婷婷久久久综合中文字幕| 国产综合久久久久久久久久久久| 亚洲第一电影网| 国产精品久久久久aaaa| 欧美xxxx老人做受| 欧美日韩国产在线观看| a级高清视频欧美日韩| 激情综合色综合久久综合| 一区二区三区中文在线观看| 欧美激情在线免费观看| 精品理论电影在线观看|