国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

FPGA驅(qū)動(dòng)步進(jìn)電機(jī)-Sin曲線加速

這篇具有很好參考價(jià)值的文章主要介紹了FPGA驅(qū)動(dòng)步進(jìn)電機(jī)-Sin曲線加速。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


以下由特權(quán)同學(xué)的FPGA文檔摘取

Sin 曲線控制 step 脈沖信號(hào)生成的功能框圖如下所示。
fpga 步進(jìn)電機(jī)加減速,1024程序員節(jié)

基本實(shí)現(xiàn)原理

①判斷步進(jìn)電機(jī)驅(qū)動(dòng)的目標(biāo)頻率 stepper_delay_target 與當(dāng)前頻率 stepper_delay_current的值是否一致,若一致,則不做任何加速、減速操作,保持當(dāng)前速度運(yùn)行;若目標(biāo)頻率高于當(dāng)前頻率,則執(zhí)行加速;若目標(biāo)頻率低于當(dāng)前頻率,則執(zhí)行減速。

②在加速或減速控制開啟狀態(tài)下,1ms 分頻計(jì)數(shù)邏輯每個(gè) 1ms 產(chǎn)生一個(gè)高脈沖,用于切換當(dāng)前的速度。

③在每 1ms,步進(jìn)電機(jī)的速度都會(huì)加速或減速一定的頻率值,這個(gè)頻率值和勻加速總是“固定”不同,它是變化的。在低頻時(shí),速度變化量較大,而高速時(shí),速度變化量較小。這個(gè)速度到底如何變化?變化多少?我們現(xiàn)實(shí)用 matlab 產(chǎn)生了一個(gè) 0‐pi 的 sin 曲線,并且將曲線所對(duì)應(yīng)的 1024 個(gè) 16bit 數(shù)據(jù)存儲(chǔ)到了 FPGA 的片內(nèi) ROM 里(實(shí)際使用中,0~0.5pi 部分的上升曲線作為步進(jìn)電機(jī)加速的頻率曲線,而 0.5pi~pi 的下降曲線作為步進(jìn)電機(jī)減速的頻率曲線)。如圖所示,X 取值為 0~511 的曲線(左側(cè)曲線,取 0~0.5pi 的 512 個(gè)正弦值放大 32768倍,并且挪到 0 點(diǎn)以上)作為加速曲線,X 取值為 512~1023 的曲線(右側(cè)曲線,取 0.5pi~pi的 512 個(gè)正弦值放大 32768 倍)作為減速曲線。

那么這兩段曲線如何使用?
fpga 步進(jìn)電機(jī)加減速,1024程序員節(jié)
由于加速或減速所用到的 sin 查表值都是 512 個(gè),所以我們加速或減速所需經(jīng)過的中間頻率都是 512 個(gè)。對(duì)于加速操作,目標(biāo)頻率 stepper_delay_target,加速起始頻率stepper_delay_current 的差值,需要經(jīng)過 x 個(gè)中間加速頻率點(diǎn)(x 從 0 遞增到 511),我們可以算得當(dāng)前加速的 delta_speed_pulse = (stepper_delay_target ‐stepper_delay_current ) * (x 為地址對(duì)應(yīng)的 ROM 數(shù)據(jù))/32768,即最終用(stepper_delay_target ‐ delta_speed_pulse/32768)作為當(dāng)前頻率點(diǎn)。換句話說,就是用 sin 曲線作為整個(gè)加速過程的頻率差值,用目標(biāo)頻率減去這個(gè)差值,就可以得到從其實(shí)頻率逐漸靠近目標(biāo)頻率的加速過程,并且這個(gè)加速過程和圖示左側(cè)的曲線一樣越來越平滑。對(duì)于減速操作也類似,只不過它是用停止頻率或減速目標(biāo)頻率加上當(dāng)前 sin 曲線算出的頻率差值作為當(dāng)前中間頻率點(diǎn)。

④實(shí)際的 FPGA coding 中,必須把“頻率”換算為“周期”,便于計(jì)數(shù)。這個(gè)換算很簡單,用 1s 時(shí)間除以“頻率”值即可。而由于“周期”必須換算為“時(shí)鐘脈沖個(gè)數(shù)”為單位,所以我們把這個(gè)除法運(yùn)算中的“除數(shù)”也換算為“時(shí)鐘脈沖個(gè)數(shù)”為單位,因此 1s/20ns(時(shí)鐘周期為 20ns)即除數(shù) 50_000_000。

⑤算出了加速或減速過程中不斷變化的步進(jìn)電機(jī)驅(qū)動(dòng)的脈沖周期stepper_delay_current_period,就能夠產(chǎn)生步進(jìn)電機(jī)驅(qū)動(dòng)的脈沖了。

實(shí)際仿真的波形

fpga 步進(jìn)電機(jī)加減速,1024程序員節(jié)
以上勻加速/減速操作下,設(shè)定步進(jìn)電機(jī)的啟動(dòng)頻率為 500Hz,可以穩(wěn)定加速到 5KHz,加速時(shí)間需要 512*1ms = 512ms文章來源地址http://www.zghlxwxcb.cn/news/detail-787300.html

程序

module stepper_motor_controller(
		input clk,		//50MHz
		input rst_n,	//復(fù)位信號(hào),低電平有效

		output stepper_motor_reset_n,	//步進(jìn)電機(jī)復(fù)位信號(hào),低電平有效
		output reg stepper_motor_en_n,				//步進(jìn)電機(jī)驅(qū)動(dòng)信號(hào)輸出有效信號(hào),低電平有效
		output reg stepper_motor_clk,				//步進(jìn)電機(jī)的前進(jìn)脈沖,上升沿有效發(fā)起一個(gè)步進(jìn)電機(jī)轉(zhuǎn)動(dòng)
		
		input stepper_work_en,	//步進(jìn)電機(jī)使能
		input[19:0] stepper_delay_target,	//步進(jìn)電機(jī)兩次stpe之間的延時(shí),取值必須大于2,目標(biāo)延時(shí)值
		output reg[19:0] stepper_delay_current	//步進(jìn)電機(jī)兩次stpe之間的延時(shí),取值必須大于2,當(dāng)前延時(shí)值
	);

parameter START_FRE = 20'd1000;	//步進(jìn)電機(jī)起步頻率,單位Hz
parameter TIMER_1MS = 20'd50_000;	//1ms定時(shí)計(jì)數(shù)最大值,時(shí)鐘為50MHz(20ns)
parameter CLK_NUMER_PERIORD = 32'd50_000_000;	//除數(shù),單位20ns

//---------------------------------------------------------------------------
reg speed_up_en;		//加速功能開啟
reg[1:0] speed_up_en_r; //加速寄存器打一拍
reg speed_down_en; 		//減速功能開啟
reg[1:0] speed_down_en_r;//減速寄存器打一拍
reg[19:0] stepper_cnt; 
 
wire pos_speed_up_en;	//speed_up_en上升沿,表示開始啟動(dòng)加速	
wire pos_speed_down_en;	//speed_down_en上升沿,表示開始啟動(dòng)減速 

//---------------------------------------------------------------------------
//復(fù)位
assign stepper_motor_reset_n = rst_n; 
 
//---------------------------------------------------------------------------
//1s加速/減速定時(shí)
reg[19:0] xcnt;
 
always @(posedge clk or negedge rst_n)
	if(!rst_n) xcnt <= 20'd0;
	else if(!speed_up_en && !speed_down_en) xcnt <= 20'd0;
	else if(xcnt < (TIMER_1MS-1)) xcnt <= xcnt+1'b1;
	else xcnt <= 20'd0;	
 
wire motor_speed_change = (xcnt == (TIMER_1MS-1));	//ms定時(shí)信號(hào),高電平有效,切換速度
 
//---------------------------------------------------------------------------
//例化ROM,存儲(chǔ)sin輸出1024個(gè)0-pi的結(jié)果,放大1024倍
reg[9:0] rom_addr;
wire[15:0] rom_data;

blk_mem_gen_0	uut_blk_mem_gen_0 (	//IP核
	.address ( rom_addr ),
	.clock ( clk ),
	.q ( rom_data )
	);		
	
//---------------------------------------------------------------------------
//勻加速、減速控制 

	//加速控制使能
always @(posedge clk or negedge rst_n)
	if(!rst_n) speed_up_en <= 1'b0; 
	else if(motor_speed_change && (rom_addr == 10'd511)) speed_up_en <= 1'b0;	
	else if(((stepper_delay_current < stepper_delay_target) && stepper_work_en)) speed_up_en <= 1'b1;
	else speed_up_en <= 1'b0;

always @(posedge clk)
	speed_up_en_r <= {speed_up_en_r[0],speed_up_en};	//記錄電平變化

assign pos_speed_up_en = ~speed_up_en_r[1] & speed_up_en_r[0];	//speed_up_en上升沿,表示開始啟動(dòng)加速

	//減速控制使能
always @(posedge clk or negedge rst_n)
	if(!rst_n) speed_down_en <= 1'b0; 
	else if(motor_speed_change && (rom_addr == 10'd1023)) speed_down_en <= 1'b0;  
	else if(stepper_work_en) begin
		if(stepper_delay_current > stepper_delay_target) speed_down_en <= 1'b1; 
		else speed_down_en <= 1'b0;
	end
	else begin
		if(stepper_delay_current > START_FRE) speed_down_en <= 1'b1;
		else speed_down_en <= 1'b0;	
	end
	
always @(posedge clk)	
	speed_down_en_r <= {speed_down_en_r[0],speed_down_en};
	
assign pos_speed_down_en = ~speed_down_en_r[1] & speed_down_en_r[0];	//speed_down_en上升沿,表示開始啟動(dòng)減速	
wire neg_speed_down_en = speed_down_en_r[1] & ~speed_down_en_r[0];
	
//---------------------------------------------------------------------------
//ROM地址產(chǎn)生,對(duì)應(yīng)加速/減速參數(shù)選擇控制

always @(posedge clk or negedge rst_n)
	if(!rst_n) rom_addr <= 10'd0;
	else if(pos_speed_up_en) rom_addr <= 10'd0;
	else if(pos_speed_down_en) rom_addr <= 10'd512;
	else if(motor_speed_change && (speed_up_en || speed_down_en)) rom_addr <= rom_addr+1'b1;
	else ;	

//---------------------------------------------------------------------------
//乘法運(yùn)算
wire[35:0] mult_result;
reg[19:0] mult_datab;
reg[19:0] speed_up_start;

	//鎖存加速起始頻率
always @(posedge clk or negedge rst_n)
	if(!rst_n) speed_up_start <= 20'd0;
	else if(pos_speed_up_en) speed_up_start <= stepper_delay_current;

	//計(jì)算當(dāng)前運(yùn)行頻率和目標(biāo)頻率差
always @(posedge clk or negedge rst_n)
	if(!rst_n) mult_datab <= 20'd0;
	else if(pos_speed_up_en) mult_datab <= stepper_delay_target - stepper_delay_current;	//加速
	else if(pos_speed_down_en) begin
		if(!stepper_work_en) mult_datab <= stepper_delay_current - START_FRE;				//停止的減速
		else mult_datab <= stepper_delay_current - stepper_delay_target;					//運(yùn)行中減速
	end

	//頻率差*(加速頻率/32768)
mult_gen_0	uut_mult_gen_0 (
	.clock ( clk ),
	.dataa ( rom_data ),
	.datab ( mult_datab ),
	.result ( mult_result )
	);

wire[19:0] delta_speed_down_pulse = mult_result[34:15];	//加速或減速頻率差值
wire[19:0] delta_speed_up_pulse = mult_result[34:15];	//加速或減速頻率差值

//---------------------------------------------------------------------------
//步進(jìn)電機(jī)使能控制

always @(posedge clk or negedge rst_n)
	if(!rst_n) stepper_motor_en_n <= 1'b1;
	else if(stepper_work_en) stepper_motor_en_n <= 1'b0;
	else if(!stepper_work_en && (stepper_delay_current == START_FRE)) stepper_motor_en_n <= 1'b1;

//---------------------------------------------------------------------------
//步進(jìn)電機(jī)的step產(chǎn)生

	//步進(jìn)電機(jī)當(dāng)前頻率產(chǎn)生
always @(posedge clk or negedge rst_n)
	if(!rst_n) stepper_delay_current <= START_FRE;
	else if(neg_speed_down_en) begin
		if(stepper_work_en) stepper_delay_current <= stepper_delay_target;
		else stepper_delay_current <= START_FRE;
	end
	else if(motor_speed_change) begin
		if(stepper_work_en) begin
			if(speed_up_en) stepper_delay_current <= speed_up_start + delta_speed_up_pulse;
			else if(speed_down_en) stepper_delay_current <= stepper_delay_target + delta_speed_down_pulse;
			else stepper_delay_current <= stepper_delay_target;
		end
		else begin
			if(speed_down_en) stepper_delay_current <= START_FRE + delta_speed_down_pulse;
			else stepper_delay_current <= START_FRE;
		end
	end

wire[19:0] stepper_delay_current_period;	
wire[31:0] div_result;		

div_gen_0	uut_div_gen_0 (
	.clock ( clk ),
	.denom ( stepper_delay_current ),
	.numer ( CLK_NUMER_PERIORD ),
	.quotient ( div_result ),
	.remain (  )
	);

assign stepper_delay_current_period = div_result[19:0];	
	
	
reg[19:0] r_stepper_delay_current_period;	

	//步進(jìn)電機(jī)驅(qū)動(dòng)周期鎖存
always @(posedge clk or negedge rst_n)
	if(!rst_n) r_stepper_delay_current_period <= 1'd0;
	else if(stepper_cnt == 20'd0) r_stepper_delay_current_period <= stepper_delay_current_period;	
	
	//步進(jìn)電機(jī)時(shí)鐘頻率的計(jì)數(shù)
always @(posedge clk or negedge rst_n)
	if(!rst_n) stepper_cnt <= 20'd0;
	else if(stepper_cnt < r_stepper_delay_current_period[19:0]) stepper_cnt <= stepper_cnt+1'b1;
	else stepper_cnt <= 20'd0;

	//步進(jìn)電機(jī)時(shí)鐘頻率產(chǎn)生	
always @(posedge clk or negedge rst_n)
	if(!rst_n) stepper_motor_clk <= 1'b0;
	else if(stepper_cnt < {1'b0,r_stepper_delay_current_period[19:1]}) stepper_motor_clk <= 1'b0;
	else stepper_motor_clk <= 1'b1;
	

endmodule


到了這里,關(guān)于FPGA驅(qū)動(dòng)步進(jìn)電機(jī)-Sin曲線加速的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • THB6128步進(jìn)電機(jī)驅(qū)動(dòng)芯片介紹

    THB6128步進(jìn)電機(jī)驅(qū)動(dòng)芯片介紹

    THB6128步進(jìn)電機(jī)驅(qū)動(dòng)芯片簡介 ? ? ? THB6128芯片也稱為步進(jìn)電機(jī)驅(qū)動(dòng)芯片,采用BiCDMOS工藝,IC管腳間距為1mm的小型MFP30KR封裝而成。 THB6128步進(jìn)電機(jī)驅(qū)動(dòng)芯片實(shí)物 THB6128步進(jìn)電機(jī)驅(qū)動(dòng)芯片特性 ? ? ? 1、雙全橋MOSFET驅(qū)動(dòng),低導(dǎo)通電阻Ron=0.55Ω。 ? ? ? 2、最高耐壓36VDC,峰值電流2.2

    2024年02月14日
    瀏覽(22)
  • STM32控制步進(jìn)電機(jī):基于HAL庫定時(shí)器中斷的閉環(huán)步進(jìn)電機(jī)驅(qū)動(dòng)+精準(zhǔn)控制脈沖數(shù)

    STM32控制步進(jìn)電機(jī):基于HAL庫定時(shí)器中斷的閉環(huán)步進(jìn)電機(jī)驅(qū)動(dòng)+精準(zhǔn)控制脈沖數(shù)

    該篇文章中用到的步進(jìn)電機(jī)閉環(huán)驅(qū)動(dòng)器為Emm42_V4.0步進(jìn)電機(jī)閉環(huán)驅(qū)動(dòng)器。該閉環(huán)驅(qū)動(dòng)器自帶FOC矢量閉環(huán)控制算法,能實(shí)現(xiàn)力矩、速度、位置三環(huán)控制。 如下圖所示,該42步進(jìn)閉環(huán)電機(jī)驅(qū)動(dòng)器的A+、A-、B+、B-連接步進(jìn)電機(jī),通過右側(cè)的使能、脈沖、方向端對(duì)步進(jìn)電機(jī)進(jìn)行驅(qū)動(dòng)控制

    2024年02月01日
    瀏覽(25)
  • 基于STM32的步進(jìn)電機(jī)驅(qū)動(dòng)設(shè)計(jì)

    基于STM32的步進(jìn)電機(jī)驅(qū)動(dòng)設(shè)計(jì)

    程序源碼提取鏈接放置文章底部,自行提取即可。 采用STM32驅(qū)動(dòng)28BYJ4步進(jìn)電機(jī),實(shí)現(xiàn)正轉(zhuǎn)反轉(zhuǎn),完成角度調(diào)整。步進(jìn)電機(jī)是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機(jī)構(gòu)。當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)------一個(gè)固定的角度(及步進(jìn)角)??梢?/p>

    2024年02月02日
    瀏覽(26)
  • 【STM32】步進(jìn)電機(jī)及其驅(qū)動(dòng)(ULN2003驅(qū)動(dòng)28BYJ-48丨按鍵控制電機(jī)旋轉(zhuǎn))

    【STM32】步進(jìn)電機(jī)及其驅(qū)動(dòng)(ULN2003驅(qū)動(dòng)28BYJ-48丨按鍵控制電機(jī)旋轉(zhuǎn))

    參考文章與課程: ??【視頻課程】步進(jìn)電機(jī)基礎(chǔ)原理和應(yīng)用——程子華主講 ??【視頻課程】電機(jī)系列教學(xué)視頻(基于STM32硬件)——野火 ??【霄耀在努力】STM32驅(qū)動(dòng)步進(jìn)電機(jī)(原理、程序、解決電機(jī)只震動(dòng)不轉(zhuǎn)動(dòng)問題) ??步進(jìn)控制系統(tǒng)由以下三個(gè)部分組成: 控制器

    2023年04月09日
    瀏覽(18)
  • ESP32設(shè)備驅(qū)動(dòng)-步進(jìn)電機(jī)A4988驅(qū)動(dòng)模塊

    在本文中,我們將介紹如何通過ESP32芯片驅(qū)動(dòng)A4988 步進(jìn)電機(jī)驅(qū)動(dòng)器模塊。 A4988 驅(qū)動(dòng)器模塊用于以相對(duì)簡單的方式控制步進(jìn)電機(jī)。 僅使用 ESP32 和 A4988 驅(qū)動(dòng)模塊的兩個(gè)引腳,我們就可以控制步進(jìn)電機(jī)的旋轉(zhuǎn)速度和旋轉(zhuǎn)方向。 步進(jìn)電機(jī)是直流無刷同步電機(jī)。 它們以預(yù)定義值的離

    2024年02月13日
    瀏覽(23)
  • 【STM32篇】DRV8425驅(qū)動(dòng)步進(jìn)電機(jī)

    【STM32篇】DRV8425驅(qū)動(dòng)步進(jìn)電機(jī)

    【STM32篇】4988驅(qū)動(dòng)步進(jìn)電機(jī)_hr4988-CSDN博客 ????????在上篇文章中使用了HR4988實(shí)現(xiàn)了步進(jìn)電機(jī)的驅(qū)動(dòng),在實(shí)際運(yùn)用過程,HR4988或者A4988驅(qū)動(dòng)步進(jìn)電機(jī)會(huì)存在電機(jī)噪音太大的現(xiàn)象。本次將向各位友友介紹一個(gè)驅(qū)動(dòng)簡單且非常靜音的一款步進(jìn)電機(jī)驅(qū)動(dòng)IC。 ????????DRV8424/25 是適

    2024年04月11日
    瀏覽(29)
  • STM32F4驅(qū)動(dòng)42步進(jìn)電機(jī)(采用驅(qū)動(dòng)器)

    STM32F4驅(qū)動(dòng)42步進(jìn)電機(jī)(采用驅(qū)動(dòng)器)

    提示:文章寫完后,目錄可以自動(dòng)生成,如何生成可參考右邊的幫助文檔 stm32f407zgt6芯片,tb6600驅(qū)動(dòng)器 植樹機(jī)代碼,可以驅(qū)動(dòng)四路42步進(jìn)電機(jī),以下是只驅(qū)動(dòng)1路。 : 紅線接B+(TB6600), 藍(lán)線接B-, 綠線接A-, 黑線接A+ 該圖片是轉(zhuǎn)載的。根據(jù)本文代碼:Signal的-統(tǒng)一接開發(fā)板的GND(解

    2024年02月03日
    瀏覽(27)
  • STM32CubeMX ULN2003步進(jìn)電機(jī)驅(qū)動(dòng)

    STM32CubeMX ULN2003步進(jìn)電機(jī)驅(qū)動(dòng)

    一、28BYJ-48 步進(jìn)電機(jī) ?28BYJ-48是一款5線單極步進(jìn)電機(jī),運(yùn)行電壓為5V。 根據(jù)數(shù)據(jù)表,當(dāng)28BYJ-48電機(jī)在全步模式下運(yùn)行時(shí),每步對(duì)應(yīng)于11.25°的旋轉(zhuǎn)。這意味著每轉(zhuǎn)有32步 (360°/11.25° = 32)。 如上圖所示,步距角=5.625°/64 意思就是每64個(gè)脈沖步進(jìn)電機(jī)就會(huì)轉(zhuǎn)5.625度,因此我們很容易得

    2024年01月18日
    瀏覽(33)
  • 步進(jìn)電機(jī)驅(qū)動(dòng)器細(xì)分功能的介紹以及設(shè)置

    ? ? ? ?步進(jìn)電機(jī)驅(qū)動(dòng)器的細(xì)分原理介紹,步進(jìn)電機(jī)安裝有帶永久磁性的轉(zhuǎn)子,而定子至少具有兩個(gè)繞線。當(dāng)轉(zhuǎn)子磁性與定子繞線保持一致時(shí),將驅(qū)動(dòng)第二個(gè)繞線。兩個(gè)繞線交替開啟和關(guān)閉,這將導(dǎo)致電機(jī)鎖定在想要的步進(jìn)位置。通過繞線的電流方向還可反向。 在帶有兩個(gè)定

    2023年04月09日
    瀏覽(22)
  • arduino uno+驅(qū)動(dòng)器控制42步進(jìn)電機(jī)

    arduino uno+驅(qū)動(dòng)器控制42步進(jìn)電機(jī)

    1.步進(jìn)電機(jī)工作原理 步進(jìn)電機(jī)通過不停的變換通電線圈和線圈的通電方向進(jìn)行旋轉(zhuǎn),每次變換使步進(jìn)電機(jī)轉(zhuǎn)子轉(zhuǎn)動(dòng)1.8°。如圖所示,這里采用的是兩相四線步進(jìn)電機(jī),所有的轉(zhuǎn)動(dòng)都由以下四個(gè)步驟構(gòu)成 2.arduino+驅(qū)動(dòng)器+步進(jìn)電機(jī),接線示意圖 3.編寫arduino程序

    2024年02月13日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包