
电机使用的是28BYJ-48步进电机:
//stepping motor 步进电机
//sm.h
#ifndef __STEP_MOTOR_H
#define __STEP_MOTOR_H
#include “sys.h”
#include “delay.h”
#define MA PEout(0)
#define MB PEout(1)
#define MC PEout(2)
#define MD PEout(3)
#define uchar unsigned char
void sm_Init(void);
void MotorRun(uint angle,uint drct,uint speed);
#endif
//sm.c
#include “sm.h”
void sm_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructur;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE, ENABLE);
GPIO_InitStructur.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1| GPIO_Pin_2| GPIO_Pin_3;
GPIO_InitStructur.GPIO_Mode = GPIO_Mode_OUT;
GPIO_InitStructur.GPIO_OType = GPIO_OType_PP;
GPIO_InitStructur.GPIO_Speed = GPIO_Speed_100MHz;
GPIO_InitStructur.GPIO_PuPd = GPIO_PuPd_UP;
GPIO_Init(GPIOE, &GPIO_InitStructur);
}
//angle:角度,范围[0,360]
//drct:旋转方向,0:顺时针,1:逆时针
//speed:转速,范围[1,100]
void MotorRun(uint angle,uint drct,uint speed)
{
uint step,nangle;
step=0;
nangle=512*angle/45;//将角度换算成拍数,计算结果自动取整
if(drct0)
{
while(nangle–)
{
switch(step)//8拍方式驱动,每拍转(5.265/64)度
{
case 0:MA=1;MB=0;MC=0;MD=0;break;
case 1:MA=1;MB=1;MC=0;MD=0;break;
case 2:MA=0;MB=1;MC=0;MD=0;break;
case 3:MA=0;MB=1;MC=1;MD=0;break;
case 4:MA=0;MB=0;MC=1;MD=0;break;
case 5:MA=0;MB=0;MC=1;MD=1;break;
case 6:MA=0;MB=0;MC=0;MD=1;break;
case 7:MA=1;MB=0;MC=0;MD=1;break;
}
if(step7)step=0;
else step++;
if(speed>100)speed=100;
delay_ms(110-speed);//这里可以适当改动,延时时间短则转速快
,但是时间太短会造成电机堵转(不转了)
}
}
else
{
while(nangle--)
{
switch(step)
{
case 0:MA=1;MB=0;MC=0;MD=1;break;
case 1:MA=0;MB=0;MC=0;MD=1;break;
case 2:MA=0;MB=0;MC=1;MD=1;break;
case 3:MA=0;MB=0;MC=1;MD=0;break;
case 4:MA=0;MB=1;MC=1;MD=0;break;
case 5:MA=0;MB=1;MC=0;MD=0;break;
case 6:MA=1;MB=1;MC=0;MD=0;break;
case 7:MA=1;MB=0;MC=0;MD=0;break;
}
if(step==7)step=0;
else step++;
if(speed>100)speed=100;
delay_ms(110-speed);//这里可以适当改动,延时时间短则转速快,
但是时间太短会造成电机堵转(不转了)
}
}
MA=0;MB=0;MC=0;MD=0;
}
//main
#include “sys.h”
#include “delay.h”
#include “usart.h”
#include “led.h”
#include “sm.h”
int main(void)
{
delay_init(168);
sm_Init();
while(1)
{
MotorRun(90,1,100);
delay_ms(500);
}
}


被折叠的 条评论
为什么被折叠?



