《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于ARM+Linux的直流伺服控制系統(tǒng)設(shè)計
基于ARM+Linux的直流伺服控制系統(tǒng)設(shè)計
來源:電子技術(shù)應(yīng)用2012年第8期
張海波1,2,陳 濤1,王建立1,李洪文1,鄧永停1,2
1.中國科學院長春光學精密機械與物理研究所,吉林 長春130033; 2.中國科學院研究生院,北京100039
摘要: 目前大多伺服控制系統(tǒng)依賴計算機實現(xiàn),系統(tǒng)體積功耗大、成本高。針對此問題,以ARM9 S3C2440芯片和CPLD EPM570T144芯片為硬件平臺,在嵌入式Linux操作系統(tǒng)下設(shè)計了直流伺服控制系統(tǒng)。ARM實現(xiàn)控制算法,得出控制量給CPLD ,CPLD主要用作控制接口擴展和信號處理。詳細介紹了Linux設(shè)備驅(qū)動設(shè)計和伺服控制應(yīng)用程序設(shè)計。實驗結(jié)果證明,系統(tǒng)能夠?qū)崿F(xiàn)等速跟蹤、位置跟蹤和正弦跟蹤等控制功能,并能實現(xiàn)復(fù)雜控制算法,以滿足控制系統(tǒng)實時性和高速性要求。
中圖分類號: TP23
文獻標識碼: B
文章編號: 0258-7998(2012)08-0033-04
DC-servo control system design based on ARM and Linux
Zhang Haibo1,2,Chen Tao1,Wang Jianli1,Li Hongwen1,Deng Yongting1,2
1.Changchun Institute of Optics, Fine Mechanics and Physics ,Chinese Academy of Sciences, Changchun 130033,China; 2.Graduate College of the Chinese Academy of Sciences, Beijing 100039,China
Abstract: As most servo control systems depend on computers and have large size and high cost at present, the DC-servo control system is designed in embedded Linux operating system based on ARM9 S3C2440 chip and CPLD EPM570T144 chip. ARM is used to achieve the control algorithm and give control data to CPLD.CPLD is basically used to extend control interface and process signals. The Linux device driver design and servo control program design are discussed in detail. The experiment result proves that the system has functions of constant velocity tracking, position tracking, sine tracking and etc. It can achieve complicated control algorithm and satisfy the requirement of high speed and real-time control of control system.
Key words : ARM9;embedded Linux;CPLD;Linux device driver;servo control

    隨著數(shù)字信息技術(shù)的不斷發(fā)展,人們對伺服控制系統(tǒng)的實時性、穩(wěn)定性和復(fù)雜性的要求越來越高,單靠順序結(jié)構(gòu)的軟件設(shè)計已經(jīng)不容易滿足上述要求。目前很多伺服控制系統(tǒng)的控制器采用PC/104結(jié)構(gòu)或依賴上位計算機,根據(jù)實際的控制系統(tǒng)需要擴展相應(yīng)的控制電路,使得系統(tǒng)體積大、成本高、可靠性不易保證,且用戶交互性不好。嵌入式Linux操作系統(tǒng)由于具有代碼開源、可移植性、軟硬件可裁剪性、資源豐富及支持多種硬件平臺和接口等特點,并且從2.6版本以后的Linux實時性有了很大的提高,正被越來越多地應(yīng)用于伺服控制系統(tǒng)中。通過嵌入式Linux操作系統(tǒng)對控制系統(tǒng)的軟硬件資源進行分配、調(diào)度、控制和協(xié)調(diào),能夠充分發(fā)揮控制系統(tǒng)的性能。ARM處理器以其體積小、低功耗、低成本、高性能、文檔豐富及嵌入式軟件多等優(yōu)點而得到廣泛的應(yīng)用。因此,本文以ARM9CPLD為硬件平臺,在嵌入式Linux操作系統(tǒng)下設(shè)計了直流伺服控制系統(tǒng)。

1 硬件平臺
    系統(tǒng)原理框圖[1]如圖1所示。系統(tǒng)以ARM作為主控芯片,主要負責運行操作系統(tǒng)并實現(xiàn)控制算法、人機交互和多機通信等。CPLD EPM570T144主要負責從ARM接收數(shù)據(jù),產(chǎn)生相應(yīng)的PWM波;接收編碼器輸出信號,并對其進行處理,得到編碼器的值,將其送給ARM,從而實現(xiàn)電機的閉環(huán)控制。CPLD和ARM之間通過地址總線(13根)、數(shù)據(jù)總線(16根)、控制總線(片選、讀寫使能信號等)與GPIO口(作為外部中斷使用)連接,即CPLD類似于ARM的一個外部存儲器(CPLD掛接在ARM的bank1存儲空間上,地址空間為0x08000000~0x10000000),ARM和CPLD的數(shù)據(jù)交換類似于對存儲器的讀寫操作。這種總線方式擴展,使得系統(tǒng)數(shù)據(jù)交換快速、操作簡單。控制板通過JTAG、UART、USB和網(wǎng)口與上位機連接,在目標板和上位機之間建立交叉開發(fā)環(huán)境,可在控制板和上位機之間實現(xiàn)程序下載調(diào)試、文件傳輸和通信等,便于系統(tǒng)軟件開發(fā)和調(diào)試。

2 CPLD程序設(shè)計
    CPLD程序分為電機辨向、四倍頻、編碼器脈沖計數(shù)、PWM波生成和總線數(shù)據(jù)讀寫5個模塊,如圖2所示。采用VHDL語言,依據(jù)自底向上設(shè)計的方法,以便于程序開發(fā)和移植。

    采用增量式編碼器,需對編碼器輸出的ABZ碼進行處理[2],經(jīng)過辨向、倍頻、計數(shù)后得到編碼器值。ARM與CPLD之間通過雙向總線交換數(shù)據(jù),CPLD讀取ARM寫入數(shù)據(jù)總線的數(shù)據(jù),產(chǎn)生對應(yīng)的PWM波。當CPLD中的編碼器值可讀后,CPLD采用中斷方式通知ARM,然后將編碼器值寫到數(shù)據(jù)總線上供ARM讀取。由于CPLD與ARM的其他外設(shè)共用數(shù)據(jù)總線,所以在CPLD對總線進行操作時要特別注意,除了CPLD往總線上寫數(shù)據(jù)外,其他時刻都應(yīng)該將總線置為高阻態(tài),以讓出總線的使用權(quán),否則其他外設(shè)(如網(wǎng)口、ADC接口等)會因CPLD一直占用總線而不能正常工作。
    CPLD應(yīng)用計數(shù)法產(chǎn)生PWM波[3],CPLD時鐘頻率為100 MHz,設(shè)置PWM總計數(shù)值為8 000。CPLD根據(jù)ARM給定的0~8 000的計數(shù)值對時鐘計數(shù),產(chǎn)生兩路反相的PWM波。為防止功率放大器的H橋同一側(cè)上下同時導通,一般設(shè)置有3~5 μs的死區(qū),本設(shè)計中設(shè)置為5 μs的死區(qū)。
3 設(shè)備驅(qū)動設(shè)計
3.1 設(shè)備驅(qū)動簡介

    設(shè)備驅(qū)動是連接應(yīng)用程序與硬件設(shè)備的橋梁,驅(qū)動程序為應(yīng)用程序提供了接口函數(shù),用戶在應(yīng)用程序中調(diào)用相應(yīng)的接口函數(shù)便可實現(xiàn)對硬件設(shè)備的操作,因此,驅(qū)動程序的開發(fā)是嵌入式系統(tǒng)開發(fā)的關(guān)鍵環(huán)節(jié)。Linux設(shè)備驅(qū)動分為字符設(shè)備驅(qū)動、塊設(shè)備驅(qū)動和網(wǎng)絡(luò)設(shè)備驅(qū)動[4]。本文中控制板上移植了Linux2.6操作系統(tǒng),該操作系統(tǒng)下需設(shè)計ARM讀寫CPLD的數(shù)據(jù)及對CPLD產(chǎn)生的中斷信號響應(yīng)的驅(qū)動,這一要求采用字符設(shè)備驅(qū)動來實現(xiàn)。應(yīng)用程序通過系統(tǒng)調(diào)用對設(shè)備文件進行諸如read、write等操作時,系統(tǒng)調(diào)用通過設(shè)備文件的主設(shè)備號找到相應(yīng)的設(shè)備驅(qū)動程序,然后讀取設(shè)備驅(qū)動程序中初始化的file_operations結(jié)構(gòu)體,獲取相應(yīng)操作(read/write等)對應(yīng)的函數(shù)指針,接著把控制權(quán)交給該函數(shù)。因此,編寫設(shè)備驅(qū)動程序的主要工作就是編寫這些文件操作的接口函數(shù),并填充file_operations的各個域。
3.2 設(shè)備驅(qū)動程序設(shè)計
    為便于開發(fā)和調(diào)試,設(shè)備驅(qū)動使用模塊的方式動態(tài)加載到內(nèi)核中去。加載模塊的方式與以往的應(yīng)用程序開發(fā)有很大的不同。以往在開發(fā)應(yīng)用程序時都有一個main()函數(shù)作為程序的入口點,而在驅(qū)動開發(fā)時卻沒有main()函數(shù),模塊在調(diào)用insmod命令時被加載,此時的入口點為module_init()函數(shù),在該函數(shù)中完成設(shè)備的注冊、設(shè)備文件的創(chuàng)建和相關(guān)內(nèi)存及寄存器的地址映射。同樣,模塊在調(diào)用rmmod命令時被卸載,此時的入口點為module_exit()函數(shù),在該函數(shù)中將不用的資源返還給操作系統(tǒng),把注冊的設(shè)備、創(chuàng)建的設(shè)備文件及IO內(nèi)存映射等注銷掉。在設(shè)備完成注冊和加載之后,用戶的應(yīng)用程序就可以對該設(shè)備進行一定的操作,如read、write等。而驅(qū)動就是用于實現(xiàn)這些操作,在用戶應(yīng)用程序調(diào)用相應(yīng)入口函數(shù)時執(zhí)行相關(guān)的操作,module_init()入口點函數(shù)則不需要完成其他如read、wirte之類的功能。驅(qū)動程序需要定義和實現(xiàn)open、read、write等函數(shù),并填充到file_operations結(jié)構(gòu)中,file_operations結(jié)構(gòu)把應(yīng)用程序中的系統(tǒng)調(diào)用與驅(qū)動中對應(yīng)的函數(shù)聯(lián)系在一起。file_operations結(jié)構(gòu)體如下所示:
static struct  file_operations    cpld_drv_fops = {
    .owner    = THIS_MODULE,
    .write    = cpld_drv_write,
    .read    = cpld_drv_read,
    .open    = cpld_drv_open,
    .release    = cpld_drv_close,
    .fasync    = cpld_drv_fasync,
};
其中,write()函數(shù)實現(xiàn)向CPLD中寫入數(shù)據(jù),read()函數(shù)實現(xiàn)ARM從CPLD讀取數(shù)據(jù)。設(shè)備驅(qū)動運行在內(nèi)核空間,而應(yīng)用程序運行在用戶空間,設(shè)備驅(qū)動程序不能直接訪問用戶空間的地址,在read()和write()函數(shù)中分別調(diào)用內(nèi)核函數(shù)copy_to_user()和copy_from_user()實現(xiàn)數(shù)據(jù)的轉(zhuǎn)移。read函數(shù)實現(xiàn)讀取CPLD中的編碼器值,write函數(shù)實現(xiàn)將產(chǎn)生PWM波的計數(shù)值寫入CPLD中,這兩個函數(shù)實現(xiàn)了內(nèi)核空間與用戶空間的數(shù)據(jù)交換。從驅(qū)動程序結(jié)構(gòu)看,驅(qū)動程序由三部分組成:結(jié)構(gòu)體struct file_operations及其成員函數(shù)的實現(xiàn)、設(shè)備初始化module_init()和設(shè)備注銷module_exit()。
    讀寫CPLD需要對內(nèi)存進行讀寫操作[5]。CPLD產(chǎn)生的讀中斷信號連接到ARM的GPF1口,CPLD的使能信號由ARM的GPF0產(chǎn)生,因此需要配置相應(yīng)的寄存器。驅(qū)動程序中需要對內(nèi)存和寄存器進行操作,本操作系統(tǒng)下不能直接對內(nèi)存和寄存器的物理地址進行操作,需先將相應(yīng)的內(nèi)存和寄存器的物理地址映射到內(nèi)核的虛擬地址空間,通過對映射后的虛擬地址進行操作實現(xiàn)對寄存器和內(nèi)存的操作。
    ARM對CPLD的讀操作采用異步通知和內(nèi)核中斷方式[5]實現(xiàn),這樣可減少系統(tǒng)開支。首先在驅(qū)動的open()函數(shù)中調(diào)用request_irq()函數(shù)注冊內(nèi)核中斷,并在內(nèi)核中實現(xiàn)中斷處理函數(shù),在內(nèi)核中斷處理函數(shù)中調(diào)用kill_fasyn()函數(shù)給指定的應(yīng)用程序發(fā)送信號,通知應(yīng)用程序CPLD中的編碼器值可讀。當CPLD無可讀中斷產(chǎn)生時,將read()函數(shù)放入等待隊列,主程序一直處于睡眠狀態(tài),而不是應(yīng)用程序主動去調(diào)用read()函數(shù)來等待中斷的產(chǎn)生,即采用異步通知方式,調(diào)用內(nèi)核中的fasync_helper()函數(shù)來實現(xiàn)。當CPLD有可讀中斷產(chǎn)生時,在中斷處理函數(shù)中通過kill_fasync()函數(shù),向進程發(fā)送信號SIGIO,觸發(fā)應(yīng)用程序中signal聲明的異步觸發(fā)函數(shù),使用POLL_IN表明有數(shù)值可以讀取。另外,要注意,在進入中斷服務(wù)程序后,首先通過中斷自旋鎖spin_lock_irq()關(guān)閉所有中斷,以防止其他中斷源中斷kill_fasync的工作,在中斷服務(wù)程序結(jié)束時,再通過spin_unlock_irq()打開中斷。中斷處理函數(shù)部分代碼如下:
spinlock_t lock;
static irqreturn_t eint1_irq(int irq, void *dev_id)
//中斷服務(wù)程序
{
    spin_lock_irq(&lock);//關(guān)閉中斷
    kill_fasync (&eint1_async, SIGIO, POLL_IN);
//產(chǎn)生中斷后,驅(qū)動向應(yīng)用程序發(fā)送數(shù)據(jù)可讀信號
    spin_unlock_irq(&lock);//開中斷
    return IRQ_RETVAL(IRQ_HANDLED);
}
4 應(yīng)用程序設(shè)計

 


    在應(yīng)用程序[6]中,通過函數(shù)signal()注冊信號處理函數(shù),以接收內(nèi)核發(fā)來的數(shù)據(jù)可讀信號。為了打開設(shè)備文件的異步觸發(fā)機制,用戶程序需指定當前進程為內(nèi)核發(fā)送信號的接收進程,可以通過fcntl系統(tǒng)調(diào)用的F_SETOWN命令來設(shè)置該值。用戶程序還必須通過另一個fcntl命令設(shè)置設(shè)備的FASYNC標志,打開異步觸發(fā)機制。只要內(nèi)核中有CPLD可讀中斷產(chǎn)生,輸入文件就會產(chǎn)生一個SIGIO信號,信號發(fā)送給應(yīng)用程序,應(yīng)用程序調(diào)用信號處理函數(shù)。在信號處理函數(shù)中讀取編碼器的值,通過控制算法得到控制數(shù)據(jù)(即PWM波計數(shù)值),然后將PWM波的計數(shù)值寫入到CPLD中。主程序流程圖如圖3所示,部分代碼如下:
int main(int argc, char **argv)
{
    int Oflags;
    signal(SIGIO, signal_fun);//注冊信號處理函數(shù)
    Init(argc,argv);     //打開設(shè)備,控制參數(shù)初始化
    …
    fcntl(fd_cpld, F_SETOWN, getpid());    
//指定當前進程為接收信號進程
    Oflags=fcntl(fd_cpld, F_GETFL);//返回當前的信號標志
    fcntl(fd_cpld, F_SETFL, Oflags | FASYNC);
//打開異步觸發(fā)機制
    while(1)
    {
        sleep(1000);//進程睡眠,等待內(nèi)核發(fā)送中斷信號
    }
    ……
    return 0;
}
    由于Linux是多任務(wù)系統(tǒng),各個進程間采用一定的調(diào)度算法調(diào)度,進程間會不時地切換,因此編寫程序時要特別考慮系統(tǒng)進程調(diào)度的問題。控制程序?qū)崟r性有一定的要求,因此,要將控制程序進程設(shè)置為實時進程且要具有較高的進程調(diào)度優(yōu)先級,同時控制程序中要盡量少地使用系統(tǒng)調(diào)用,以保證控制系統(tǒng)的實時性。
5 實驗結(jié)果
    控制板通過串口、網(wǎng)口與計算機(裝有Linux系統(tǒng))建立交叉編譯環(huán)境,程序在計算機上編譯調(diào)試。利用網(wǎng)線通過nfs(網(wǎng)絡(luò)文件系統(tǒng))服務(wù),在計算機和控制板之間實現(xiàn)網(wǎng)絡(luò)文件共享,可直接在控制板上訪問計算機上的共享文件、執(zhí)行計算機上編譯好的程序,無需將計算機上編譯好的程序下載到板子上。這種交叉開發(fā)的方式將程序和實驗數(shù)據(jù)直接存儲在計算機上,可節(jié)省控制板上的存儲空間,便于程序開發(fā)和進行實驗數(shù)據(jù)分析。
    實驗過程中,首先要對電機參數(shù)進行辨識。電機參數(shù)辨識的方法[7-8]很多,本實驗采用階躍響應(yīng)法測得電機的模型參數(shù),近似為一階慣性環(huán)節(jié)。編碼器為增量式編碼器,電機轉(zhuǎn)一圈產(chǎn)生20 000個碼,即一個碼值對應(yīng)0.018°,編碼器值采樣周期為2 ms。將電機一個采樣周期內(nèi)轉(zhuǎn)過的角度值除以采樣周期作為速度反饋值,將電機轉(zhuǎn)過的角度進行累加得到位置反饋值,電機最高轉(zhuǎn)速為900°/s,最低轉(zhuǎn)速為9°/s,采用PI控制[9-10]。圖4為系統(tǒng)速度階躍響應(yīng)曲線,速度響應(yīng)誤差為每1個采樣周期1個碼值。圖5為系統(tǒng)位置階躍曲線,設(shè)定速度環(huán)最大速度為180°/s。位置環(huán)采用抗積分飽和算法,以消除因積分飽和引起的過大的超調(diào),位置階躍穩(wěn)態(tài)誤差為0。圖6是系統(tǒng)的速度正弦跟蹤曲線,正弦引導函數(shù)為:v=180°sin(0.8πt),跟蹤誤差在正反轉(zhuǎn)速度換向處跟蹤誤差較大。

    實驗結(jié)果表明,基于ARM9和CPLD硬件平臺,在嵌入式Linux操作系統(tǒng)下,系統(tǒng)能夠?qū)崿F(xiàn)等速跟蹤、位置定點和正弦跟蹤等功能,滿足控制實時性要求,可實現(xiàn)伺服控制。系統(tǒng)體積小、成本低、功耗小、接口豐富、便于開發(fā),且Linux系統(tǒng)具有很好的文件管理功能,有助于實驗數(shù)據(jù)的存儲和導出,便于實驗結(jié)果分析。系統(tǒng)進一步完善后可將控制程序設(shè)計成圖形界面,利用觸摸屏輸入和顯示伺服控制結(jié)果,則可實現(xiàn)控制結(jié)果實時顯示,可視化效果好,整個系統(tǒng)可脫離計算機工作,具有廣泛的應(yīng)用價值。
參考文獻
[1] 李金洪,楊小軍.基于DSP和FPGA的經(jīng)緯儀控制系統(tǒng)設(shè)計[J].電子技術(shù)應(yīng)用,2010,36(7):48-51.
[2] 鈔靖,王小椿,姜虹.基于FPGA的光電編碼器四倍頻電路設(shè)計[J].儀表技術(shù),2007(6):17-21.
[3] 耿偉松,于海東.基于CPLD的PWM發(fā)生器設(shè)計[J].制造業(yè)自動化,2010,32(6):151-153.
[4] 韋東山.嵌入式Linux應(yīng)用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[5] 宋寶華.Linux設(shè)備驅(qū)動詳解[M].北京:人民郵電出版社,2008.
[6] 孫程建.基于Linux的嵌入式數(shù)控系統(tǒng)底層軟件設(shè)計[D].武漢:武漢科技大學,2007.
[7] 王帥,陳濤,李洪文,等.光電跟蹤伺服系統(tǒng)的頻率特性測試與模型辨識[J].光學精密工程,2009,17(1):78-83.
[8] 王偉國,陳濤,沈湘衡.直流伺服系統(tǒng)機械時間常熟測試方法的研究[J].儀器儀表學報,2005,26(8):66-70.
[9] 李洪文.基于內(nèi)模PID控制的大型望遠鏡伺服系統(tǒng)[J].光學精密工程,2009(2):327-332.
[10] 劉金錕.先進PID控制及其MATLAB仿真[M].北京:電子工業(yè)出版社,2003.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
亚洲精品久久久蜜桃| 亚洲第一页在线| 黑人一区二区三区四区五区| 欧美四级在线观看| 欧美精品福利视频| 欧美激情在线免费观看| 欧美成人一区二区三区| 久久婷婷久久| 久久久久久电影| 久久爱www.| 久久精品欧美| 久久精品人人做人人爽电影蜜月| 欧美一区二区三区成人| 欧美亚洲网站| 欧美一区三区二区在线观看| 亚洲欧美一区二区三区久久| 亚洲欧美日韩在线高清直播| 亚洲欧美日韩国产一区| 午夜精品一区二区三区四区| 性欧美大战久久久久久久久| 欧美在线视频观看免费网站| 欧美在线日韩| 久久夜色精品国产欧美乱极品| 久久视频在线视频| 免费h精品视频在线播放| 欧美aⅴ99久久黑人专区| 欧美精品激情在线观看| 欧美日韩专区| 国产精品久久一区主播| 国产日韩欧美成人| 国内精品国语自产拍在线观看| 国内久久婷婷综合| 亚洲高清不卡av| 日韩视频在线观看一区二区| 亚洲视频在线观看免费| 欧美一二三区精品| 亚洲国产精品v| 日韩午夜电影| 新狼窝色av性久久久久久| 久久国产精品一区二区| 美女任你摸久久| 欧美日韩hd| 国产精品三级视频| 狠色狠色综合久久| 亚洲电影免费在线| 99国产精品久久久久久久| 亚洲一卡二卡三卡四卡五卡| 欧美亚洲一区| 亚洲精品视频在线观看网站| 亚洲午夜精品网| 久久精品久久综合| 欧美高清视频一区二区| 国产精品成人免费| 黄色欧美日韩| 日韩一级精品| 欧美一级免费视频| 亚洲精品视频一区二区三区| 亚洲女同在线| 裸体一区二区三区| 欧美午夜不卡视频| 国产综合婷婷| 一区二区电影免费在线观看| 午夜在线电影亚洲一区| 亚洲日本中文| 午夜精品亚洲| 欧美激情一区二区三区蜜桃视频| 国产精品嫩草影院av蜜臀| 一区二区自拍| 亚洲欧美www| 日韩午夜视频在线观看| 久久久久99| 欧美视频一区二区三区在线观看| 国产一区香蕉久久| 99精品福利视频| 久久精品人人做人人爽电影蜜月| 99视频精品在线| 久久久999国产| 欧美日韩中文在线| 在线观看日韩一区| 欧美一区2区三区4区公司二百| 日韩一级精品视频在线观看| 欧美一区二区精美| 欧美日韩成人综合天天影院| 国产亚洲欧洲一区高清在线观看| 亚洲精品乱码| 久久精品91| 午夜精品在线看| 欧美人在线观看| 狠狠色伊人亚洲综合网站色| 亚洲天堂av在线免费| 亚洲精品美女在线| 久久久九九九九| 国产精品欧美日韩久久| 最新国产の精品合集bt伙计| 欧美中文字幕| 欧美一区二区三区四区高清| 欧美日韩mv| 亚洲大片免费看| 欧美在线视频不卡| 欧美一级成年大片在线观看| 欧美日韩精品三区| 亚洲国产黄色片| 亚洲国产电影| 久久久久国产一区二区| 国产精品视频自拍| 中文精品视频| 亚洲调教视频在线观看| 欧美区视频在线观看| 亚洲大胆美女视频| 亚洲国产成人高清精品| 久久狠狠婷婷| 国产欧美日韩精品丝袜高跟鞋| 在线一区二区三区四区五区| 中文精品视频| 欧美精品在线免费| 亚洲精品免费电影| 日韩视频专区| 欧美日韩精品二区第二页| 亚洲精品国产精品乱码不99按摩| 亚洲国产精品传媒在线观看 | 国产精品久久久久久久电影 | 国产精品久久久999| 日韩午夜一区| 亚洲特黄一级片| 国产精品国产一区二区| 亚洲一区二区黄色| 欧美亚洲系列| 国产三级精品在线不卡| 性亚洲最疯狂xxxx高清| 久久精品国产2020观看福利| 国产日产欧产精品推荐色| 欧美一区二区三区视频在线观看| 欧美一区二区三区视频在线| 国产精品资源| 欧美在线观看视频| 你懂的国产精品永久在线| 亚洲国产精品久久久久婷婷老年| 亚洲乱码国产乱码精品精可以看| 欧美高清hd18日本| 日韩亚洲国产欧美| 亚洲欧美日韩系列| 国产午夜精品全部视频在线播放 | 久久精品国产一区二区三区| 美女福利精品视频| 亚洲黄一区二区三区| 99在线热播精品免费| 欧美系列精品| 午夜精品国产更新| 老司机精品导航| 日韩小视频在线观看专区| 亚洲欧美精品中文字幕在线| 国产老女人精品毛片久久| 久久国产精品一区二区三区| 麻豆国产精品777777在线| 亚洲精品久久久久中文字幕欢迎你 | 国产精品家教| 欧美中文字幕久久| 欧美精品一卡| 亚洲一区二区三区免费视频| 久久久久久久综合日本| 91久久久亚洲精品| 先锋资源久久| 亚洲第一黄网| 亚洲一区三区视频在线观看 | 国内精品免费午夜毛片| 日韩视频在线一区| 国产欧美一区二区精品秋霞影院| 久久成人一区| 欧美日韩另类字幕中文| 亚洲欧美日韩一区二区三区在线观看 | 欧美日韩黄色大片| 午夜视黄欧洲亚洲| 欧美激情一区二区三区| 亚洲一区一卡| 欧美成人精品在线| 亚洲视频中文| 老司机67194精品线观看| 一本一本久久| 久久人人97超碰国产公开结果| 亚洲人成人99网站| 欧美主播一区二区三区美女 久久精品人 | 亚洲高清视频一区| 欧美一区二粉嫩精品国产一线天| 亚洲高清一区二区三区| 欧美一二三视频| 亚洲精品精选| 久久久久9999亚洲精品| 一区二区三区精品视频在线观看| 久久久久久综合| 在线亚洲国产精品网站| 麻豆久久久9性大片| 亚洲一级影院| 欧美精品在线一区二区| 欧美一级黄色网| 欧美无乱码久久久免费午夜一区| 亚洲黄色有码视频| 国产日韩欧美91| 午夜久久99| 正在播放日韩| 欧美日韩第一区|