99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營的一線實(shí)戰(zhàn)洞察。

STM32CubeMX正交編碼器配置實(shí)戰(zhàn):原理、步驟與踩坑指南

STM32CubeMX正交編碼器配置實(shí)戰(zhàn):原理、步驟與踩坑指南 1. 從轉(zhuǎn)輪上的幾根線說起正交編碼器到底解決了什么問題做電機(jī)控制、小車底盤、云臺(tái)角度反饋的朋友多半都遇到過同一個(gè)困惑怎么準(zhǔn)確知道電機(jī)現(xiàn)在轉(zhuǎn)了多少圈、轉(zhuǎn)向是正還是反用霍爾傳感器只能測個(gè)大概用光碼盤配合普通IO讀又得盯著電平邊沿?cái)?shù)脈沖稍微一轉(zhuǎn)快了程序就亂套。直到你接觸了正交編碼器Quadrature Encoder再配合STM32定時(shí)器自帶的編碼器模式這件事才真正變得優(yōu)雅起來。正交編碼器本質(zhì)上就是一種通過兩組相位相差90度的方波信號(hào)來傳遞位置和方向信息的傳感器。A相和B相各自輸出脈沖電機(jī)每轉(zhuǎn)過一個(gè)固定角度就產(chǎn)生一個(gè)邊沿。因?yàn)閮上嘈盘?hào)之間有90度的相位差所以控制器只需要判斷A相和B相誰先跳變、誰后跳變就能知道軸是正轉(zhuǎn)還是反轉(zhuǎn)。更關(guān)鍵的是利用A、B兩相的共同邊沿可以把一圈的物理分辨率直接翻四倍這就是常說的4倍頻。比如編碼器一圈輸出500個(gè)脈沖4倍頻之后控制器每圈能分辨2000個(gè)計(jì)數(shù)單位。STM32的定時(shí)器外設(shè)在設(shè)計(jì)上就內(nèi)置了編碼器接口模式。也就是說硬件層面已經(jīng)幫你把A、B兩相的判向和計(jì)數(shù)邏輯做完了不需要外部判向電路也不需要占用CPU中斷去逐個(gè)邊沿判斷。你只需要把編碼器的A、B相接在定時(shí)器的兩個(gè)通道輸入上配置好工作模式計(jì)數(shù)器就會(huì)自動(dòng)加一或減一整個(gè)過程零CPU負(fù)擔(dān)。對(duì)工程實(shí)踐來說這意味著三件事接線簡單、實(shí)時(shí)性好、分辨率高。接線方面只需兩根信號(hào)線加電源地實(shí)時(shí)性方面計(jì)數(shù)由硬件完成不會(huì)因?yàn)橹袛囗憫?yīng)延遲而丟脈沖分辨率方面天然支持4倍頻不用額外算法就能拿到更精細(xì)的位置信息。我最早接觸這個(gè)功能是在做一個(gè)雙輪差速小車的時(shí)候。當(dāng)時(shí)用的是500線增量式編碼器加直流減速電機(jī)MCU是STM32F103RCT6。最初的方案是用外部中斷讀A相再用GPIO判斷B相電平來定方向結(jié)果車速一快中斷頻繁觸發(fā)主循環(huán)直接卡死測速數(shù)據(jù)還時(shí)不時(shí)跳變。后來換用定時(shí)器的編碼器模式整個(gè)測速鏈路瞬間輕松了。本文就圍繞STM32CubeMX中的正交編碼器配置完整講一遍原理、配置步驟、代碼集成和實(shí)際踩坑經(jīng)驗(yàn)給正準(zhǔn)備做運(yùn)動(dòng)控制的朋友一個(gè)可直接參考的路徑。2. 硬件層的關(guān)鍵判斷編碼器類型、接口電壓和定時(shí)器選型2.1 增量式編碼器與絕對(duì)式編碼器的區(qū)別談到正交編碼器第一件事是分清增量式和絕對(duì)式。STM32定時(shí)器的編碼器模式主要配合增量式編碼器使用。增量式編碼器輸出A、B兩相方波可能還有Z相零位脈沖它的特點(diǎn)是只輸出相對(duì)位置變化量斷電后無法記憶絕對(duì)位置。絕對(duì)式編碼器直接輸出當(dāng)前角度的二進(jìn)制編碼值一般走SPI、SSI或者并口不走定時(shí)器編碼器模式這條路。我自己項(xiàng)目里用過兩類增量式編碼器一種是光電式碼盤上刻著密密麻麻的柵格通過光柵透射產(chǎn)生方波信號(hào)另一種是磁式利用磁阻傳感器感知磁鐵旋轉(zhuǎn)角度變化輸出也同樣是A、B正交信號(hào)。光電式精度高但怕塵土油污磁式抗污染能力強(qiáng)價(jià)格相對(duì)便宜在小型機(jī)器人關(guān)節(jié)和電機(jī)尾軸上很常見。STM32的編碼器模式對(duì)這兩類都適用因?yàn)闅w根到底它只識(shí)別電平跳變和相位關(guān)系不在乎信號(hào)是光還是磁產(chǎn)生的。2.2 信號(hào)電平匹配3.3V與5V編碼器的處理編碼器供電電壓常見的有5V和3.3V兩種。許多工業(yè)級(jí)編碼器都是5V供電輸出高電平是5V這個(gè)電壓直接進(jìn)STM32的GPIO是有風(fēng)險(xiǎn)的。STM32F1系列的IO容忍5V輸入F4系列的部分IO也標(biāo)注了FTFive-volt tolerant屬性但不是所有引腳都支持。穩(wěn)妥的做法是在CubeMX里查看引腳定義表確認(rèn)選擇的通道引腳帶FT標(biāo)識(shí)否則串電阻分壓之后再進(jìn)MCU。我在一個(gè)項(xiàng)目中用的是歐姆龍E6B2-CWZ6C額定供電5V到24V輸出是開集電極方式必須外部加上拉電阻才能有明確的高電平。那時(shí)候?yàn)榱耸∈轮苯影演敵鲂盘?hào)引到F103的PA0和PA1上實(shí)測能用但波形邊沿比較緩后來在信號(hào)線上并聯(lián)了100pF電容去毛刺波形立刻干凈了不少。如果你的編碼器是推挽輸出邊沿會(huì)比較陡直接接3.3V供電的編碼器則最簡單完全不用考慮電平轉(zhuǎn)換。下表是我判斷編碼器接口適配性時(shí)常用的參考編碼器輸出類型輸出電平是否可直接接STM32 F1是否可直接接STM32 F4處理方式推挽輸出3.3V0~3.3V是是直接連接推挽輸出5V0~5V多數(shù)引腳可僅FT引腳可確認(rèn)FT或電平轉(zhuǎn)換開集電極輸出需外部上拉視上拉到3.3V或5V視上拉到3.3V或5V上拉到3.3V最安全差分輸出RS-422差分信號(hào)否否需要差分轉(zhuǎn)單端電路2.3 定時(shí)器選型為什么優(yōu)先選帶編碼器模式的通用定時(shí)器STM32家族里高級(jí)定時(shí)器TIM1、TIM8通用定時(shí)器TIM2、TIM3、TIM4、TIM5等都支持編碼器接口模式。選型時(shí)主要看三點(diǎn)可用的通道引腳是否和你的PCB走線沖突、計(jì)數(shù)器位寬、以及是否有其他外設(shè)搶占同一引腳。F103這種老經(jīng)典TIM2和TIM3的通道引腳映射很常用。TIM2的CH1和CH2可以映射到PA0、PA1或者通過重映射到PA15、PB3TIM3的CH1和CH2可以映射到PA6、PA7或者重映射到PB4、PB5。如果你用了JTAG調(diào)試口PA15、PB3、PB4這些引腳默認(rèn)被調(diào)試功能占用需要先關(guān)閉JTAG才能當(dāng)普通IO用。不要小看這一步很多人配置了半天引腳就是沒反應(yīng)最后發(fā)現(xiàn)是JTAG占用的問題。計(jì)數(shù)器位寬方面F103的TIM2和TIM5是32位計(jì)數(shù)器TIM3和TIM4是16位。高速旋轉(zhuǎn)時(shí)16位計(jì)數(shù)器在極高分辨率下可能很快溢出需要額外處理溢出中斷。32位計(jì)數(shù)器則寬裕得多。同樣是500線4倍頻電機(jī)最高轉(zhuǎn)速3000轉(zhuǎn)/分鐘每秒產(chǎn)生的脈沖數(shù)是500 × 4 × 50 10000016位計(jì)數(shù)器65535的上限在一秒內(nèi)一定會(huì)溢出。雖然可以通過溢出中斷配合擴(kuò)展位數(shù)但如果你同時(shí)做多路電機(jī)控制溢出中斷會(huì)時(shí)不時(shí)打斷主流程增加復(fù)雜度。這也是我后來做四輪小車時(shí)優(yōu)先選TIM2的原因32位計(jì)數(shù)器讓位置計(jì)數(shù)變得非常省心。另外CubeMX的引腳分配視圖里可以直接搜索TIM2_CH1、TIM2_CH2這樣的復(fù)用功能標(biāo)識(shí)誰和誰共用一個(gè)引腳會(huì)高亮顯示底層引腳沖突一目了然。選定時(shí)器時(shí)我習(xí)慣先在CubeMX里把引腳分配方案拖一遍確認(rèn)沒有沖突再回去畫PCB能省掉后面不少飛線改板的麻煩。3. 定時(shí)器編碼器模式的內(nèi)部機(jī)制計(jì)數(shù)方向判定的硬核邏輯3.1 為什么硬件判向比中斷判向更可靠軟件判向的思路通常是A相觸發(fā)外部中斷進(jìn)中斷后讀B相電平高電平代表正轉(zhuǎn)低電平代表反轉(zhuǎn)。這個(gè)方法在小車慢速運(yùn)行時(shí)沒問題但轉(zhuǎn)速起來之后中斷的響應(yīng)延遲會(huì)引入判斷誤差。更麻煩的是如果A相毛刺較多可能在極短時(shí)間內(nèi)觸發(fā)多次中斷造成計(jì)數(shù)錯(cuò)誤。硬件編碼器模式?jīng)]有這個(gè)問題。STM32的編碼器接口邏輯同時(shí)監(jiān)視兩個(gè)輸入信號(hào)在每個(gè)信號(hào)邊沿處進(jìn)行一次采樣綜合兩個(gè)信號(hào)的電平狀態(tài)判斷方向。因?yàn)榕袛噙壿嬐耆捎布M合電路實(shí)現(xiàn)不依賴指令執(zhí)行速度所以只要信號(hào)頻率在定時(shí)器時(shí)鐘能處理的范圍內(nèi)就不會(huì)出錯(cuò)。判斷方向和計(jì)數(shù)的本質(zhì)邏輯可以理解成一個(gè)兩輸入的狀態(tài)機(jī)。A、B兩相各有兩個(gè)電平狀態(tài)高、低組合起來有四種狀態(tài)。編碼器每轉(zhuǎn)過一個(gè)最小角度單位組合狀態(tài)就變化一次變化的方向則決定了計(jì)數(shù)器是加一還是減一。這有點(diǎn)像我們判斷一個(gè)人往哪邊走看到腳印從左邊挪到右邊就知道他往右走了。硬件在每個(gè)邊沿看的是上一個(gè)狀態(tài)和當(dāng)前狀態(tài)的關(guān)系而不是單看一路信號(hào)。3.2 三種計(jì)數(shù)模式為什么不選X1和X2直接上X4STM32的編碼器模式可以在CubeMX里配置三種計(jì)數(shù)方式X1模式只在一個(gè)通道的邊沿計(jì)數(shù)X2模式在兩個(gè)通道的邊沿計(jì)數(shù)X4模式在四個(gè)邊沿計(jì)數(shù)也就是每個(gè)完整信號(hào)周期產(chǎn)生四個(gè)計(jì)數(shù)脈沖。三種模式的差異直接反映在分辨率上。X1模式一圈計(jì)500個(gè)數(shù)以500線編碼器為例X2模式一圈計(jì)1000個(gè)數(shù)X4模式一圈計(jì)2000個(gè)數(shù)。很多人會(huì)糾結(jié)選哪個(gè)好我的建議是只要計(jì)數(shù)器位數(shù)夠用直接X4模式。X4模式不光分辨率最高而且每個(gè)邊沿都在更新計(jì)數(shù)器角度變化信息更平滑低速時(shí)的測速表現(xiàn)也更細(xì)膩。代價(jià)僅僅是計(jì)數(shù)器溢出更快但在32位計(jì)數(shù)器面前這個(gè)代價(jià)基本可以忽略。CubeMX中的配置項(xiàng)叫做Encoder Mode下拉里會(huì)出現(xiàn)Encoder Mode TI1、Encoder Mode TI2、Encoder Mode TI1 and TI2三個(gè)選項(xiàng)。第一個(gè)對(duì)應(yīng)X1模式第二個(gè)對(duì)應(yīng)X1模式只是計(jì)數(shù)沿選擇的通道不同第三個(gè)才是X4模式。填的時(shí)候注意別選錯(cuò)我早期就誤選過Encoder Mode TI1結(jié)果分辨率只到了一半查了半天資料才發(fā)現(xiàn)是這里的問題。3.3 計(jì)數(shù)方向、溢出中斷和Counter Period的配合邏輯編碼器模式下計(jì)數(shù)器是一個(gè)雙向計(jì)數(shù)器。有人說編碼器模式下定時(shí)器的ARPE自動(dòng)重裝載預(yù)裝載和重裝載值沒有意義這句話是不準(zhǔn)確的。編碼器模式下計(jì)數(shù)器會(huì)在0和自動(dòng)重裝載值之間來回計(jì)數(shù)上溢和下溢都會(huì)觸發(fā)更新事件。如果你把重裝載值設(shè)為默認(rèn)的65535計(jì)數(shù)范圍就是0到65535如果你設(shè)成2000計(jì)數(shù)范圍就變成0到2000計(jì)數(shù)器到2000后繼續(xù)正轉(zhuǎn)就回0反轉(zhuǎn)從0往下就跳到2000。這個(gè)特性非常有用。假設(shè)你的編碼器一圈4倍頻之后正好是2000個(gè)脈沖把Counter Period設(shè)為2000那么讀回來的CNT值就直接對(duì)應(yīng)當(dāng)前角度在0到2000之間的位置根本不需要額外做取模運(yùn)算。做云臺(tái)和機(jī)械臂角度控制時(shí)這個(gè)特性可以省掉大量運(yùn)算代碼。需要注意的一件事是CubeMX里Counter Period填的值對(duì)應(yīng)的是ARR寄存器它決定計(jì)數(shù)上限。有人把Encoder Mode配好了但Counter Period還沿用默認(rèn)值運(yùn)行起來發(fā)現(xiàn)計(jì)數(shù)到65535就跳變還以為是程序問題。這其實(shí)是重裝載值沒有按編碼器一圈的脈沖數(shù)來設(shè)計(jì)的典型表現(xiàn)。下面我用一個(gè)表格梳理三種模式下的關(guān)鍵參數(shù)建議方便你配置時(shí)對(duì)照檢查配置項(xiàng)X1模式X2模式X4模式一圈計(jì)數(shù)脈沖500線50010002000Counter Period建議值499或500999或10001999或2000低速測速細(xì)膩度一般較好最佳溢出中斷頻率最低中等最高3.4 初始化時(shí)清零計(jì)數(shù)的兩種方式項(xiàng)目啟動(dòng)時(shí)位置必須從一個(gè)已知的狀態(tài)開始。清零計(jì)數(shù)器常見有兩種做法一種是調(diào)用__HAL_TIM_SET_COUNTER(htim, 0)直接把計(jì)數(shù)器寫入0另一種是開啟定時(shí)器后向TIM_SR寄存器的UIF位寫0等待一次更新事件完成清零。實(shí)際上最方便的還是第一種因?yàn)镠AL庫提供現(xiàn)成宏一條語句搞定。如果你接的編碼器有Z相零位脈沖還可以把Z相接在另一個(gè)IO上通過外部中斷或者輪詢方式檢測到零位信號(hào)時(shí)清零計(jì)數(shù)器這樣每次上電后機(jī)器都能自動(dòng)找到機(jī)械原點(diǎn)。對(duì)于不帶Z相的編碼器只能采用上電找限位開關(guān)的方式歸零或者在機(jī)械結(jié)構(gòu)上做一個(gè)固定參考點(diǎn)讓電機(jī)轉(zhuǎn)到參考點(diǎn)時(shí)執(zhí)行一次清零操作。4. STM32CubeMX配置實(shí)操一步步點(diǎn)出一份可用的工程4.1 新建工程與時(shí)鐘樹設(shè)置打開STM32CubeMX新建工程選擇你的具體芯片型號(hào)。這里以STM32F103RCT6為例如果你用的是其他型號(hào)流程大同小異。先到Pinout Configuration界面左側(cè)Categories欄里找到SYS把Debug設(shè)為Serial Wire。這一步很重要否則默認(rèn)的JTAG會(huì)占用部分引腳后面配置編碼器輸入時(shí)可能出現(xiàn)引腳灰色不可選的情況。接著配置RCCHSE選擇Crystal/Ceramic Resonator。然后進(jìn)Clock Configuration把系統(tǒng)時(shí)鐘設(shè)為72MHz。F103的編碼器定時(shí)器時(shí)鐘來自APB1APB1的最高頻率是36MHz但定時(shí)器時(shí)鐘會(huì)自動(dòng)倍頻到72MHz這個(gè)細(xì)節(jié)不用手動(dòng)干預(yù)。不過你需要知道編碼器模式下定時(shí)器能處理的最高信號(hào)頻率和這個(gè)時(shí)鐘有關(guān)72MHz的定時(shí)器時(shí)鐘足以覆蓋絕大多數(shù)編碼器的信號(hào)頻率。4.2 TIM2的Encoder Mode配置細(xì)節(jié)在Categories里找到TIM2點(diǎn)擊進(jìn)去在Mode一欄把Combined Channels設(shè)為Encoder Mode。此時(shí)下方會(huì)出現(xiàn)兩個(gè)輸入通道的配置選項(xiàng)Channel1和Channel2都會(huì)自動(dòng)變成Input Capture Indirect Mode之類的顯示不需要手動(dòng)修改CubeMX會(huì)自動(dòng)關(guān)聯(lián)。接著在Configuration一欄里設(shè)置參數(shù)Counter Period根據(jù)上一章的公式計(jì)算如果500線編碼器用X4模式填1999。填1999的意思是從0數(shù)到1999共2000個(gè)值正好對(duì)應(yīng)一圈。Encoder Mode選Encoder Mode TI1 and TI2。Polarity默認(rèn)的Rising Edge即可不需要改動(dòng)。只有在編碼器信號(hào)接反、方向反了的時(shí)候才考慮通過取反極性來修正方向。有個(gè)小技巧在配置完TIM2后到右側(cè)的Pinout視圖確認(rèn)一下TIM2_CH1和TIM2_CH2映射到了哪個(gè)引腳。如果不滿意默認(rèn)映射可以在芯片視圖里直接點(diǎn)擊引腳旁邊的復(fù)用功能文字下拉重新選擇。這樣不用改PCB布局也能靈活調(diào)整。4.3 打開中斷還是DMA實(shí)際場景的選擇依據(jù)編碼器模式單獨(dú)工作不需要中斷也不需要DMA。計(jì)數(shù)器是硬件自己跑的你想讀位置時(shí)直接讀CNT寄存器就行。但從工程實(shí)用性角度建議開啟更新中斷尤其是需要做測速或者位置溢出管理的時(shí)候。在NVIC Settings標(biāo)簽頁里勾選TIM2 global interrupt然后在代碼里實(shí)現(xiàn)定時(shí)器周期中斷回調(diào)就能實(shí)現(xiàn)定期采集位置值。如果你只是偶爾讀取一下當(dāng)前位置比如操作員按鍵觸發(fā)的機(jī)械臂點(diǎn)動(dòng)就不必開中斷輪詢讀取CNT足夠。開了中斷反而會(huì)頻繁打斷主循環(huán)增加功耗和復(fù)雜度。選擇標(biāo)準(zhǔn)只有一個(gè)你是否需要在計(jì)數(shù)溢出邊界進(jìn)行處理或者需要恒定周期采集數(shù)據(jù)。需要就開不需要就不開。DMA在編碼器場景下的用途不大典型的DMA用法是配合ADC連續(xù)采樣模擬量或是配合串口收發(fā)數(shù)據(jù)編碼器計(jì)數(shù)本身沒有DMA的需求。如果你看到別人在編碼器項(xiàng)目里用DMA多半是用DMA搬運(yùn)周期采樣的位置數(shù)據(jù)到內(nèi)存數(shù)組做的是后級(jí)數(shù)據(jù)處理不是編碼器模式本身的要求。4.4 生成代碼前的最后檢查清單點(diǎn)擊Project Manager設(shè)置好工程名稱、存儲(chǔ)路徑和工具鏈。這里有幾個(gè)容易忽略的檢查點(diǎn)需要確認(rèn)IDE選項(xiàng)要和本機(jī)安裝的版本對(duì)應(yīng)MDK-ARM選對(duì)應(yīng)版本或者選STM32CubeIDE。代碼生成選項(xiàng)里Generated files框下勾選Generate peripheral initialization as a pair of .c/.h files per peripheral這樣每個(gè)外設(shè)單獨(dú)生成文件和頭文件后續(xù)維護(hù)方便。如果勾選了Initialize all peripherals with their default settings可能會(huì)把沒配置的外設(shè)也生成初始化代碼增加編譯時(shí)間建議不勾。確認(rèn)無誤后點(diǎn)擊GENERATE CODE。生成的工程放在你指定的路徑下打開MDK或者CubeIDE就能直接編譯。注意第一次編譯之前在魔術(shù)棒或項(xiàng)目屬性里檢查C/C編譯器選項(xiàng)是否選中了Use MicroLIB。STM32標(biāo)準(zhǔn)庫全功能時(shí)需要較少??臻g也會(huì)影響printf之類的重定向這些雖然不是編碼器專屬配置但能讓后續(xù)調(diào)試順暢不少。5. 生成代碼解讀與業(yè)務(wù)代碼集成怎么把CNT變成有用的速度5.1 HAL庫初始化流程里發(fā)生了什么打開生成的tim.c文件你會(huì)看到MX_TIM2_Init函數(shù)里面有幾段關(guān)鍵代碼。第一段是會(huì)話語句和結(jié)構(gòu)體賦值配置Prescaler、CounterMode、Period和ClockDivision。需要特別注意的是編碼器模式下ClockDivision位置和采樣控制有關(guān)一般默認(rèn)值即可不要去調(diào)整預(yù)分頻值。HAL_TIM_Encoder_Init這個(gè)函數(shù)比普通定時(shí)器初始化多做了什么它會(huì)調(diào)用定時(shí)器底層初始化函數(shù)把編碼器模式寫入到定時(shí)器的控制寄存器里并配置兩個(gè)輸入通道為映射模式。更重要的是它設(shè)置了輸入濾波器的相關(guān)參數(shù)。在CubeMX界面的Input Filter選項(xiàng)里你可以填0到15的數(shù)字。這個(gè)濾波器是數(shù)字信號(hào)濾波器用于濾除信號(hào)線上的窄毛刺。實(shí)際工程中如果編碼器線纜較長或者電機(jī)電磁干擾較重把輸入濾波調(diào)到2到4左右能大幅減少誤計(jì)數(shù)。調(diào)太高會(huì)讓有效信號(hào)的最小脈寬變長影響極限轉(zhuǎn)速下的計(jì)數(shù)準(zhǔn)確度。5.2 啟動(dòng)編碼器接口HAL_TIM_Encoder_Start和Start_IT的區(qū)別代碼生成后不會(huì)自動(dòng)啟動(dòng)定時(shí)器。你需要在主程序的初始化階段調(diào)用HAL_TIM_Encoder_Start來啟動(dòng)編碼器接口。這里有一個(gè)常見的坑有人用了編碼器模式但忘了啟動(dòng)定時(shí)器CNT寄存器永遠(yuǎn)是0怎么轉(zhuǎn)電機(jī)都沒反應(yīng)查了老半天。如果開啟了更新中斷則要調(diào)用HAL_TIM_Encoder_Start_IT這樣才能在計(jì)數(shù)器溢出時(shí)觸發(fā)中斷回調(diào)。不帶_IT的版本永遠(yuǎn)進(jìn)不了中斷。不要記混這兩個(gè)接口的名字我在一個(gè)四軸機(jī)械臂的項(xiàng)目里就吃過這個(gè)虧只調(diào)了Start沒調(diào)Start_IT中斷服務(wù)函數(shù)里怎么調(diào)試都不進(jìn)最后對(duì)著手冊逐行查才發(fā)現(xiàn)是調(diào)用錯(cuò)了API。啟動(dòng)編碼器之后讀位置的接口是__HAL_TIM_GET_COUNTER(htim2)。這個(gè)宏返回當(dāng)前計(jì)數(shù)器的值也就是編碼器從啟動(dòng)或上次清零到現(xiàn)在的位置變化量。如果當(dāng)前方向是反轉(zhuǎn)讀回的值會(huì)從計(jì)數(shù)上限往下遞減你不需要判斷正負(fù)CNT值本身就是有方向性的位置信息。5.3 周期測速兩次采樣差值與M法測速編碼器最常見的應(yīng)用場景是測速度。M法測速的思路是在固定時(shí)間窗口內(nèi)統(tǒng)計(jì)脈沖數(shù)用計(jì)數(shù)差值除以時(shí)間得到速度。實(shí)現(xiàn)起來非常簡單開啟一個(gè)基礎(chǔ)定時(shí)器比如TIM6配置成1ms中斷在中斷回調(diào)里讀取CNT值減去上一次的CNT值差值就是1ms內(nèi)的脈沖變化量。用這個(gè)差值乘以一個(gè)換算系數(shù)就能得到轉(zhuǎn)速。換算系數(shù)怎么算舉個(gè)例子編碼器500線4倍頻后一圈2000個(gè)脈沖1ms采到100個(gè)脈沖那么每秒就是100000個(gè)脈沖除以2000就是50圈/秒也就是3000轉(zhuǎn)/分鐘。代碼里可以寫成 speed_rpm (delta_count * 60) / (2000 * 0.001) / 60簡化之后其實(shí)就是按比例算。為了防止計(jì)數(shù)器溢出帶來的跳變?nèi)绻麅纱尾钪到^對(duì)值超過計(jì)數(shù)范圍的一半就做一次補(bǔ)償修正。比如Counter Period設(shè)為1999如果這次讀到100上次讀到1900直接算差值是-1800但實(shí)際可能是正轉(zhuǎn)了200個(gè)脈沖發(fā)生了回繞需要判斷差值大于半周期就減掉一個(gè)滿周期。這個(gè)判斷邏輯是測速代碼里最容易出錯(cuò)的地方務(wù)必處理。5.4 和PWM控制配合一個(gè)位置閉環(huán)的最簡樣例有了速度和位置信息就能做最簡單的閉環(huán)控制。比如你要讓電機(jī)轉(zhuǎn)到設(shè)定位置就可以寫一個(gè)比例控制器PID里只保留P項(xiàng)int32_t target 1000; // 目標(biāo)位置 int32_t current __HAL_TIM_GET_COUNTER(htim2); int32_t error target - current; int32_t output Kp * error; // 輸出限幅到PWM占空比范圍 __HAL_TIM_SET_COMPARE(htim3, TIM_CHANNEL_1, output);這里的Kp需要實(shí)際調(diào)試調(diào)小了響應(yīng)慢調(diào)大了會(huì)振蕩。通常的做法是先讓電機(jī)在一個(gè)固定占空比下運(yùn)行觀察編碼器讀數(shù)是否穩(wěn)定再逐步加大Kp觀察響應(yīng)曲線。完整的PID還要加上積分項(xiàng)消除靜差和微分項(xiàng)抑制超調(diào)這里只是演示閉環(huán)控制的框架足以說明編碼器數(shù)據(jù)如何注入到控制鏈路中。6. 實(shí)測踩坑記錄從波形毛刺到方向反了我遇到過的五個(gè)典型問題6.1 A、B相接反導(dǎo)致計(jì)數(shù)方向反轉(zhuǎn)這是新手最容易碰到的問題。STM32CubeMX中默認(rèn)的計(jì)數(shù)方向是A相超前B相為正轉(zhuǎn)如果你的編碼器線序恰巧反了電機(jī)正轉(zhuǎn)時(shí)計(jì)數(shù)器的值反而在減小。排查這個(gè)問題很簡單手動(dòng)緩慢正轉(zhuǎn)電機(jī)打開調(diào)試器看CNT值的變化方向。如果發(fā)現(xiàn)反了有兩個(gè)解決辦法一是在硬件上把A、B兩相信號(hào)對(duì)調(diào)二是在CubeMX的Polarity設(shè)置里把其中一個(gè)通道的極性設(shè)為Falling Edge。從項(xiàng)目維護(hù)角度看改軟件極性更省事因?yàn)椴挥脛?dòng)接線。需要注意的是改極性不僅會(huì)影響計(jì)數(shù)方向還會(huì)影響計(jì)數(shù)邊沿的位置本質(zhì)上等于把采樣點(diǎn)平移了90度。如果你同時(shí)還用了Z相零位零位脈沖的位置和計(jì)數(shù)器的匹配關(guān)系可能會(huì)因此偏一位不過對(duì)大多數(shù)應(yīng)用沒有影響。6.2 布線太長導(dǎo)致波形邊沿抖動(dòng)數(shù)字濾波器的正確設(shè)置編碼器線纜超過30厘米又沒有采用雙絞屏蔽線時(shí)A、B相波形邊沿容易出現(xiàn)振鈴和毛刺。毛刺導(dǎo)致的結(jié)果是異常計(jì)數(shù)有時(shí)正轉(zhuǎn)一下計(jì)數(shù)器跳好幾個(gè)數(shù)有時(shí)反轉(zhuǎn)時(shí)計(jì)數(shù)反而增加。逐一對(duì)硬件進(jìn)行改動(dòng)可能比較麻煩但STM32定時(shí)器自帶的輸入濾波器能在軟件層面解決大部分問題。在CubeMX的Input Filter字段中填入合適值就可以開啟濾波。這個(gè)濾波器的原理是只有當(dāng)信號(hào)連續(xù)穩(wěn)定N個(gè)采樣周期后才確認(rèn)電平變化。Filter值越大抗干擾越強(qiáng)同時(shí)對(duì)真實(shí)信號(hào)的延遲也越大。編碼器轉(zhuǎn)速不高時(shí)直接把濾波值設(shè)到8都行但高速場合需要核算一下最大可接受延遲。以72MHz定時(shí)器時(shí)鐘為例Filter值為8時(shí)最短可識(shí)別的信號(hào)脈寬大約是8個(gè)采樣周期即大約110納秒的脈沖寬度要求。如果編碼器最高轉(zhuǎn)速下信號(hào)脈寬小于這個(gè)值就會(huì)丟脈沖。6.3 編碼器零點(diǎn)漂移Z相清零與CNT自動(dòng)回繞的區(qū)別很多編碼器帶有Z相也叫Index信號(hào)每圈出一個(gè)脈沖。利用Z相可以精確確定機(jī)械零位。有人直接把Z相接在普通IO上在中斷里用軟件清零CNT。另一種實(shí)現(xiàn)方式是利用定時(shí)器的編碼器接口和Z相輸入的特性在硬件層面自動(dòng)復(fù)位計(jì)數(shù)器但STM32的編碼器模式并不內(nèi)置Z相清零邏輯除非額外使用定時(shí)器的外部觸發(fā)復(fù)位功能。如果你需要Z相清零最常規(guī)的做法就是外部中斷加軟件清零。不過要小心Z相脈沖寬度和A相脈寬相關(guān)如果Z相信號(hào)在電機(jī)高速旋轉(zhuǎn)時(shí)變得很窄外部中斷可能會(huì)漏觸發(fā)。我用的E6B2-CWZ6C編碼器Z相脈寬是A相脈寬的四分之一低速完全沒問題高速時(shí)最好用輸入捕獲來測量脈寬避免漏掉。6.4 計(jì)數(shù)器溢出處理在CubeMX里留足余量的設(shè)計(jì)思路如果你用的是16位定時(shí)器計(jì)數(shù)器溢出是一個(gè)繞不開的問題。以500線編碼器X4模式為例Counter Period設(shè)為1999那么它范圍只有0到1999遠(yuǎn)小于65535這種情況下計(jì)數(shù)器每隔一圈就會(huì)溢出一次。每次溢出都需要在中斷里把溢出計(jì)數(shù)值加到一個(gè)軟件擴(kuò)展變量里保證位置讀數(shù)的連續(xù)性。實(shí)際上處理溢出最簡單的方式是NVIC開啟更新中斷在中斷回調(diào)里判斷更新事件的方向。如果讀取SR中的DIR標(biāo)志位為0表示向下計(jì)數(shù)即反轉(zhuǎn)溢出為1表示向上計(jì)數(shù)即正轉(zhuǎn)溢出。根據(jù)方向給軟件計(jì)數(shù)變量加一或減一最終位置值等于擴(kuò)展變量乘以(Period 1)再加上當(dāng)前CNT值。這塊邏輯雖然不復(fù)雜但涉及臨界段保護(hù)的問題要在中斷里操作共享變量時(shí)注意加臨界區(qū)保護(hù)防止主循環(huán)讀數(shù)據(jù)時(shí)讀到一半被中斷改寫造成高字節(jié)和低字節(jié)屬于不同時(shí)刻的快照。6.5 機(jī)械安裝誤差造成的輕微零速抖動(dòng)最后說一種比較隱蔽的情況電機(jī)靜止時(shí)計(jì)數(shù)器讀數(shù)卻在小幅跳動(dòng)。這種情況多半是機(jī)械振動(dòng)帶動(dòng)編碼器碼盤微小擺動(dòng)A、B相在臨界邊沿附近輕微顫抖導(dǎo)致硬件捕捉到多次跳變。解決方法和毛刺類似適當(dāng)增大輸入濾波值同時(shí)在應(yīng)用層做一個(gè)小范圍的死區(qū)判斷連續(xù)多次讀到同一位置才認(rèn)為電機(jī)靜止。這一類問題不會(huì)影響大范圍運(yùn)動(dòng)控制但如果你在做云臺(tái)增穩(wěn)或精密定位就非常致命。我在做小型云臺(tái)時(shí)零速抖動(dòng)導(dǎo)致畫面緩慢漂移排查了很久才發(fā)現(xiàn)是電機(jī)減速箱的微小回程間隙帶動(dòng)編碼器碼盤抖動(dòng)最后通過調(diào)高輸入濾波器值和增加死區(qū)閾值解決了。這類經(jīng)驗(yàn)很難在芯片手冊里找到只能靠現(xiàn)場調(diào)試總結(jié)。7. 數(shù)據(jù)鏈路之外為什么我強(qiáng)烈建議你把編碼器數(shù)據(jù)流單獨(dú)封裝7.1 底層寄存器操作與上層控制邏輯解耦寫編碼器相關(guān)代碼時(shí)我強(qiáng)烈建議把編碼器的讀取和處理封裝成獨(dú)立模塊不要在主循環(huán)里直接到處調(diào)用__HAL_TIM_GET_COUNTER。原因很簡單第一如果以后換了MCU平臺(tái)只需要修改底層封裝上層控制邏輯完全不用動(dòng)第二相同的位置數(shù)據(jù)會(huì)在不同地方用到比如顯示、閉環(huán)控制、日志如果直接散落在各處代碼改起來苦不堪言。我自己習(xí)慣的封裝方式是這樣的單獨(dú)建一個(gè)encoder.c和encoder.h提供Encoder_Init、Encoder_GetPosition、Encoder_GetSpeed、Encoder_Clear等接口。在上層代碼里所有模塊都只調(diào)用這幾個(gè)接口看不到任何硬件寄存器操作。調(diào)試的時(shí)候也只需要在這幾個(gè)接口里加入日志打印就能看到全系統(tǒng)的位置變化情況。7.2 一種更可靠的位置累加方法定時(shí)采樣配合溢出補(bǔ)償對(duì)于需要長時(shí)間記錄位置的應(yīng)用單純依賴CNT寄存器是不夠的因?yàn)橐绯銮辶銜?huì)丟數(shù)據(jù)。推薦的做法是用固定周期定時(shí)器中斷比如1kHz讀取一次CNT值并累加到軟件位置變量里同時(shí)處理溢出回繞。這樣即使主程序被其他任務(wù)阻塞位置也不會(huì)丟。舉個(gè)具體實(shí)現(xiàn)例子static int32_t last_count 0; static int32_t position_sum 0; #define COUNTER_PERIOD 1999 void Encoder_Tick_1ms(void) { int32_t cur __HAL_TIM_GET_COUNTER(htim2); int32_t delta cur - last_count; if (delta (COUNTER_PERIOD 1) / 2) delta - (COUNTER_PERIOD 1); else if (delta -(COUNTER_PERIOD 1) / 2) delta (COUNTER_PERIOD 1); position_sum delta; last_count cur; } int32_t Encoder_GetPosition(void) { return position_sum; }這個(gè)方法把溢出的判斷條件統(tǒng)一封裝在一個(gè)中斷函數(shù)里主程序在任何時(shí)刻讀取的都是連續(xù)的軟件累加位置徹底擺脫了計(jì)數(shù)回繞的困擾。而且position_sum是32位有符號(hào)變量即便長時(shí)間運(yùn)行也不容易溢出實(shí)際項(xiàng)目中一年半載跑下來都沒問題。7.3 使用場景擴(kuò)展從單軸測速到多軸同步如果你的項(xiàng)目不只是一個(gè)電機(jī)而是像機(jī)械臂、四輪小車這樣多個(gè)電機(jī)協(xié)同工作每個(gè)電機(jī)一個(gè)定時(shí)器測速頻率要保持一致控制周期也要盡量同步。最簡單的方法是利用同一個(gè)基礎(chǔ)定時(shí)器觸發(fā)所有電機(jī)的采樣中斷在同一個(gè)中斷回調(diào)里完成所有編碼器的數(shù)據(jù)采集和速度解算。這樣不同軸之間的數(shù)據(jù)天然同步控制解算不容易出現(xiàn)因?yàn)闀r(shí)間戳不一致導(dǎo)致的偏差。多軸系統(tǒng)里的另一個(gè)注意點(diǎn)是所有編碼器共用一個(gè)電源時(shí)多個(gè)電機(jī)同時(shí)啟動(dòng)會(huì)造成電源電壓跌落可能讓編碼器輸出波形畸變。解決方法是每個(gè)編碼器電源附近都加一個(gè)去耦電容并且在MCU端的信號(hào)線上加RC濾波或施密特觸發(fā)器緩沖。這個(gè)細(xì)節(jié)是我們在做四輪小車時(shí)發(fā)現(xiàn)的當(dāng)時(shí)只給主控供電一個(gè)電機(jī)啟動(dòng)瞬間編碼器讀數(shù)就亂跳排查了很久才發(fā)現(xiàn)是電源軌受到干擾。8. 從配置到穩(wěn)定運(yùn)行的最后一段路我最想讓你記住的三件事回頭再看整個(gè)STM32CubeMX正交編碼器方案其實(shí)主要就三件事。第一原理上要搞懂A、B兩相正交信號(hào)如何通過相位關(guān)系產(chǎn)生位置和方向信息硬件編碼器模式為什么能替代中斷判向方案。第二配置上要選對(duì)定時(shí)器、選對(duì)引腳、選對(duì)Encoder Mode和Counter Period這三樣決定了物理層能不能正常計(jì)數(shù)。第三工程上要做好溢出處理、信號(hào)濾波和模塊封裝這三件事決定了系統(tǒng)長時(shí)間跑下來穩(wěn)不穩(wěn)定。最后的建議是不要一上來就追求花哨的算法先把編碼器數(shù)據(jù)讀準(zhǔn)、讀穩(wěn)、讀連續(xù)再談后面的PID和運(yùn)動(dòng)規(guī)劃。你把一個(gè)編碼器通道吃透了其他通道都是復(fù)制粘貼的事情。我自己第一次調(diào)通編碼器模式時(shí)看到電機(jī)轉(zhuǎn)一圈讀數(shù)從0走到2000再歸零那種踏實(shí)感是單純寫GPIO中斷判向完全體會(huì)不到的。希望這篇內(nèi)容能幫你少走幾個(gè)彎路一次就把編碼器這塊做利索。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久精品视频在这里有| 亚洲区1| 婷婷伊人久久综合| 久久九九99| 久久综合9| 亚洲欧美婷婷五月色综合| 五月婷婷六月激情在线| 超碰人人干| 免费在线观看av网站| 亚洲激情综合网| 99久久精品视频女神1| 九九久久99精品免费观看www| AV中文网| 白人荫道BBWBBB大荫道| 丁香五月性| 五月婷婷天天| 人人摸人人搞| 亚洲狠狠干| 我爱宗和色| 99九九99九九九视频精彩| 国产五月视频| 91操人人操| 九九热黄色| 婷婷播5月| 99热国产国产| 婷婷五月天在线观看av| 5月婷婷综合| 激情五月天啪啪| 无码一区二区三区四区五区91c| 丁香五月性| 色婷五月天| 欧美黄色韩日网| 思思久久96热在精品国产,| 成人av在线网站| 99在线视频女女视频| 疯狂做受XXXX高潮A片| 色婷婷综合网站| 开心激情站| 色婷婷丁香| 五月婷婷m| 婷婷五月激情热播| 伊人丁香五月| 婷婷五月天成人网站| www.狠狠操.con| 色99视| j久久性爱视频| 色综合色五月| 99热在线里有精品| 五月婷婷丁香av| 五月深爱婷婷| 久色欧美| 91碰在线| 狠狠狠狠狠干| 婷婷五月天淫荡| 极品人妻VIDEOSSS人妻| www,99热在线观看| 99九九99九九九视频精彩| 五月婷婷激情| 青青草搞屄视频网站| 色五月无码| 色综久久AV| 这里只有视频精品| 骚。com| 深爱激情综合网| 激情五月天开心总和网| 超碰人人艹| 色一情一乱一乱一区91Av| 婷婷激情五月综合| 色视频色综合91| 99re资源在线视频导航| 99精品久久久久久久| www,色综合| 欧美天天搞| 猫咪伊人久久| 一本道综合网| 9九色首页| 五月天综合久久| 丁香婷婷激情| 在线超碰精品| 久久欧洲久久| 思思re99视频在线观看| 亚洲另类在线观看| 26uuu色五月| 无码色综合| 中文字幕,综合,91| 99色在线观看| 思思精品热在线| 激情网婷婷五月天| 亚洲妇女熟BBW| 91九色超碰| 五月丁香最新| 丁香五月天婷婷久久综合| 国产精品久久久久久五月天加勒比| 亚洲日日操| 在线视频另类| 碰人人97| 激情婷婷五月天伊人在线观看| 久久思思热视频| 国产亚洲精品久久一区二区三区| 极品人妻VIDEOSSS人妻| 99超级碰碰| 九九视频网| 99视频热| 97人人干| 久久婷婷色综合| 一区二区中文字幕| 九九操操| 九九人人自拍| 亚洲欧美999| 激情五月婷婷综合| 波多野结衣AV无码Porn| 激情五月天婷婷视频| 五月婷婷婷丁香播| 亚洲视频在线网| 6月丁香婷婷| 激情五月丁香六月婷婷| 思思热在线视频精品| 久热精彩视频98| 99ri精品视频在线观看| 舔色婷婷| 色五月色五天色情网址| 六月婷婷网站| 粉嫩AV久久一区二区三区| 六月丁香婷婷综合影院| 开心五月婷婷在线| 丁香五月婷婷基地| 色婷婷黄色网络| 五月丁香操亭亭网| 夜色热久| 天天干天天玩天天夜天天射天天操天天日蜜臀少妇 | 99热色无码| 99热这里只有精品国产精品| 日产精品久久久久久久蜜臀| 亚洲婷婷五月天在线激情综合网| 日韩在线观看亚洲| 婷婷五月激情五月丁香五月| 2025年最新亚洲在线欧美| 五月丁香在线观看| 大香蕉五月婷婷| 五月婷婷激情四月| 婷婷五月天淫荡| 七七九九色色| 五月综合激情网| 综合久久高清| 亚洲人妻Av| 中文字幕精品推荐免费在线观| 色播五月天天| 精品爱欲五| 开心五月激情| 99国产精品白浆在线观看免费 | 区区久久妻| 五月丁香激情综合网| 成人午夜视频精品一区| 欧洲日韩一区二区三区| 99国产精品白浆在线观看免费 | 色97综合婷婷天天色| 在线视频另类| 色婷婷综合网| 精品人妻伦一二三区久久| 丁香五月欧美成人| 91色久| 五月婷婷日本| Av九九| 色爱99| 五月天色不卡| 99在线精品观看99| 99九九精品| 色综合99| 人与禽A片啪啪| 五月丁香直播| 九九中文色色| 日韩综合久| www,超碰| 色色色色色色网站| 无码激情精品色婷婷久久久久| 99网| 操人妻视频91| 狠狠第四色| 综合色色婷婷| 久色视频在线| 超碰熟女农村在线69| 草做免费在线观看| 超碰国产av| 亚洲六月色婷婷| 色综合中文色综合网| xxxx久| 日本美女上人| 无码成人AAAAA毛片AI换脸| 这里只精品| 最近免费中文字幕大全高清大全1| 梁铮版蜘蛛女在线观看| 九月色婷婷综合亚洲| 亚洲成人噜噜| 综合啪啪| 国产精品天天狠天天看| 五月天开心网| 五月婷婷激情四季| 五月丁香亭亭A片| 色五月天成人| 五月在线婷色| 97在线日本| 99a级片| 综合亚洲六月婷婷在线| 亚洲av电影网站| 五月天激情综合| 97婷婷色| 激情婷婷丁香色五月| 五月婷婷开心网| 婷婷无码视频| 第四色色六月色综合| 激情五月婷婷丁香| 丁香五月天激情五月天激情五月天激情网| 色婷婷91激情小说| 五月婷婷开心网| 亚洲婷婷六月天| 色444综合网| 亚洲激情在线| 激情综合网五月天| 成人片久久网站| 97婷婷久久丁香| 九九AV在线| 99热在线里有精品| 久久狠狠干| 国自产拍偷拍精品啪啪一区二区| 久艹大香蕉| 免费99情趣网视频| 涩涩婷婷五月| 亚洲综合色婷| 高清无码网址| 97在线刺激| 九九热在线观看视频网站| 久久99精品久久久久久三级| 影音先锋自拍网| 五月天激情网站| 婷婷五月丁香五月丁香| 久艹大香蕉| 国产AV影片| 丁香婷婷激情| 婷婷久久亚洲| 五月丁香六月婷婷a v| 青996青| 欧美日本日韩| 丁香六月婷婷| 99精品久久| 婷婷五月天激情电影小说| 深爱丁香网| 成人毛片在线免费观看| 色色丁香婷婷五月天| 国产性爱亚洲是图| 97婷婷狠狠| http://www.sd-xiangsu.com/| 五月天丁香六月综合| 久久国产高潮白浆免费观看99| 久久婷婷五月| 久色视频| 人人澡玖玖一| AV色婷婷| 爽极品色| 成人免费高清在线播放| 五月激情六月综合| 婷婷五月天色| 婷婷色五月综合| 五月婷庭丁香在线| 婷婷五月丁香在线观看| www.25五月婷婷| 99色干| 五月色激情综合网| 色护士综合| 色综啪啪网| 综合网色| 色婷婷视频| 六月丁香啪啪| 久久综合五月天| 99精品热视频| 五月丁香影院| 99这里只有精| 久久香蕉网| 国产丁香五月天婷婷| 丁香六月婷婷开心| 俺来也综合网精品一区| 丁香无月在线观看| 婷五月丁香俺| 婷婷五月天成人五月天| 亚洲字幕AV一区二区三区四区| 亚韩在线视频| 人妻熟妇国产精品| 天天爱天天操| 99精品偷自拍| 嫩草免费视频| 九九久久免费视频44| 好叼操在线观看| 日本一級黃色一級片| 国产真人做爰视频免费| 亚洲午夜成人av电影网| 激情综合五月丁香六月婷婷| 伊人大蕉香| 激情五月狠狠喔| 激情丁香五月天图片| 熟美女麻豆| 亚洲激情六月| 综合久久五月天| 国产熟女一区二区三区五月婷| 另类精品视频在线观看| 九九热a| 综合激情啪啪| 天天色综合图片| 婷婷五月综合亚洲| 色婷五月| 五月天大香蕉av| 色日本颜射| 丁香婷婷五月激情四射网| 五月激情综合婷婷| 99久久99视频| 欧美激情五月综合| 天天干天天爽天天操| 开心婷婷五月中文字幕组| 婷婷激情五月天激情| 91久久久久久久91| 开心婷婷五月激情网小说| 欧美成人无码一区二区三区| 婷婷情色激情| 日本人妻A片成人免费看片| 色色网站| 成人AV片播放| 超碰91在线| 狠狠色狠狠干| 人人草开心五月天| 婷婷综合网| 中文字幕不卡网站| 九月丁香亭亭| 九色色| 久操97| 99热8| 丁香五月婷婷欧美性爱| 五月天丁香综合| 色婷婷激情小说网| 欧美影院| 丁香六月婷婷色XXXX| 超碰丁香五月| 九九免费精品在线视频| 色五月色五天免费视频| 9色在线| 五月深情久久| 99热欧| 五月激情六月宗合| 婷婷六月天| 婷婷综合在线网| 九九人人操| 婷婷激情五月天亚洲综合| 舔色婷婷| 日韩一级一片内射视频4K| www.91在线看| 五月婷婷综合色啪首页| 99综合视频| 99视频综合网| 天天成人综合| 日本片日本片祼观看网站在线看中文版网页在线看 | 激情五月天天| 婷婷激情四射| 丁香五月影院| 丁香五月色激情| 丁香五月影院| 丁香五月手机在线| 波多野结衣不卡AV| 色婷婷精品小视频| 99色在线| 97香蕉久久超级碰碰高清版| 婷婷丁香五月亚洲17cao| 最近中文字幕大全免费版在线| 99热日| 丁香欧美| 成人综合网站| 五月色视频| 狠狠色五月天| 亚洲婷婷综合视频| 五月综合婷婷久久在线| 极品少妇高潮啪啪AV无码| 99超级碰碰| 五月天色婷婷成人| 国产内射婷婷| 婷婷色丁香五月| 婷婷五月天网| 99热网站| 日日操日日撸| 免费黄色片子| 久久大香蕉| 亚洲一级AV在线免费播放| 日日做夜夜爱| 99re欧美精品| 婷婷五月婷婷五月天| 激情九月婷婷| 五月婷婷开心亚洲无| 欧洲亚洲免费视频9 | 五月婷婷香| 淫五月停停| 亚洲视频丁香网va| 欧美顶级少妇做爰HD| 丁香五月天婷婷在线视频| 99热久草| 大香蕉啪啪| 99热日| 五月天之色情综合网| www、色色色| 大香蕉五月婷婷丁香| 色97综合婷婷天天色| 天天天干夜夜夜操| 丁香五月亭亭六月综合激情网| 开心激情婷婷| 色婷婷丁香五月天在线视频| 国产精品久久久久久久久久| 97色伦另类图片小说视频 | 五婷婷综合网| 色五月综合激情| 婷婷丁香成人色综合| 久久婷婷五月综合色播| 丁香五月天操B| 中文aV网| 日韩五月婷婷久久| 五月天综合视频| 九月丁香八月婷婷久久综合久97| 岛国av网站| 十区AV| 婷婷人人操| 色色色婷婷五月天| AVDV久久| 色丁香婷婷美女视频网站| 五月激情婷婷偷拍| 久久婷婷人人| 五月天天天综合| av九九| 婷婷大美在线| 色 噜噜 九月 婷婷| 国产性爱亚洲是图| 无码啪啪| 亚洲情综合五月天| 久久视频这里有精品99| 青青草tp| 免费看欧美成人A片无码| 五月婷导航| 九伊人网| 婷婷五月天网| 丁香五月天论坛| 久久久久8888| 天堂成人A片永久免费网站| 性生活视频98791| 任你日热视频| 大香蕉五月天| 婷婷五月天中文字幕| 久久久性爱视频| 色五月激情综合网| 天天草比天天爽| 丝袜人妻| 热99.com婷婷| 开心激情五月天网| 91色情播放| 任你日视频| 一本道在线电影| 亚洲六月色| 日韩婷婷| 亚洲视频另类| 97综合在线| 79色色色色| 二色av| 色九九中文字幕| 五月天婷婷色色网| 人人干Av| 日本99热| 激情综合婷婷久久| 中文字幕乱码亚洲精品一区| 爆乳熟妇一区二区三区爆乳| 亚洲婷婷乱乱丁香| 99re这里只有精品99| 久久全意婷婷| 日日夜夜天天综合| 天天日,天天插| 性五月激情| 青青色com久久| 99热6精品| 婷婷五月情天| 五月永久激情| 丁香婷婷色五月| 久久天堂女人| 极品人妻XXXXOOOO| 婷婷在线精品| 69色婷婷| 日撸夜撸日操| 99热思思在线观看| 丁香五月婷婷啪啪啪| 操97在线观看| 中国丰满熟女A片免费观| 庭庭久久内射| 夜夜爱网站| 精品99爱免费视频在线观看| 婷婷五月激情四月综合| 色五月天丁香婷婷| 激情超碰网| 无码AV久久久久久久久| 五月婷婷色五月| 天天爱综合网| 人人射人人高潮| 激情五月综亚网| 久久性爱视频| 99九九综合久久九九| 九九在线91| 99久久国产宗和精品1上映| 91操片| 99热这里只有精品3| 五月婷无码| 只有精品在线观看| 99热九九这里只有精品| 久久网日本| 丁香五月777| 99视频日韩| 五月天综合在线网| 日本三级成人秘书精品片| 五月天激情婷婷| 色五月综合激情| 九九成人| 久久婷婷内射| 超碰色色综合| 色婷婷五月色| www.99精品在线| 婷婷五月天六月丁香| 五月激情婷婷六月| 色色色无码| 99热中文字幕久久| 色色网站在线| 无码色| www.色五月| 色播五月婷婷| 五月天激情综合网| 91丨九色丨熟女|新版| 五月天社区婷婷丁香社区| 五月天成人网在线观看| 少妇搡BBBB搡BBB搡毛茸茸 | 久久久ww| 夜夜撸日日操| 日本不卡高字幕在线2019| EEUSS鲁片一区二区三区| 激情五月天色色网| 亚洲精品白浆高清久久久久久| 激情综合五| 强壮的公次次弄得我高潮A片日本 | 狠狠五月天| 欧美叉叉叉BBB网站| 国产黄大片在线观看画质优化| 人妻丰满精品一区二区A片| 人人艹艹艹| 日本网站久久| 日韩操逼大片| 538在线| 青娱乐美女福利视频美臀| 激情五月www| 99热在线只有精品| 在线网黄| 99爱精品| 99精品丰满| www五月天com| 欧美黑人大吊| 婷婷五月天亚洲图片| 国产,欧美,日韩,性爱| 亚洲免费婷婷| 精品色| 成人午夜天| 色99最新网址| 丁香五月欧美激情| 91视屏在线观看com.wwwvv| 五月婷婷在线观看| 另类专区在线| 五月开心播播网| 另类图片五月天激情| www,色婷婷| 五月天五月色婷婷综合| 天天干狠狠艹| 婷婷五月丁香综合| 777米奇影视第四色| 99精品九九| 啪啪 综合网| 日日日,com| 久久婷婷五月综合色和| 激情四射五月天| 欧美特大片黄| 国产免费AV在线| 国产日日夜夜操| 国产激情婷婷| 超碰在线91| 日本三级片片| 2025中文在线视频字幕免费观看| 激情五月婷婷视频一区二区三区| 97色碰| 久久五月天网| 激情网开心网| 五月天综合婷婷| 日本婷婷色| 99热精品在线观看| 九九在线精点品| 久热无码| 天天搡日日搡aaaaⅩ| 思思热在线视频99| 99热精品在线观看| www99xxxx五月丁| 淫视馆aV二区一区| 激情文学五月丁香六月婷婷| 极品少妇XXXX精品少妇偷拍| 久久九九玖玖| 婷婷五月天色| 五月婷婷爽爽爽| 中文字幕在线日亚洲9| 天天舔日日肏夜夜爽| 婷婷五月激情小说| 激情视频91| 好激情在线综合网| 少妇高潮呻吟A片免费看软件| 日本色色网站| 丁香五月激情在线| 成人综合视频网址| 亚洲中文无码成人| 五月丁香婷婷成人网| 日韩AV一区二区三区| 激情五月婷婷伊人| 天天影院色| 超碰在线观看9| 第四色首页| AA片在线观看视频在线播放| 就要去操亚洲成人精品五月天丁香婷婷| 国产激情综合五月久久| 影音先锋男人站,影音先锋男人色资源网,影音先锋AV最新资源站,影音先锋AV资源 | www.日韩国产| 99乱视频| www.婷婷五月.com| 五月天婷婷永久免费视频| 欧洲色| 日本三级日本三级99| 日日夜夜狠狠| 色情五月| 色婷婷小说网| 激情五月丁香色色去久久| 日本操逼九九九九58日本操逼| 免费无码毛片一区二区A片| 色婷婷五月天激情| 五月丁香六月欧美综合网站| 亚洲AV成人精品日韩在线播放| 五月天久久综合婷婷| 色综啪啪啪啪啪啪| 逼里香不卡| 97超级碰| 五月婷婷天| 影院久久久| 天天插AV丝袜中| 成人va在线| 婷婷五月成人系列| 在线不卡的视频| 国产精品热搜丁香五月婷婷| 5Www色5夜| 丁香五月区| 色约约视频一区二区三区四区五区| WWW.99热| 久久九⑨| 色婷婷五月天成人网| 色九月欧美| 97碰| 97色色色色| 激情网五月天| 丁香六月视频| 丁香五月婷婷综合激情哟哟哟| 永久AⅤ1| 久久婷婷五月天激情| 26uuu欧美| 97干免费视频| 亚洲九区| 热99热9| 婷婷黄色五月| 综合色图区| 狠狠色婷婷在线| 国产毛片精品一区二区色欲黄A片| 亚洲婷婷六月天| yirenjiqingshiping| 五月天伊人网| 99热免费在线| 久久99热 这里有精品| 99天天操夜夜操| 无码99| 九九99免费视频| 欧美激情综合| 99免费热视频| 婷综合| 538在线精品| 亚洲天天综合| 亚洲色碰| 久久婷婷五月综合色区| 播播网色播播| 狠狠色狠狠干| av一区免费看| 草草视频91| 亚洲六月婷| 丁香婷婷婷五月综合色情| 天天色色天天| 久8色色| 久热 91| 丁香五月偷拍| 五月婷婷在线播放| 久久视这里只有精品| 久操欧美在线观看97| 爱婷婷都市激情| 日韩欧美一区二区三区四区| 五月天丁香看婷婷| 99视频内射三四| 丁香婷婷色五月天| 五月天社区| 抽插特写| 九九色热| 亚洲婷婷免费| 日日夜夜狠狠婷婷色| 4438全国最大视频成人网站在线观看| 99久久激情视频| 五月丁香花婷婷玉莉AV| 国产中文亚洲欧美日韩性交| 婷婷丁香先锋资源网站| 六月丁香五月婷婷| 欧美成人va| 91婷婷五月天综合视频| 99自拍网| 丁香97综合| 99这里都是精品| 婷婷色操| 99色爱| 色综合久久五月| 欧美性久| 九月色婷婷婷| 99精品偷自拍| 99九九精品| 婷婷播5月| 亚洲正能量欧美| 婷香五月激情视频| 九色无码| 丁香五月激情在线| 思思久久思思| 99色区| 久久伦乱| 99热在线网站| 丁香五月综合狠狠| 成人综合网站| 深爱激情综合| 亚洲精品国产成人AV在线| 婷婷丁香成人五月天| 五月综合在线婷婷图片| 丁香六月婷月91婷月| 九九热99免费视频| 伊人三级激情| 大香伊人婷婷影院| 色啦啦视频| 风流少妇A片一区二区蜜桃| 九九aV| av在线免费网站 | 日韩限制级大尺度黑料泄密大尺度视频一区二区在线观看 | 91久久精品国产91性色TV| 色五月五月婷婷| 4399亚洲视频| 色婷婷精品视频| 色五月天成人| 在线观看中文字幕| 五月开心深爱激情网| 开心五月丁香啪| 伊人日日干| 99r久久这里只有精品| 99久久99久久综合| 91久热| 91色久| 色综合色色| 色婷婷香蕉| 久久久久9| 久9视频| 九九激情网| 99操碰| 色婷五月| 丁香六月开心| 亚洲激情校园| 天天日天天摸天天| 怡红院院久久| 久久久五月婷婷| 五月婷婷丁香色播网| 激情九九这里只有精品| 99热这里只有精品国产首页| www,99热| 九九久久99| 五月激情啪啪| 五月婷婷高清| 狠狠色丁香婷婷基地| 26UUU在线观看| 六月婷婷国产| 丁香五月婷婷在线观看| 激情综合网五月天| 99riAV国产精品视频| 久久色区| 婷婷大香蕉| 欧美槡BBBB槡BBB少妇| 天堂成人A片永久免费网站| 超碰免费成人网站| 爆乳熟女-区二区三区| 91人人操人人看| ww久久| 亚洲小说五月婷婷| 国产精品久久久久久五月天加勒比| 五月激情基地| 夜夜撸日日操| 五月色丁香| 精品成人无码A片观看香草视频| 韩国中文字幕91| 日韩99无码| 色综合香蕉| 激情婷婷五月天。| 天堂婷婷丁香六月网| 国产五月天欧美色| 精品久久99| 香蕉人妻AV久久久久天天| 亚洲情欲久久| 激情丁香婷婷| 亚洲久久婷婷| 五月婷婷草| 激情四射五月天| 97碰碰草| 亚洲最大在线| 夜夜夜夜操| 婷婷五月影院| 六月婷婷综合| 色吊丝99| 婷婷五月激情的图片| 国产色五月婷婷| 久久九九@| 国产小精品| 天天干,天天操,天天射| 色婷婷婷av| 99re热视频这里只精品| 久久综合婷婷| 五月天婷婷色综合| 91婷婷丁香五月天免费视频网站| 一区二区三区四区无码| w婷婷五月婷婷w| 99热只有这里有精品| 九九爱激情| 欧美日韩999| 久久激情视频99| 在线另类| 1010日日无码| 4438国产免费看| 91婷婷在线| www.日本久久videos| 无码色| 亚洲精品久久久久久久久久吃药 | 婷婷开心青青草| 久久婷婷原创视频| 激情婷婷六月天| 婷婷伊人网| 538在线精品| 色婷婷综合网站| 激情五月天色婷婷综合| 思思热精品在线视频| 婷婷深爱五月天在线| 一区二区你懂的| 九九热10| 99re在线观看视频| 免费观看日韩成人av| 久久久久亚洲AV无码网影音先锋| 亚洲小视频免费看| 激情综合色婷婷啪啪五月天| 成人丁香| 婷婷亚洲五| 涩丁香91| 久久9久| 六月丁香婷婷网| 欧美婷婷九月| 九九热精品在线| 五月之婷婷| 丁香六月婷婷综合激情欧美| 屁股翘好撅高迎合跪趴| 日本婷婷五月天| 久久久久婷婷五月热综合| 亚洲AV日韩在线观看| 人人综合久| ...婷婷国产成人亚洲日韩| 91jiuseshunv| 色5月婷婷| 欧州色色| 婷婷激情五月吧| 久久蜜臀婷婷| 99色色| 天天搞天天爽| 99这里只有免费的小视频在线观看| 色婷狠狠| 亚洲丁香花色| 九九热在线精品视频| 99这里只有精品8| 日韩无码人妻一区二区| 天天操综合网| 色爱99| 婷婷五月丁香婷婷| 午夜爱插插| 久久婷婷免费| 五月激情六月综合| 欧美xx激情视频在线观看| 五月天婷婷激情网| 中文字幕五月久久婷婷| 嫩草AV久久伊人妇女超级A| 色五月大| www五月天激情com| 五月色综合网欧美网| 亚洲欧洲一二| 丰满少妇猛烈A片免费看观看| 99re热在线视频观看| 九九这里精品| 丁香啪啪| 五月狠狠| 久久综合五月天激情小说网站| 99人人干| 久热这里只有精品6| 五月婷婷六月丁香综合视频在线| 亚洲性爱电影| 亚洲视频码| 国产精品扒开腿做爽爽爽A片唱戏| 2017狠狠干| 五月婷婷二月丁香| 色综合天天网| 日本色道视频网站| 成人短视频免费观看| 香蕉97碰碰碰欧美| 六月丁香五月婷婷| 99热青青草| 精品乱码久久久久| 丁香五月23111| 亚洲性爱99| 超碰成人免费| 全高清无码视頻| 色综合av超碰| 91在线精品一区二区| 精品一二三区久久AAA片| 日本99视频| 色婷婷先锋| XX色综合| 99热在线这里| 婷婷五月精品中文字幕| 五月婷婷,六月激情| 五月天婷基地| 五月天婷婷激情网| 99ri精品视频在线观看| 精品人妻在线| 五月丁香激情啪啪网| 色亭亭九月| 激情AV网| 最近中文字幕2019视频1| 婷婷狠狠干| 99操视频| 综合AV在线| 在线天堂9| 色五月大| 婷婷五月综合啪| 99热这里是精品| 真实亲子乱子伦高清在线观看| 婷婷五月天综合色| 青草热视频这里只有精品| 欧洲精品欧洲情| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 超碰在线观看9| 另类 在线| 丁香久月婷| 黑人无码一区| 婷婷五月色图| 9福利性视频欧美| 一本色道久久88加勒比—| 69色婷婷| 人人性久久| 强伦轩人妻一区二区电影| 久久新| 色九月婷婷综合| 亚洲av网站在线观看| 五月丁香好婷婷A片网| 91色综合网| 乱码操操| 久色网| 五月丁香婷婷无码中文| 久热这里这里有精品| 日日干综合| 午夜爱爱爱成人| 日本九九热| 久播影院免费观看电视剧大全最新网| 色婷婷丁香| 亚洲婷婷五月| 成人短视频在线| 激情五月六月婷婷| 色色激情五月天| 97在线观视频免费观看| 五月四色激情| 五月丁香最新| 热99精品视频五月| 色婷婷狠狠| 色五月婷婷成人视频| 色综合性视频| 天天日日夜夜爽。| 激情五月天开心| 色五月婷婷久久| 久草热8精品视频在线观看| 九九操屄| 国精产品一区二区三区| 玖玖爱资源站| 亚洲丁香婷婷五月天综合色| 色狠狠综合网| 播四月婷婷六月丁香| 五月婷婷久久大香蕉| 色五月在线播放| 日本人妻伦在线中文字幕 | 欧美乱码国产一级A片| 97人人超| 久久久亚洲精品一区二区三区浴池| 久久91久久精品久久| 日本专区久久| 丁香五月天在线观看视频| 婷婷亚洲丁香五月| 五月人妻婷婷视频| 97色碰| 免费超碰在线观看| 丁香五月天激情四射网| 婷婷五月天综合激情| 丁香五月宝贝激情网| 婷婷婷婷婷开心无码播放| 五月丁香婷婷色色| 色狠狠色噜噜AV天堂五区| 91精品视频男人的天堂| 第四色激情网| 久热视频这里只有精品68| 激情婷婷六月天| 欧洲色色| 久久婷婷大香蕉| 99色天堂| 激情网综合| 在线视频另类| 日韩AV在线影片| 美欧成人视频| 日本精品。999| 激情五月婷婷五月丁香五月开心五月| 性爱视频99| 超碰人人摸AV| www.99色| 五月婷婷网五月在线| 五月婷婷久久综合| 色综合99无码 | 男女99免费视频| 99视频这里有精品| 婷婷五月天激情电影| 色婷婷欧美在线| 婷婷 丁香 精品| 国产精产国品一二三在观看| 欧美激情久| 蜘蛛女免费观看完整版高清电影| 五月天激情国产综合婷婷| 五月天成人在线视频网站| 丁香五月天婷婷大香蕉| 天天弄天天爽| 丁香五月六月综合欧美| 成人视频网| 丁香五月综合首页| 久久五月天黄色五月天色网址| 97热在线精品| 五月综合激情啪啪啪啪啪| 婷婷综合色色| 99精品亚洲| 极品少妇XXXX精品少妇偷拍| 99干日本| 五月综合六月婷婷| 99热这里只有精品在线| 人人看人人97| 五月天色综合服务平台| 亚洲精品成人| 色爱综合五月| 狠狠色情婷婷| 六月丁香啪啪| 亚洲在线播放| 激情综合网亚洲色图| 日韩亚洲视频| 99色视| 婷婷成人小说综合| 99免费视频| 人伦30P| 美女妹子后射视频网站在线观看| 日日操天天操| 色综合九九| 天天插天天射| 丁香五月伊人| 丁香六月天婷婷色| WWW.婷婷| 天堂中文国产| 日本色视| 影音先锋男士资源网一区| 婷婷日| 在线综合网| 九九精品综合| 色婷婷六月| 欧美日韩国产成人在线| 欧美色小说婷婷| 啪啪91| 久久久人妻人伦| 超碰色综合| 成人资源在线| 丁香婷婷成人网| 琪琪色网址| 第四色婷婷色五月| 这里只有精品久久| 女人露出p毛视频www网站| 欧洲亚洲免费视频9| 国产精品国产| 亚洲美女网Va| 999精品久久久久久久| www色中色综合| 中字幕视频在线永久在线观看免费| 狠狠看狠狠| 欧美精品18| 狠狠综合| 日本色色色| 国产67194| AAA久久| 9久精品视频| WWW久久久| 热久久91| 亚洲六月婷婷| 激情综合网址| 超碰人人超碰| 日韩色五月| 最新av在线观看| 色吧婷婷| 婷婷99狠狠躁天天| 久婷婷婷| 五月天综合在线| 欧美精品999| www.久久久久| 亚洲精品亚洲人成人网| 爱射综合| 五月婷婷在线短视频| 五月婷在线| 色情·com| 日本不卡高字幕在线2019| 婷婷色香六月综合激情| 亚洲字幕AV一区二区三区四区| 99er在线观看| 九九久久9 9在线观看| 亭亭五月天成人| 五月婷婷之综合激情在线| 五月激情六月宗合| 九九九九九九毛片| 婷婷九月亚洲| 大香蕉520| 久久色情| 五月色欧美| 国产av网| 深爱五月激情| 丁香久久综合| 人人摸人人搞| 色五月激情问网站| 国产肥白大熟妇BBBB视频| 久草xx性爱视频| 大香蕉在线观看9| 天堂久久性| 欧美色色色| 国产精品第一国产精品| 快色t v在线入口| 激情婷| 91丨九色丨高潮丰满日本| 婷婷成人网五月天| 亚洲亚洲人成综合网络| 亚洲欧美另类在线23p| 激情五月丁香色色去久久| 玖玖在线视| 天天激情综合| 婷婷操无码| 女人天堂AV| 天天操天天日天天爱| 五月网站| 婷婷五月天激情电影小说| 色婷婷丁香综合中文字幕| 成人电影一区| www.夜夜.com| 91久久九久久九久久九久久九久久| 99婷婷| 亚洲激情五月丁香久久久久| 久久资源综合| 婷婷丁香五月综合| WWW、日本色丁香、co m| 亚洲韩国日产综合AV| 91碰在线| 色婷婷成人做爰A片免费看网站 | 香蕉久久国产AV一区二区| 亚洲丁香网| av无码电影| 91精品久久久久久77777| 五月丁香婷庭在线| 99亚洲精品视频| 九九99精品视频在线观看| 日日夜夜小色哥| 色玖玖爱| AⅤ网站在线看| 欧美成人日韩| 成人婷婷色五月天| 精品一区二区三区三区| 亚洲六月色| 另类视频丁香五月| 九色91国产| 日韩av手机在线观看| 色婷婷a| 色播播之激情五月婷婷| 四川操逼站| 91丨九色丨国产打屁股| 六月婷婷在线| 97亚洲色 torrent magnet| 激情五月最新网址| 99亚州综合精品成人网| 天天天天色天天天天天干| 色~性~乱~伦~噜| 久久综合五月天激情小说网站| 91AV婷婷| 丁香五月 六月婷婷首页| 另类视频综合| 操草草草| 五月天色五月| jiZZdr| 亚洲欧洲自拍图片专区五月天| 色情开心五月| 日本一级淫| 婷婷九月丁香| 啪到高潮激情丁香五月| 五月亭亭六月色| 99草视频在线观看| 亚洲愉拍99热成人精品| 91精品久久久久久久| 国产精品久久7777777精品无码| 66精品国产成人| www. 五月. com| 99re热视频这里只精品| www.精品99| 久播影院免费观看电视剧大全最新网| 九九视频免费| 秋霞日本免费毛片A片| 97五月婷| 丁香色色网| 亚洲旡码| 婷婷射丁香| 森林影视大全,最好看的2019年视频| 狠狠色狠狠| 色色婷婷婷丁香五月天| 久久久天堂国产精品女人| 综合激情五月天| 开心深爱激情网| 丁香五月婷婷乱| www.激情在线| 五月综合激情| 97ai婷婷| 欧美成人在线观看| 久久9视频| 综合大香蕉| 人人干人人看| 天天色综合综合| 丁香六月婷婷高清| 激情五月天在线观看婷婷| 国内一级精品| 加勒比久热| 久久婷婷五月天丁香| 香蕉久久国产AV一区二区| 午夜丁香婷婷| 国产欧美第五十五页| 婷婷刺激综合|