• 方案介紹
    • 一、環(huán)境介紹
    • 二、硬件介紹
    • 三、驅(qū)動(dòng)代碼
  • 附件下載
  • 相關(guān)推薦
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

STM32+ULN2003驅(qū)動(dòng)28BYJ4步進(jìn)電機(jī)(根據(jù)圈數(shù)正轉(zhuǎn)、反轉(zhuǎn))

02/09 08:32
1683
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

更多詳細(xì)資料請(qǐng)聯(lián)系.docx

共1個(gè)文件

一、環(huán)境介紹

MCU: STM32F103ZET6

編程軟件:? Keil5

二、硬件介紹

開(kāi)發(fā)板采用STM32F103ZET6 最小系統(tǒng)板

電機(jī)驅(qū)動(dòng)板采用的是ULN2003

步進(jìn)電機(jī)采用的是28BYJ4? (5V 4相5線步進(jìn)電機(jī))

三、驅(qū)動(dòng)代碼

3.1 motor.c

#include "motor.h"


//步進(jìn)電機(jī)正反轉(zhuǎn)數(shù)組1
u16 PositiveSequence[4] ={0x0200,0x0100,0x0080,0x0040};// D-C-B-A   
u16 ReverseOrder[4]={0x0040,0x0080,0x0100,0x0200};// A-B-C-D.


void motor_delay_ms(u32 ms)
{
 u32 i,j;
	for(i=0;i<ms;i++)
		for(j=0;j<112;j++);
}

void motor_stop(void)  
{  
    MOTOR_1=0;
    MOTOR_2=0;
    MOTOR_3=0;
    MOTOR_4=0;
}

void motor_init(void)
{
    RCC->APB2ENR|=1<<4;
    GPIOC->CRL&=0x00FFFFFF;
    GPIOC->CRL|=0x33000000;
    GPIOC->CRH&=0xFFFFFF00;
    GPIOC->CRH|=0x00000033;
	
// IN4: PC9   d
// IN3: PC8   c
// IN2: PC7   b
// IN1: PC6   a
}

void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
{
  GPIOx->ODR = PortVal;
}


void motor_just(int speed)  //一個(gè)脈沖
{  
    uint8_t i;  
  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOC,PositiveSequence[i]);
        motor_delay_ms(speed);  
    }
}


void motor_back(int speed)  
{  
    uint8_t i;  
    for(i=0;i<4;i++)  
    {  
        GPIO_Write(GPIOC,ReverseOrder[i]);  
        motor_delay_ms(speed);  
    } 

}


//由于   *一個(gè)脈沖*   *輸出軸*  轉(zhuǎn)0.08789度(電機(jī)實(shí)轉(zhuǎn)0.08789*64=5.625度),即步進(jìn)角為5.625度。則轉(zhuǎn)完A-B-C-D為  *8個(gè)脈沖*  
//,即0.08789*8=0.70312度。若稱(chēng)A-B-C-D為一個(gè)周期,則j為需要的轉(zhuǎn)完angle角度所需的周期數(shù)。
//步進(jìn)電機(jī)正轉(zhuǎn)角度函數(shù)
void motor_just_angle(int angle,int speed)
{
	int i,j;
	j=(int)(angle/0.70312);
	for(i=0;i<j;i++)
	{
		motor_just(speed);
	}
	motor_stop();
}



//步進(jìn)電機(jī)反轉(zhuǎn)角度函數(shù)
void motor_back_angle(int angle,int speed)
{
	int i,j;
	j=(int)(angle/0.70312);
	for(i=0;i<j;i++)
	{
		motor_back(speed);
	}
	motor_stop();
}


//步進(jìn)電機(jī)反轉(zhuǎn)圈函數(shù)
void motor_back_circle(int ring ,int speed)
{
	int i;
	for(i=0;i<ring;i++)
	{
        motor_back_angle(360,speed);
	}
}

//步進(jìn)電機(jī)正轉(zhuǎn)圈函數(shù)
void motor_just_circle(int ring,int speed) //步進(jìn)電機(jī)正轉(zhuǎn)角度函數(shù)
{
	int i;
	for(i=0;i<ring;i++)
	{
        motor_just_angle(360,speed);
	}
}


3.2? motor.h

#ifndef _MOTOR_H
#define _MOTOR_H
#include "sys.h"

void motor_delay_ms(u32 x);//延時(shí)函數(shù)
void motor_init(void);  //步進(jìn)電機(jī)初始化
void motor_just(int speed);    //步進(jìn)電機(jī)正轉(zhuǎn)函數(shù)
void motor_back(int speed);   //步進(jìn)電機(jī)反轉(zhuǎn)函數(shù)
void motor_just_angle(int angle,int speed);  //步進(jìn)電機(jī)正轉(zhuǎn)角度函數(shù)
void motor_back_angle(int angle,int speed); //步進(jìn)電機(jī)反轉(zhuǎn)角度函數(shù)
void motor_stop(void);  //步進(jìn)電機(jī)停止函數(shù)
void motor_just_circle(int ring ,int speed); //步進(jìn)電機(jī)正轉(zhuǎn)圈函數(shù)
void motor_back_circle(int ring ,int speed);//步進(jìn)電機(jī)反轉(zhuǎn)圈函數(shù)

//IN
#define MOTOR_1  PCout(6)
#define MOTOR_2  PCout(7)
#define MOTOR_3  PCout(8)
#define MOTOR_4  PCout(9)

#endif

3.3 main.c

/*
ULN2003控制28BYJ-48步進(jìn)電機(jī)接線:

ULN2003接線:
IN4: PC9   d
IN3: PC8   c
IN2: PC7   b
IN1: PC6   a
+  : 5V
-  : GND
*/

int main()
{
    u8 time_cnt=0;
    u8 key;
    LED_Init();
    KEY_Init();
    USART1_Init(115200);
    motor_init();  //步進(jìn)電機(jī)初始化
    USART1_Printf("程序初始化.....rn");
    
	 while(1)
	 {
         //按鍵可以測(cè)試開(kāi)鎖和關(guān)鎖
        key=KEY_Scan(0);
        if(key==1)
        {
            LED1=0;  //亮燈--表示開(kāi)鎖
            motor_just_circle(1,300);   //電機(jī)正轉(zhuǎn)1圈
        }
        else if(key==2)
        {
            LED1=1;  //滅燈--表示關(guān)鎖
            motor_back_circle(1,300);  //電機(jī)反轉(zhuǎn)1圈
        } 

        DelayMs(10);
        time_cnt++;
        if(time_cnt>=50)
        {
            time_cnt=0;
            LED2=!LED2;
        }
	 }
}

  • 更多詳細(xì)資料請(qǐng)聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱(chēng)改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷(xiāo)售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷(xiāo)售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(chē)(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專(zhuān)用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車(chē)用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團(tuán)于1987年6月成立,是由意大利的SGS微電子公司和法國(guó)Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱(chēng)改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷(xiāo)售收入在半導(dǎo)體工業(yè)五大高速增長(zhǎng)市場(chǎng)之間分布均衡(五大市場(chǎng)占2007年銷(xiāo)售收入的百分比):通信(35%),消費(fèi)(17%),計(jì)算機(jī)(16%),汽車(chē)(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計(jì)數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場(chǎng)居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專(zhuān)用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機(jī)頂盒芯片供應(yīng)商,而且在分立器件、手機(jī)相機(jī)模塊和車(chē)用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦