久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
51單片機與Arduino A4988步進電機驅動模塊源程序
[打印本頁]
作者:
chang199202
時間:
2021-10-5 03:49
標題:
51單片機與Arduino A4988步進電機驅動模塊源程序
本人小白,剛入坑單片機。手頭正好有幾個a4988驅動模塊和51單片機。網上找了段代碼,發現無法使用,電機抖動(與電機接線無關)。
用山寨邏輯分析儀測得脈沖寬度為4ms arduino脈寬為1.6ms。后改動少許代碼,成功運行。刪除了部分按鈕功能,插電即轉。注意電機線2a2b為一組,如有抖動嘗試調換一組線即可。
一、介紹
該擴展板可用作雕刻機,3D打印機等的驅動擴展板,一共有4路步進電機驅動模塊的插槽,(注意本板子不包含A4988步進電機驅動模塊,需要可在本店另購),可驅動4路不進電機,而每一路步進電機都只需要2個IO口,也就是說,6個IO口就可以很好的管理3個步進電機,使用起來非常的方便,告別傳統步進電機操作繁瑣。
二、UNO與模塊IO口對應關系介紹
步進電機的基本控制需要的引腳,其他引腳是在雕刻機,或3D打印機的時候才用到的,這里我們不作詳解,IO對應如上圖。
Arduino UNO----------------------擴展板
8 ------------------------ EN (步進電機驅動使能端,低電平有效)
7----------------------- Z.DIR(Z軸的方向控制)
6----------------------- Y.DIR(Y軸的方向控制)
5----------------------- X.DIR(X軸的方向控制)
4 ---------------------- Z.STEP(Z軸的步進控制)
3 ---------------------- Y.STEP(Y軸的步進控制)
2 ---------------------- X.STEP(X軸的步進控制)
//下面是簡單的步進電機控制程序,
#define EN 8 //步進電機使能端,低電平有效
#define X_DIR 5 //X軸 步進電機方向控制
#define Y_DIR 6 //y軸 步進電機方向控制
#define Z_DIR 7 //z軸 步進電機方向控制
#define X_STP 2 //x軸 步進控制
#define Y_STP 3 //y軸 步進控制
#define Z_STP 4 //z軸 步進控制
/*
//函數:step 功能:控制步進電機方向,步數。
//參數:dir 方向控制, dirPin對應步進電機的DIR引腳,stepperPin 對應步進電機的step引腳, steps 步進的步數
//無返回值
*/
void step(boolean dir, byte dirPin, byte stepperPin, int steps)
{
digitalWrite(dirPin, dir);
delay(50);
for (int i = 0; i < steps; i++) {
digitalWrite(stepperPin, HIGH);
delayMicroseconds(800);
digitalWrite(stepperPin, LOW);
delayMicroseconds(800);
}
}
void setup(){//將步進電機用到的IO管腳設置成輸出
pinMode(X_DIR, OUTPUT); pinMode(X_STP, OUTPUT);
pinMode(Y_DIR, OUTPUT); pinMode(Y_STP, OUTPUT);
pinMode(Z_DIR, OUTPUT); pinMode(Z_STP, OUTPUT);
pinMode(EN, OUTPUT);
digitalWrite(EN, LOW);
}
void loop(){
step(false, X_DIR, X_STP, 200); //X軸電機 反轉1圈,200步為一圈
step(false, Y_DIR, Y_STP, 200); //y軸電機 反轉1圈,200步為一圈
step(false, Z_DIR, Z_STP, 200); //z軸電機 反轉1圈,200步為一圈
delay(1000);
step(true, X_DIR, X_STP, 200); //X軸電機 正轉1圈,200步為一圈
step(true, Y_DIR, Y_STP, 200); //y軸電機 正轉1圈,200步為一圈
step(true, Z_DIR, Z_STP, 200); //z軸電機 正轉1圈,200步為一圈
delay(1000);
}
實驗現象:步進電機反轉一圈,停頓1秒,再正傳一圈,如此循環。
值得注意的是:在接插A4988模塊的時候注意不要插反,步進電機接線方式是:
2A ,2B 為一組(紅,綠), 1A,1B為一組(藍,黃)想改變方向,改變其中一組的位置即可,比如2A,與2B交換。
值得注意的是:在接插A4988模塊的時候注意不要插反,步進電機接線方式是:
2A ,2B 為一組(紅,綠), 1A,1B為一組(藍,黃)想改變方向,改變其中一組的位置即可,比如2A,與2B交換。
單片機源程序如下:
/***************************************************************
* 實 驗 名 :步進電機實驗
* 實驗說明 :電機啟動、停止、正轉、反轉
* 實驗平臺 :51單片機開發板
* 連接方式 :pulse接P10 DIR接P11 KYE1接P20 KYE2接P21 KYE3接P22 KYE4接P23 ENABLE接P12 MS1-3接P13-P14
* 注 意 :本例程使用了中斷定時器,中斷介紹會在下一實驗中說明
****************************************************************************/
#include <reg52.h>
#include <intrins.h>
#define FOSC 11059200L //晶振設置,默認使用11.0592M Hz
//#define FOSC 12000000L //晶振設置,使用12M Hz
//#define FOSC 24000000L //晶振設置,使用24M Hz
#define TIME_MS 1 //設定定時時間 ms ,在11.0592M晶振下,不易超過60ms
//IO接口定義
sbit pulse = P1^0;//脈沖信號
sbit Dir = P1^1; //正反轉
sbit EN = P1^2;
sbit MS1 = P1^3;
sbit MS2 = P1^4;
sbit MS3 = P1^5;
sbit KEY1 = P3^3; //啟動
sbit KEY2 = P3^4; //停止
sbit KEY3 = P3^5; //正轉
sbit KEY4 = P3^6; //反轉
//全局變量定義
unsigned char count=0;
/*******************************************************************************
* 函 數 名 :Delayms
* 函數功能 :實現 ms級的延時
* 輸 入 :ms
* 輸 出 :無
*******************************************************************************/
void Delayms(unsigned int ms)
{
unsigned int i,j;
for(i=0;i<ms;i++)
#if FOSC == 11059200L
for(j=0;j<114;j++);
#elif FOSC == 12000000L
for(j=0;j<123;j++);
#elif FOSC == 24000000L
for(j=0;j<249;j++);
#else
for(j=0;j<114;j++);
#endif
}
/*******************************************************************************
* 函 數 名 :Timer0Init
* 函數功能 :定時器0初始化
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
/*void Timer0Init()
//{
TMOD=0x01; //設置定時器0工作方式為1
TH0=(65536-FOSC/12/1000*TIME_MS)/256; TL0=(65536-FOSC/12/1000*TIME_MS)%256;
ET0=1; //開啟定時器0中斷
TR0=1; //開啟定時器
EA=1; //打開總中斷
/*///8*/
void Timer0Int() interrupt 1
{ TH0=(65536-FOSC/12/1000*8/10)/256;
TL0=(65536-FOSC/12/1000*8/10)%256;
//count++;
//if(count == 2)//1s
//{
pulse = ~pulse;//LED燈閃爍
//count = 0;
//}
}
/*******************************************************************************
* 函 數 名 :main
* 函數功能 :主函數
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
void main()
{
//Timer0Init();
EN=0;
MS1=0;
MS2=0;
MS3=0;
Dir=1;
TMOD=0x01;//定時器0 16位工作方式
TR0=1; //啟動定時器0
ET0=1; //打開定時器中斷
EA=1; //打開總中斷
while(1);
}
/******************************************************************************** 函 數 名 :Timer0Int
* 函數功能 :定時器0中斷函數 , 每隔TIME_MS ms進入
* 輸 入 :無
* 輸 出 :無
*******************************************************************************/
復制代碼
51hei.png
(2.92 KB, 下載次數: 70)
下載附件
2021-10-5 04:09 上傳
以上程序下載(內容和本網頁上的一模一樣,方便保存):
a4988a.7z
(2.65 KB, 下載次數: 64)
2021-10-5 03:47 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
hzxyy
時間:
2024-2-25 21:06
A49882.C 中代碼缺失了一部分
作者:
LLower
時間:
2025-6-5 13:39
PWM設置翻轉的頻率好像不能太高,有時候會影響到輸出的PWM波形
作者:
人若依
時間:
2025-6-5 20:44
學習一下!
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久艹av
|
天堂一区二区三区
|
日本久久福利
|
99re视频在线观看
|
中文字幕一区二区三
|
99精品国产一区二区三区
|
国产剧情一区二区三区
|
午夜av电影
|
国产一级一级毛片
|
米奇成人网
|
国产乱码精品一区二区三区中文
|
国产精品久久久亚洲
|
米奇7777狠狠狠狠视频
|
在线中文字幕av
|
一本色道精品久久一区二区三区
|
欧美一卡二卡在线
|
九九热精品视频
|
欧美一区二区久久
|
久久精品视频12
|
日韩午夜场
|
国产一区二区在线播放
|
福利视频一区二区
|
在线播放中文字幕
|
青青草国产在线观看
|
四虎伊人
|
九色视频网站
|
九九久久国产
|
成人免费黄色片
|
日韩国产黄色片
|
国产精品黄视频
|
日韩精品久久一区二区三区
|
成人av免费
|
91免费福利视频
|
成人一区二区在线
|
亚洲一区二区在线电影
|
一级毛片视频在线
|
日韩视频在线免费观看
|
日韩欧美精品一区
|
香蕉久久久
|
亚洲精品乱码久久久久久9色
|
91国内精品久久
|