STM32 小車2個步進電機運動控制

2021-07-31 15:58:15 字數 2985 閱讀 9826

使用stm32作為小車控制器,控制小車2個步進電機運動,pwm波頻率調節小車速度,2個io控制小車方向

標頭檔案部分:

#ifndef __motorcontrol_h

#define __motorcontrol_h

#include "sys.h"

////電機抱閘驅動器控制程式

////全域性變數

int motion;//電機停止

int arrp, pscp;//pwm頻率調節引數

float comp;

void initialization();//初始化

void motor_io_init(void);//初始化gpio口

/******************************

* * 機械人運動控制程式

* ********************************/

#define vacuumpump pcout(11)

#define motor0 pcout(10)

void vacuumpumppoweron();//上電

void vacuumpumppoweroff();//下電

///void brakeon();//抱閘上電

void brakeoff();//抱閘下電

/////左右驅動器使能函式

void poweron();//使能上電

void poweroff();//使能下電

//左驅動器dir口控制

void dirleft1();

void dirleft0();

//右驅動器dir口控制

void dirright1();

void dirright0();

///void pulleft();//左驅動器pul脈衝輸出

void pulright();//右驅動器pul脈衝輸出

//////

//void forward();//前進定義

void backward();//後退定義

void turnleft();//左轉定義

void turnright();//右轉定義

void stop();//停止定義

void fastvel();//電機快速

void fast();//電機快速

void middvel();//電機慢速

void slow();//電機慢速

void slowvel();//電機慢速

//////

////pwm脈衝產生函式

void tim14_pwm_init(u32 arr,u32 psc);

void tim10_pwm_init(u32 arr,u32 psc);

#endif

原始檔部分:

#include "motorcontrol.h"

#include "delay.h"

#include "stm32f4xx_gpio.h"

#include "stm32f4xx_rcc.h"

#include "usart.h"

#include "stm32f4xx_tim.h"

#include "misc.h"

////

//初始化

void initialization()

//初始化gpio口

void motor_io_init(void)

/******************************

* *機械人運動控制程式

* ********************************/

//上電

void vacuumpumppoweron()

//下電

void vacuumpumppoweroff()

//void brakeon()//抱閘上電

void brakeoff()//抱閘下電

////左右驅動器使能函式

//使能上電

void poweron()

//使能下電

void poweroff()

/////左驅動器dir口控制

void dirleft1()

void dirleft0()

//右驅動器dir口控制

void dirright1()

void dirright0()

/////左驅動器pul脈衝輸出

void pulleft()

//右驅動器pul脈衝輸出

void pulright()

//////

////前進定義

void forward()

//後退定義

void backward()

//左轉定義

void turnleft()

//右轉定義

void turnright()

//停止定義

void stop()

void fastvel()//電機快速

}void fast()

}void middvel()

}void slow()

}void slowvel()//電機慢速

}/******************************

* * pwm脈衝產生函式

* ********************************/

//tim14 pwm部分初始化

//pwm輸出初始化

//arr:自動重灌值

//psc:時鐘預分頻數

void tim14_pwm_init(u32 arr,u32 psc)

void tim10_pwm_init(u32 arr,u32 psc)

STM32小車 PWM電機調速

一 定時器的兩路通道產生兩路pwm 這裡我用的是定時器3的通道1和通道3,主要步驟如下 1 開啟 tim3 時鐘,配置 pb0和pa0 為復用輸出 要使用 tim3,我們必須先開啟 tim3 的時鐘 通過 apb1enr 設定 這裡我們還要配置 pb0和pa6為復用輸出,這是因為 tim3 ch1 ...

STM32小車篇之電機轉動

首先,我們要明白 電機轉動的實質其實是對pwm波的控制輸出 庫函式直接呼叫封裝好的函式 tim setcompare1 或者用ccr調節占空比 pwm波輸出的原理圖如下 然後,進行 的編寫,可以引用正點原子的例程 在此基礎上進行 的編寫。我小車是直接控制兩個電機,四個電機分成兩組。讓其中一側電機的狀...

STM32 除錯步進電機初級篇

採用驅動器 假設細分數為16細分 步距角為1.8 則每個脈衝產生的電機轉動角度為 1.8 16 0.1125 電機轉 一圈所需的脈衝數量為 s 360 0.1125 3200個脈衝。同理求得64細分 為12800個脈衝 128細分為25600個脈衝。如果步距角為0.9 則在1.8 求得資料上 2倍。...