欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
步進電機STM32程序(用A4988控制)與限位開關配合使用
[打印本頁]
作者:
不成佛便成魔
時間:
2020-7-25 09:42
標題:
步進電機STM32程序(用A4988控制)與限位開關配合使用
單片機是STM32的,有需要的可以參考一下,提供了.c和.h文件,只需添加在工程中就好,這里使用了3個步進電機和三個限位開關,添加的話可以對照著修改。
部分代碼顯示如下。
#include "delay.h"
#include "diver.h"
#include "oled.h"
#include "usart.h"
//暫不知道步距角
//電機引腳初始化
extern u8 endB;
void Step_Motor_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); //使能PA,PD端口時鐘
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10|GPIO_Pin_11|GPIO_Pin_12|GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根據設定參數初始化GPIOB.12高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
GPIO_Init(GPIOB, &GPIO_InitStructure); //根據設定參數初始化GPIOB.12高
limit1=1;
limit2=1;
limit3=1;
}
void SetMotor1_forward(u16 speed)
{
DIR1=False;
STEP1=1;
delay_us(1);
STEP1=0;
delay_us(speed);
}
void SetMotor1_back(u16 speed)
{
DIR1=Turn; //后退
STEP1=1;
delay_us(1);
STEP1=0;
delay_us(speed);
}
void SetMotor2_forward(u16 speed)
{
DIR2=False;
STEP2=1;
delay_us(1);
STEP2=0;
delay_us(speed);
}
void SetMotor2_back(u16 speed)
{
DIR2=Turn; //后退
STEP2=1;
delay_us(1);
STEP2=0;
delay_us(speed);
}
void SetMotor3_forward(u16 speed)
{
DIR3=False;
STEP3=1;
delay_us(1);
STEP3=0;
delay_us(speed);
}
void SetMotor3_back(u16 speed)
{
DIR3=Turn; //后退
STEP3=1;
delay_us(1);
STEP3=0;
delay_us(speed);
}
void step1_forward(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_1==1)//判斷限位開關是否被按下,沒有則執行下去
SetMotor1_forward(speed);
else break;//否則就跳出循環
}
USART1_RX_BUF[endB]=0;//清零準備下一次接收
}
void step1_back(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_2==1)
SetMotor1_back(speed);
else break;
}
USART1_RX_BUF[endB]=0;
}
void step2_forward(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_2==1)
SetMotor2_forward(speed);
else break;
}
USART1_RX_BUF[endB]=0;//清零準備下一次接收
}
void step2_back(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_2==1)
SetMotor2_back(speed);
else break;
}
USART1_RX_BUF[endB]=0;
}
void step3_forward(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_3==1)
SetMotor3_forward(speed);
else break;
}
USART1_RX_BUF[endB]=0;//清零準備下一次接收
}
void step3_back(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_3==1)
SetMotor3_back(speed);
else break;
}
USART1_RX_BUF[endB]=0;
}
void step1_2_forward(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_1==1&&limit_2==1)
{
SetMotor1_forward(speed);
SetMotor2_forward(speed);//兩個步進電機一起運動
}
else break;
}
USART1_RX_BUF[endB]=0;
}
void step1_2_back(u16 steps,u16 speed)
{
u16 i;
for(;i<=steps;i++)
{
if(limit_1==1&&limit_2==1)
{
SetMotor1_back(speed);
SetMotor2_back(speed);//兩個步進電機一起運動
}
else break;
}
USART1_RX_BUF[endB]=0;
}
/************以下是****************/
//void STEP_1(u16 speed)
//{ STEP1=0;delay_us(speed); STEP2=0; delay_us(speed);STEP3=0; delay_us(speed);STEP4=1;delay_us(speed);}
//void STEP_2(u16 speed)
//{ STEP1=0;delay_us(speed); STEP2=0; delay_us(speed);STEP3=1;delay_us(speed); STEP4=0;delay_us(speed);}
//void STEP_4(u16 speed)
//{ STEP1=0; delay_us(speed);STEP2=1;delay_us(speed);STEP3=0;delay_us(speed); STEP4=0;delay_us(speed);}
//void STEP_8(u16 speed)
//{ STEP1=1;delay_us(speed); STEP2=0;delay_us(speed); STEP3=0;delay_us(speed);STEP4=0;delay_us(speed);}
//void SetMotor_forward(u16 steps,u16 speed)//正轉
//{
// u8 inch;
// u16 add;
// for(add=0;add<steps;add++)//轉半圈
// for(inch=0;inch<4;inch++)//完成一個拍數4*0.36°
// switch(inch)
// {
// case 0: STEP_1(speed); break;
// case 1: STEP_2(speed); break;
// case 2: STEP_4(speed); break;
// case 3: STEP_8(speed); break;
// }
//}
//void SetMotor_back(u16 steps,u16 speed)//反轉
//{
// u8 inch;
// u16 add;
// for(add=0;add<steps;add++)//轉半圈
// for(inch=0;inch<4;inch++)//完成一個拍數4*0.36°
// switch(inch)
// {
// case 0: STEP_8(speed); break;
// case 1: STEP_4(speed); break;
// case 2: STEP_2(speed); break;
// case 3: STEP_1(speed); break;
// }
//}
復制代碼
//已使用過,沒有任何問題。(使用的是4線二相的步進電機,末端注釋掉的是五線的,可用)
51hei.png
(4.61 KB, 下載次數: 61)
下載附件
2020-7-25 14:48 上傳
頭文件下載:
DIVER.zip
(1.96 KB, 下載次數: 116)
2020-7-25 09:42 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
biubiubiu2124
時間:
2024-3-19 10:31
USART1_RX_BUF[endB]=0;//清零準備下一次接收
請問這個串口這個去掉,會有問題嘛,這句話是用來提示當前狀態的嘛
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1