极品馒头泬19p,国产精品亚洲一区二区三区,狠狠色噜噜狠狠狠7777奇米,国产精品视频一区二区三区无码,国产欧美日韩久久久久

【E2198】基于 STM32F103x系列 單片機的三軸步進電機驅(qū)動程序

2021-11-07 20:07:16      索煒達電子      2210     

項目編號:E2198

文件大?。?92K

源碼說明:帶中文注釋

開發(fā)環(huán)境:C編譯器

簡要概述:

基于 STM32F103x系列 單片機的三軸步進電機驅(qū)動程序


已不再做電機控制0_0


這個demo本身是很簡單的,本科的時候?qū)W習(xí)用的


另外再上傳另一個demo供大家學(xué)習(xí)用,類似的,使用時切換到該分支, git checkout HGRobotSimpleDemo.


HGRobotSimpleDemo, 一個簡單的滑軌機器人程序, 適合初學(xué)者, 只是給出了大致的架構(gòu), 只包括上位機與機器人通信(WinForm->LwIP棧->步進電機),板子用的stm32F4.


上位機的話用了因為用了??档木W(wǎng)絡(luò)球機,所以有網(wǎng)絡(luò)通信/串口通信/視頻監(jiān)控的功能,都是用SDK開發(fā)的。


實際上真正的機器人用的是伺服電機,步進電機也就拿來入門即可。

【E2198】基于 STM32F103x系列 單片機的三軸步進電機驅(qū)動程序

1.相關(guān)的GPIO接口說明:

  • 電機用GPIOC口

     // (MotorX)A4988--> GPIOC0-GPIO1
     GPIOC0 	--> ENABLE
     GPIOA1 	--> STEP(TIM2 CH2)
     GPIOC1	--> DIR
     // (MotorY)A4988--> GPIOC2-GPIO3
     GPIOC2 	--> ENABLE
     GPIOA7 	--> STEP(TM3 CH2)
     GPIOC3	--> DIR
     // (MotorZ)A4988--> GPIOC4-GPIO5
     GPIOC4 	--> ENABLE
     GPIOB7 	--> STEP(TIM4 CH2)
     GPIOC5	--> DIR
  • 機械手(二八步進電機)控制信號使用GPIOC口

     GPIOC6	--> MotorH_A
     GPIOC7	--> MotorH_B	
     GPIOC8	--> MotorH_C
     GPIOC9	--> MotorH_D
  • 串口通信對應(yīng)引腳宏定義

     #define MASTER_CTRL				GPIOA
     #define MASTER_TXD 				GPIO_Pin_9
     #define MASTER_RXD 				GPIO_Pin_10

2.如何實時控制PWM輸出通道的通斷?

選擇有很多種,比方說定時器使能/關(guān)閉,PWM輸出通道使能/關(guān)閉,占空比為0/50%,驅(qū)動器使能引腳0/1 但關(guān)鍵是,你要能在程序中有辦法監(jiān)測到電機當(dāng)前是停止的,還是運行的 所以選擇設(shè)置/讀取定時器使能位/PWM輸出通道使能位

TIM_OCENSet(TIM4,OC2_ENR);TIM_Cmd(TIM4,DISABLE);TIM_OCENReset(TIM4,OC2_ENR);			
TIM_Cmd(TIM4,ENABLE);TIM_OCENSet(TIM4,OC2_ENR,DISABLE);TIM_Cmd(TIM4,DISABLE);TIM_OCENSet(TIM4,OC2_ENR,ENABLE);TIM_Cmd(TIM4,ENABLE);

這里控制pwm通斷其實就是為了啟動或停止電機,然而啟動和停止分別包含加速過程和減速過程,所以這里統(tǒng)一采用TIM_OCENReset() 其它的方式都打開使能并配合上加減速過程,實現(xiàn)電機的啟動和停止 實際采用TIM_Cmd()更節(jié)能一些

3.如何實時改變PWM的頻率以改變電機的速度?

// fpwm_psc = 1,即為1分頻,該函數(shù)內(nèi)部已經(jīng)作減一操作,故不用再減一TIM_ChangePrescaler(TIMx,fpwm_psc);	
// 這里采用TIM_ChangePrescaler方法,因為占空比始終不變,例如可以為50%TIM_SetAutoreload(TIMx,fpwm_arr)		
  • (全步進模式)計算轉(zhuǎn)速

// 一個脈沖周期T = arr/[(72*1000000)/fpwm_psc] = 72*1000000/(fpwm_psc*arr)(s) ,f = 1/T (Hz)// 轉(zhuǎn)速n = (f/200)*60 (r/min),細(xì)分?jǐn)?shù)1.8°,200個脈沖轉(zhuǎn)一圈// 占空比			p = pulse_ccr / arr;

4.鍵盤相關(guān)的GPIO接口說明:

  • 相關(guān)GPIO口:

     GPIOB5	(K1) 
     GPIOB6	(K2)				
     GPIOB13 (K3)	//GPIOB7  (K3)
     GPIOB14	(K4)	//GPIOB8  (K4)	
     GPIOB9	(K5)
     GPIOB10	(K6)
     GPIOB11	(K7)
     GPIOB12	(K8)
  • 效果:

     按下K1,順時針轉(zhuǎn)
     按下K2,逆時針轉(zhuǎn);
     按下K3,加速;
     按下K4,減速 ;
     按下K5,暫停;
     按下K6,啟動;
     按下K7,計時加長;
     按下K8,計時減少;

5. UC/OSII系統(tǒng)使用說明:

  • sys.h 文件中 SYSTEM_SUPPORT_UCOS 置1

  • stm32f10x_it.c 文件中 USE_UCOSII 置1(實際 stm32f10x_it.c 這個文件沒有在我的項目中用到)

附:重構(gòu)順序:

  •  確認(rèn)按鍵后返回相應(yīng)鍵值
     可以在主程序中根據(jù)鍵值設(shè)計響應(yīng)程序
    1. 鍵盤


    1. 計時定時器 TIM1

  •  自動重裝載計數(shù)值、計數(shù)器分頻系數(shù)可調(diào)
     默認(rèn)pwm占空比50%
     默認(rèn)關(guān)閉pwm通道輸出使能
    1. PWM 生產(chǎn)定時器 TIM2,TIM3,TIM4

  •  啟動/停止電機函數(shù),啟動過程包括電機pwm使能,和加減速過程
     改變電機速度函數(shù)
     改變電機方向函數(shù),如果電機此時處于運行狀態(tài),應(yīng)先停止在反方向啟動
    1. 四二步進電機基本控制

  •  打開機械手
     關(guān)閉機械手
     保持機械手當(dāng)前狀態(tài)
    1. 機械手八二電機基本控制

  •  全部存儲在GPIO_Motor.c文件中
     含有基礎(chǔ)的XYZ三軸步進電機使能和反向?qū)?yīng)GPIO端口初始化
     含有基礎(chǔ)的XYZ三軸步進電機PWM脈沖信號對應(yīng)GPIO端口初始化
     含有定時器TIM2,TIM3,TIM4的pwm輸出通道對應(yīng)GPIO端口初始化
     含有機械手八二馬達的L289N驅(qū)動器控制對應(yīng)GPIO端口引腳初始化
    1. GPIO口初始化

目錄│文件列表:

 └ 4StepperMotorsDriveBySTM32F103x

    ├ BUGLIST

    │  │ 20180710第一次調(diào)試.txt

    │  │ A4988驅(qū)動步進電機調(diào)試.txt

    │  │ DMA操作.txt

    │  │ SG90舵機控制,垃圾舵機.txt

    │  │ stm32KEil設(shè)置.txt

    │  │ stm32與樹莓派通信.txt

    │  │ stm32與樹莓派通信串口控制指令測試.txt

    │  │ stm32開發(fā)需要.txt

    │  │ stm32脈寬調(diào)制PWM產(chǎn)生.txt

    │  │ stm32通用定時器筆記.txt

    │  │ TFT2.2彩色顯示屏,換我得用4.5的.txt

    │  │ TIM3+DMA1=三路不同頻率PWM.txt

    │  │ ucosII移植文件詳細(xì)內(nèi)容.txt

    │  │ ucosII講義1-任務(wù)管理.txt

    │  │ ucosII講義2-任務(wù)管理的系統(tǒng)服務(wù)函數(shù).txt

    │  │ ucosII講義3-中斷和時間管理.txt

    │  │ ucosII講義4-任務(wù)間通信與同步基本概念.txt

    │  │ ucosII講義5-的存儲管理.txt

    │  │ UCOS移植到stm32,相關(guān)文件配置.txt

    │  │ 三電機調(diào)試20170703.txt

    │  │ 絲桿有效行程內(nèi)相關(guān)計算.txt

    │  │ 為什么要學(xué)習(xí)ucos(用操作系統(tǒng)的編程思維來解決硬件開發(fā)).txt

    │  │ 呵呵,虛擬串口模擬stm32雙機通信.png

    │  │ 多路步進電機電源選型.txt

    │  │ 整個流程(個人理解).png

    │  │ 步進電機加減速算法.txt

    │  │ 硬件編程C語言,含位操作,extern用法,頭文件總結(jié).txt

    │  │ 程序重構(gòu),感覺自己之前的架構(gòu)有問題.txt

    │  │ 虛擬串口調(diào)試.txt

    │  │ 解決最開始第一張紙第一次蓋章一定會有取印章的操作.txt

    │  │ 輸出比較模式輸出PWM波.txt

    │  └ 鍵盤調(diào)試記錄20170702.txt

    ├ CORE

    │  │ core_cm3.c

    │  │ core_cm3.h

    │  └ startup_stm32f10x_md.s

    ├ HARDWARE

    │  ├ EXTI

    │  │  │ exti.c

    │  │  └ exti.h

    │  ├ GPIO_Motor

    │  │  │ GPIO_Motor.c

    │  │  └ GPIO_Motor.h

    │  ├ IronHand

    │  │  │ IronHand.c

    │  │  └ IronHand.h

    │  ├ KEY

    │  │  │ key8.c

    │  │  └ key8.h

    │  ├ MOTOR_CTRL

    │  │  │ motor.c

    │  │  │ motor.h

    │  │  │ motor_ctrl.c

    │  │  └ motor_ctrl.h

    │  ├ PWM

    │  │  │ pwm.c

    │  │  └ pwm.h

    │  ├ TIMER

    │  │  │ timer1.c

    │  │  │ timer1.h

    │  │  │ timer3.c

    │  │  └ timer3.h

    │  └ USART

    │     │ usart_master.c

    │     └ usart_master.h

    ├ STM32F10x_FWLib

    │  ├ inc

    │  │  │ misc.h

    │  │  │ stm32f10x_adc.h

    │  │  │ stm32f10x_bkp.h

    │  │  │ stm32f10x_can.h

    │  │  │ stm32f10x_cec.h

    │  │  │ stm32f10x_crc.h

    │  │  │ stm32f10x_dac.h

    │  │  │ stm32f10x_dbgmcu.h

    │  │  │ stm32f10x_dma.h

    │  │  │ stm32f10x_exti.h

    │  │  │ stm32f10x_flash.h

    │  │  │ stm32f10x_fsmc.h

    │  │  │ stm32f10x_gpio.h

    │  │  │ stm32f10x_gpio.h~RF29b2e08.TMP

    │  │  │ stm32f10x_gpio.h~RF29b86e6.TMP

    │  │  │ stm32f10x_gpio.h~RF29d6fcb.TMP

    │  │  │ stm32f10x_i2c.h

    │  │  │ stm32f10x_iwdg.h

    │  │  │ stm32f10x_pwr.h

    │  │  │ stm32f10x_rcc.h

    │  │  │ stm32f10x_rtc.h

    │  │  │ stm32f10x_sdio.h

    │  │  │ stm32f10x_spi.h

    │  │  │ stm32f10x_tim.h

    │  │  │ stm32f10x_usart.h

    │  │  └ stm32f10x_wwdg.h

    │  └ src

    │     │ misc.c

    │     │ stm32f10x_adc.c

    │     │ stm32f10x_bkp.c

    │     │ stm32f10x_can.c

    │     │ stm32f10x_cec.c

    │     │ stm32f10x_crc.c

    │     │ stm32f10x_dac.c

    │     │ stm32f10x_dbgmcu.c

    │     │ stm32f10x_dma.c

    │     │ stm32f10x_exti.c

    │     │ stm32f10x_flash.c

    │     │ stm32f10x_fsmc.c

    │     │ stm32f10x_gpio.c

    │     │ stm32f10x_i2c.c

    │     │ stm32f10x_iwdg.c

    │     │ stm32f10x_pwr.c

    │     │ stm32f10x_rcc.c

    │     │ stm32f10x_rtc.c

    │     │ stm32f10x_sdio.c

    │     │ stm32f10x_spi.c

    │     │ stm32f10x_tim.c

    │     │ stm32f10x_usart.c

    │     └ stm32f10x_wwdg.c

    ├ SYSTEM

    │  ├ delay

    │  │  │ delay.c

    │  │  └ delay.h

    │  ├ sys

    │  │  │ sys.c

    │  │  └ sys.h

    │  └ usart

    │     │ usart.c

    │     └ usart.h

    ├ UCOSII

    │  ├ CONFIG

    │  │  │ includes.h

    │  │  └ os_cfg.h

    │  ├ CORE

    │  │  │ os_core.c

    │  │  │ os_flag.c

    │  │  │ os_mbox.c

    │  │  │ os_mem.c

    │  │  │ os_mutex.c

    │  │  │ os_q.c

    │  │  │ os_sem.c

    │  │  │ os_task.c

    │  │  │ os_time.c

    │  │  │ os_tmr.c

    │  │  │ ucos_ii.c

    │  │  └ ucos_ii.h

    │  └ PORT

    │     │ os_cpu.h

    │     │ os_cpu_a.asm

    │     │ os_cpu_c.c

    │     │ os_dbg.c

    │     └ os_dbg_r.c

    └ USER

       │ 4StepperMotorsDriveBySTM32F103x.uvguix.Seven

       │ 4StepperMotorsDriveBySTM32F103x.uvoptx

       │ 4StepperMotorsDriveBySTM32F103x.uvprojx

       │ JLinkLog.txt

       │ JLinkSettings.ini

       │ main.c

       │ stm32f10x.h

       │ stm32f10x_conf.h

       │ stm32f10x_it.c

       │ stm32f10x_it.h

       │ system_stm32f10x.c

       │ system_stm32f10x.h

       └ Listings

          │ 4StepperMotorsDriveBySTM32F103x.map

          │ os_cpu_a.lst

          │ startup_stm32f10x_md.lst

          └ Test_v1_oneMotor.map

TAG三軸步進電機
  • 20 次
  • 1 分