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

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

?? 50ba9a335c64001d17b19fccf218e59b

?? 這是我畢業(yè)設(shè)計(jì)做的一個(gè)SVPWM同步永磁交流電機(jī)的控制系統(tǒng)
??
字號(hào):
/*This file has been prepared for Doxygen automatic documentation generation.*/

#include "header/includes.h"
#include "altera_avalon_uart.h"

alt_u8 led = 0x2;
alt_u8 dir = 0;

void led_flash(void)
{
    if (led & 0x81) 
    {
      dir = (dir ^ 0x1);
    }

    if (dir)
    {
      led = led >> 1;
    }
    else
    {
      led = led << 1;
    }
    IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, led);
}
/********************************************************************
                         PID計(jì)算相關(guān)參數(shù)定義
*********************************************************************/
#define PID_PERIOD 8000
//#define PID_PERIOD 8000
#define HOERF 0
#define HOERM 1
#define HOERL 2

volatile long counter=0;   //編碼器的計(jì)數(shù)器
uchar go_en=0;    //使能走
//int clk_cnt=0;   //輸出脈沖計(jì)數(shù)器
volatile long locate = 0; //位置信息,調(diào)節(jié)用
volatile long Initposition = 0;  //初始化后的位置

volatile int  vd = -30,vq = 30;
volatile int Speed=0;    //速度參數(shù)
struct PID_DATA piddata;

alt_16 timeren;
alt_16 timercnt;
alt_16 timeren10;


/********************************************************************
                            電機(jī)控制和定時(shí)中斷函數(shù)
*********************************************************************/
long get_addr(void)
{
    int addr,circle;
    addr = IORD_ALTERA_AVALON_PIO_DATA(ABADDR_BASE);
    circle = IORD_ALTERA_AVALON_PIO_DATA(CIRCLES_BASE);
    counter = (circle - 0x800)*1500L + addr;
    return counter;
}

void Mspeed(int spd) //調(diào)速
{
    //為了不超調(diào),將vd和vq的值都限制在-600~600之間。
    //spd = -spd;
    if(spd >= 0)
    {
        if(spd > 600)
            spd = 600;
        vd = -spd*3/2;
        vq = spd;
    }
    else
    {
        if(spd < -600)
            spd = -600;
        vd = -spd*6/5;
        vq = spd;
    }

    IOWR_ALTERA_AVALON_PIO_DATA(VD_BASE, vd);
    IOWR_ALTERA_AVALON_PIO_DATA(VQ_BASE, vq);
}

void timer_0_IRQ(void *context, alt_u32 id)
{
    //alt_putstr("Hello from Nios II!\n");
    
    static long e[2];
    long deta;
    char limit_tmp;
    //IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 1);
    IOWR_ALTERA_AVALON_TIMER_STATUS( TIMER_0_BASE,0 );
    timeren = 1;
    timercnt++;

    //get_addr();
    deta = get_addr() - locate;
    /*
    //if(temp >= -1 && temp <= 1) pid_Reset_Integrator(&piddata);
    //if(temp == 0) pid_Reset_Integrator(&piddata);
    //disp(temp,8);
    e[1] = deta - e[0];
    e[0] = deta;
    fuzzy_step(e);
    pid_factor(crisp_scale[0],crisp_scale[1], crisp_scale[2], &piddata);
    */
    //Speed = pid_Controller(locate,counter,&piddata);
    //pid_factor(100, 50, 10, &piddata);
    
    //deta = get_addr() - locate;

    Speed = pid_Controller(locate,counter,&piddata);
    
    if(deta >= -1 && deta <= 1)
    //if(deta == 0)
    {
        //if(deta == 0)
            pid_Reset_Integrator(&piddata); 
        Speed = 0;
    }
    //else
    {
        
    }
    
    limit_tmp = IORD_ALTERA_AVALON_PIO_DATA(LIMIT_BASE);
    if(limit_tmp & (1<<HOERL))  //最后的霍爾元件報(bào)警,速度只能為負(fù)
    {
        if(Speed > 0)
        {
            Mspeed(0);
            Speed = 0;
        }
        else
            Mspeed(Speed);
    }
    else if(limit_tmp & ((1<<HOERM)|(1<<HOERF)))
    {
        if(Speed < 0)
        {
            Mspeed(0);
            Speed = 0;
        }
        else
            Mspeed(Speed);
    }
    else
        Mspeed(Speed);
    
    if(timercnt == 100000000/PID_PERIOD)
    {
        timercnt = 0;
        timeren10 = 1;
    }
    //IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0);
}
/********************************************************************
                               步進(jìn)電機(jī)控制函數(shù)
*********************************************************************/
alt_16 Stlocation;
void Stepper(void)
{
    char i;

    alt_16 st_limit, st_position;
    st_limit = IORD_ALTERA_AVALON_PIO_DATA(STLIMIT_BASE);
    if(st_limit)
    {
        st_position = IORD_ALTERA_AVALON_PIO_DATA(STPOSITION_BASE);
        if(st_limit & 0x01)  //底下開關(guān)關(guān)閉,限制往下走
        {
            if(Stlocation > st_position)
            {
                IOWR_ALTERA_AVALON_PIO_DATA(STSTOP_BASE, 1);
                IOWR_ALTERA_AVALON_PIO_DATA(STLOCATE_BASE, Stlocation);
                IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
                for(i=0;i<4;i++)
                {
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 1);
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 1);
                }
            }
        }
        else if(st_limit & 0x02)//頂部開關(guān)關(guān)閉,限制往上走
        {
            if(Stlocation < st_position)
            {
                IOWR_ALTERA_AVALON_PIO_DATA(STSTOP_BASE, 1);
                IOWR_ALTERA_AVALON_PIO_DATA(STLOCATE_BASE, Stlocation);
                IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
                for(i=0;i<4;i++)
                {
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 1);
                    IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 1);
                }
            }
        }
    }
    else
    {
        IOWR_ALTERA_AVALON_PIO_DATA(STSTOP_BASE, 1);
        IOWR_ALTERA_AVALON_PIO_DATA(STLOCATE_BASE, Stlocation);
        IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
        for(i=0;i<4;i++)
        {
            IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
            IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 0);
            IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 1);
            IOWR_ALTERA_AVALON_PIO_DATA(STLE_BASE, 1);
        }
    }
}

void Stepper_init(void)
{
    char i;
    IOWR_ALTERA_AVALON_PIO_DATA(STRST_BASE, 0);
    for(i=0;i<100;i++);
    IOWR_ALTERA_AVALON_PIO_DATA(STRST_BASE, 1);
    IOWR_ALTERA_AVALON_PIO_DATA(STSTOP_BASE, 1);
}
/********************************************************************
                             主機(jī)串口處理函數(shù)
*********************************************************************/
alt_16 tmp=0,rcvcnt=0,chk0 = 0;
alt_16 state0 = 0;
alt_16 xaa,x55;  //識(shí)別0x55和0xaa用
alt_16 update;
char rcv[10];
alt_16 rcvlength;
alt_16 Sttodo;  //步進(jìn)電機(jī)位置更新未執(zhí)行為1

void do_receive(void)
{
    alt_16 i;
    alt_32 rcvtmp;
    rcvtmp = 0;
    for(i=0;i<4;i++)
    {
        rcvtmp <<= 8;
        rcvtmp |= rcv[i];
    }
    locate = rcvtmp + Initposition;  //伺服電機(jī)位置更新
    rcvtmp = 0;
    
    for(i=0;i<2;i++)
    {
        rcvtmp <<= 8;
        rcvtmp |= rcv[i+4];
    }
    Stlocation = rcvtmp;  //步進(jìn)電機(jī)位置更新
    Stepper();
}

void usart0_do(void)
{
    if(rx_counter0)
    {
        tmp = get_char0();
        if(state0 == 0)
        {
            if(tmp == 0x55) //接收到數(shù)據(jù)包起始標(biāo)志位
            {
                state0 = 1;
                rcvcnt = 0;  //準(zhǔn)備接收數(shù)據(jù)
                rcvlength = 0;
                xaa = 0;
                x55 = 0;
                chk0 = 0;
            }
        }
        else if(state0 == 1)
        {
            rcvlength = tmp;  //以第一個(gè)數(shù)據(jù)為有效數(shù)據(jù)長度,有校驗(yàn)
            chk0 += tmp;
            state0 = 2;
        }
        else if(state0 == 2) //接收數(shù)據(jù)狀態(tài)
        {
            if(tmp != 0xaa)
            {
                if(xaa == 0xaa)  //說明前一個(gè)數(shù)是0xaa
                {
                    rcv[rcvcnt] = x55;
                    rcvcnt++; //接收計(jì)數(shù)器
                    xaa = 0;
                }
                rcv[rcvcnt] = tmp;
                chk0 += tmp; //校驗(yàn)
                rcvcnt++; //接收計(jì)數(shù)器
                xaa = 0;
                if(rcvcnt >= rcvlength)
                    state0 = 4;
                if(tmp == 0x55)  //出錯(cuò)
                    state0 = 0;
            }
            else
            {
                if(xaa == 0xaa)  //說明接收到連續(xù)兩個(gè)0xaa,否則aa為0
                {
                    x55 = 0xaa;
                    chk0 += 0xaa;  //校驗(yàn)
                }
                else  //第一次接到0xaa
                {
                    x55 = 0x55;
                    chk0 += 0xaa;  //校驗(yàn)
                    xaa = 0xaa;
                }
            }
        }
        else if(state0 == 3) //暫時(shí)沒有校驗(yàn)
        {
            if(chk0 == tmp)
                state0 = 4;
            else
                state0 = 0;
        }
        else if(state0 == 4)
        {
            if(tmp == 0x55)
            {
                state0 = 0;   //結(jié)束,回到起始狀態(tài)
                update = 1;   //完成一次接收,準(zhǔn)備數(shù)據(jù)更新
                chk0 = 0;
                put_char0(0x55);
            }
        }
        else
        {
            state0 = 0;
        }
    }
    //數(shù)據(jù)更新
    if(update)
    {
        update = 0;
        do_receive();
    }
}
/********************************************************************
                               初始化
*********************************************************************/
void timer_init(void)  //100Hz
{
    alt_irq_register(TIMER_0_IRQ,0,timer_0_IRQ);
    //初始化周期寄存器
    IOWR_ALTERA_AVALON_TIMER_PERIODL(TIMER_0_BASE,PID_PERIOD&0x0000FFFF);
    IOWR_ALTERA_AVALON_TIMER_PERIODH(TIMER_0_BASE,(PID_PERIOD>>16)&0x0000FFFF);
    //打開中斷、循環(huán)計(jì)數(shù)、定時(shí)開始
    IOWR_ALTERA_AVALON_TIMER_CONTROL(TIMER_0_BASE,(ALTERA_AVALON_TIMER_CONTROL_ITO_MSK|ALTERA_AVALON_TIMER_CONTROL_START_MSK|ALTERA_AVALON_TIMER_CONTROL_CONT_MSK));
}



/********************************************************************
                           顯示讀取的sin值
*********************************************************************/
void disp_long(long temp)
{
    alt_16 bit[7];
    alt_16 i = 0;
    for(;i<6;i++)
    {
        bit[5-i] = temp%10;
        temp /= 10;
    }
    for(i=0;i<6;i++)
    {
        put_char0(bit[i]+'0');
    }
}
void disp(void)
{
    put_str0("\nlocate = ");
    disp_long(locate);
    put_str0("; counter = ");
    disp_long(counter);
    put_str0("; speed = ");
    disp_long(Speed);
    put_str0("; Initposition = ");
    disp_long(Initposition);
}

/********************************************************************
                               主函數(shù)
*********************************************************************/
char Init_PMSM_succeed = 0;
char Init_Stepper_succeed = 0;
void Init(void)
{
    pid_Init(100, 100, 50, &piddata);
    timer_init();
    uart0_init();
    Stepper_init();
    locate = 0;

    Stlocation = -0x8000;
    Stepper();
}

int main(void)
{
    char i;
    alt_16 Itimer = 0;
    alt_16 stlimit0 = 0, stlimit1 = 0; 
    alt_putstr("Hello from Nios II!\n");
    Init();
    while(1)
    {
        //led_flash();
        if(Init_PMSM_succeed && Init_Stepper_succeed)
        {
            usart0_do();
        }
        if(IORD_ALTERA_AVALON_PIO_DATA(STBUSY_BASE))
            IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 1);
        else
            IOWR_ALTERA_AVALON_PIO_DATA(LED_BASE, 0);
        //檢測到有開關(guān)信號(hào),停止步進(jìn)電機(jī)
        
        stlimit1 = stlimit0;
        stlimit0 = IORD_ALTERA_AVALON_PIO_DATA(STLIMIT_BASE);
        if(stlimit0 != 0 && stlimit1 == 0)  //上升沿
        {
            IOWR_ALTERA_AVALON_PIO_DATA(STSTOP_BASE, 0);
        }
        
        if( Init_PMSM_succeed == 0)
        {
            //if(!IORD_ALTERA_AVALON_PIO_DATA(LIMIT_BASE))
            if(Itimer >= 5)
            {
                Initposition = get_addr();
                locate = Initposition;
                Init_PMSM_succeed = 1;
            }
            else
            {
                locate -= 1000;
            }
        }
        
        
        if(Init_Stepper_succeed == 0)
        {
            if(stlimit0)
            {
                IOWR_ALTERA_AVALON_PIO_DATA(STRST_BASE, 0);
                for(i=0;i<100;i++);
                IOWR_ALTERA_AVALON_PIO_DATA(STRST_BASE, 1);
                for(i=0;i<100;i++);
                IOWR_ALTERA_AVALON_PIO_DATA(STRST_BASE, 0);
                for(i=0;i<100;i++);
                IOWR_ALTERA_AVALON_PIO_DATA(STRST_BASE, 1);
                for(i=0;i<100;i++);
                Init_Stepper_succeed = 1;
            }
        }
        if(timeren10)
        {
            timeren10 = 0;
            disp();
            Itimer++;
        }
    }
    
    return 0;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级精品视频在线观看| 精品中文av资源站在线观看| 久久午夜羞羞影院免费观看| 欧美日韩精品系列| 欧美性色黄大片| 日本久久一区二区| 成人国产免费视频| 成人性视频网站| www.性欧美| 一本大道久久a久久综合| 99久久精品免费看| 91丝袜美腿高跟国产极品老师| 本田岬高潮一区二区三区| 成人综合婷婷国产精品久久免费| 国产一区福利在线| 国产69精品久久久久777| 国产精品69毛片高清亚洲| 国产成人在线免费| 91丨九色丨黑人外教| 欧美伊人久久久久久午夜久久久久| 欧美在线色视频| 欧美一区二区三区性视频| 欧美成人a在线| 久久久.com| 亚洲男同1069视频| 日日夜夜一区二区| 国产乱码精品一区二区三区av | 国产精品网站在线| 亚洲人xxxx| 奇米精品一区二区三区在线观看| 美女网站一区二区| jiyouzz国产精品久久| 在线观看欧美精品| 日韩精品中午字幕| 亚洲色图丝袜美腿| 久久99精品国产.久久久久久| 国产91高潮流白浆在线麻豆| 色久优优欧美色久优优| 91麻豆精品国产91久久久更新时间| 日韩女优av电影| 亚洲蜜桃精久久久久久久| 日韩黄色免费电影| 91在线视频网址| 日韩一区二区不卡| 亚洲日本va午夜在线电影| 天堂精品中文字幕在线| 成人自拍视频在线观看| 欧美三级日韩三级| 国产精品萝li| 精品一区二区三区av| 在线这里只有精品| 国产欧美综合在线| 日本aⅴ精品一区二区三区| www.亚洲在线| 欧美精品一区二区三| 亚洲国产日韩a在线播放性色| 国产麻豆成人传媒免费观看| 欧美日韩国产一区| 国产精品对白交换视频| 国产一区亚洲一区| 91精品国产高清一区二区三区蜜臀| 国产精品乱人伦中文| 国内成+人亚洲+欧美+综合在线| 色偷偷成人一区二区三区91| 久久噜噜亚洲综合| 美国精品在线观看| 91精品在线免费| 性做久久久久久免费观看欧美| 成人动漫一区二区| 久久免费视频色| 韩国欧美一区二区| 日韩欧美中文一区| 蜜臀精品一区二区三区在线观看 | 欧美优质美女网站| 国产精品电影院| jlzzjlzz亚洲日本少妇| 久久精品欧美日韩| 韩日欧美一区二区三区| 久久综合九色综合欧美就去吻| 喷白浆一区二区| 欧美一区日本一区韩国一区| 五月天中文字幕一区二区| 欧美在线影院一区二区| 亚洲综合偷拍欧美一区色| 91久久香蕉国产日韩欧美9色| 日韩理论片网站| 色视频成人在线观看免| 亚洲国产一区二区三区| 在线成人午夜影院| 免费av成人在线| 久久综合久久99| 成人av在线资源网| 亚洲精品乱码久久久久久| 欧美性生活久久| 日韩制服丝袜av| 久久免费电影网| 色婷婷亚洲精品| 偷拍与自拍一区| 日韩亚洲欧美成人一区| 精品午夜一区二区三区在线观看| 精品捆绑美女sm三区| 国产91精品露脸国语对白| 亚洲精品日产精品乱码不卡| 欧美三级乱人伦电影| 久久狠狠亚洲综合| 欧美国产激情二区三区 | 亚洲一区二区视频在线观看| 欧美在线视频不卡| 美美哒免费高清在线观看视频一区二区| 欧美刺激午夜性久久久久久久 | 欧美高清在线一区二区| 色婷婷综合久久久久中文| 美女视频黄久久| 中文字幕一区二区在线观看| 欧美日韩在线直播| 国产福利一区二区三区视频在线| 亚洲美女少妇撒尿| 日韩视频免费直播| 91浏览器在线视频| 久久电影网站中文字幕| 亚洲欧美日韩国产综合| 欧美不卡一二三| 色一区在线观看| 国产精品18久久久久久久网站| 亚洲老妇xxxxxx| 国产日产亚洲精品系列| 欧美日韩精品欧美日韩精品一| 国产精品18久久久久久久久| 亚洲成av人片在线| 中文字幕一区在线观看视频| 欧美日韩国产免费| 91丨porny丨首页| 国产jizzjizz一区二区| 免费成人av在线播放| 香蕉乱码成人久久天堂爱免费| 国产精品女同一区二区三区| 日韩视频免费观看高清在线视频| 日本精品裸体写真集在线观看| 精品一区二区三区日韩| 日韩国产精品91| 亚洲国产毛片aaaaa无费看| 亚洲免费大片在线观看| 国产精品久久久久aaaa| 久久久久久久久久久久久女国产乱 | 欧美aⅴ一区二区三区视频| 一区二区三区在线视频免费| 国产精品久久久久久久浪潮网站| 久久精品视频一区二区| 精品蜜桃在线看| 日韩欧美的一区二区| 宅男在线国产精品| 欧美体内she精高潮| av在线一区二区三区| 久久国内精品自在自线400部| 亚洲制服丝袜av| 亚洲久草在线视频| 亚洲综合偷拍欧美一区色| 亚洲欧洲国产专区| 亚洲国产精品二十页| 9191久久久久久久久久久| 欧美日韩成人在线一区| 在线观看日韩高清av| 99这里都是精品| 国产福利视频一区二区三区| 美日韩一区二区三区| 丝袜美腿亚洲综合| 午夜婷婷国产麻豆精品| 蜜臀av在线播放一区二区三区| 亚洲国产日韩av| 亚洲自拍另类综合| 亚洲精品免费在线播放| 亚洲18色成人| 日本不卡一二三区黄网| 午夜久久久久久电影| 一区二区三区四区不卡在线 | 韩国视频一区二区| 亚洲国产另类av| 免费人成黄页网站在线一区二区| 亚洲午夜一二三区视频| 亚洲一区二区三区在线播放| 中文字幕亚洲成人| 亚洲mv大片欧洲mv大片精品| 偷拍日韩校园综合在线| 日日骚欧美日韩| 日本最新不卡在线| 国产91精品一区二区麻豆网站| 国产成人免费网站| av网站免费线看精品| 91精品国产综合久久精品麻豆| 91精品国产综合久久久久久久久久| 91.麻豆视频| 久久综合色天天久久综合图片| 亚洲天堂成人在线观看| 亚洲一区二区偷拍精品| 日本vs亚洲vs韩国一区三区二区| 三级久久三级久久久| 99久久精品费精品国产一区二区| 色av成人天堂桃色av| 91精品国产综合久久福利 | 国产一区二区三区蝌蚪|