文章目錄
- 日常·嘮嗑
- 一、雙線軌絲桿式升降
- 二、42步進電機
- 1、常見問題
- 2.型號引數
- 三、A4988驅動模塊
- 四、程式設計
- 1、C語言(51單片機)
- 2、Python(STM32)
- 3、Verilog(FPGA)
日常·嘮嗑
3月份在做智能剝殼機的時候,就遇到了絲杠問題,想著通過擠壓的方式把堅果的外殼壓碎,但那時候對絲杠原理還不是很理解,最后不了了之,現在省電,需要給車子做一個升降臺,再一次回到了曾經沒有攻克的難題……
一、雙線軌絲桿式升降
雙線軌絲桿式升降一般由步進電機,T8絲桿,聯軸器,上下軸承片,導軌及軸承座組成,這種組合,一般承重能力強,精度高,多用于3D列印機或者高精度機床等等,(汽修廠升降的升降機與這個結構也有異曲同工之妙)雙線軌絲桿式升降臺如下圖所示:

某寶的上的配套升降臺(有效行程1米)價格一般在400左右,較為昂貴,但是性能穩定,無需經過多次除錯就可以直接用,我做的專案,升降距離不需要太長,且要求整個機構體積較小,所以我利用零件自己組裝,
T8絲桿:

42步進電機(6線):

A4988驅動模塊:

聯軸器:

成果圖: 有點丑,不過還好經過多次測驗能用,

二、42步進電機
1、常見問題
初次接觸步進電機肯定會有很多疑問,比如4線步進電機與6線步進電機的差別,該如何接線,步進電機的電壓該怎么解決,12V可以嗎(第一次接觸,我朋友跟我說,電機功率很大,90W,并且電壓要30V,比賽要帶上電源器,我當場人就傻),像我第一次接觸就一直在糾結用什么驅動模塊(當時我了解的就只有TB6600,可是這東西太大了啊),后來了解到了拇指大的A4988一樣可以實作驅動,
2.型號引數
(42BYGH) 兩相四線步進電機,步距角為 1.8 °, 200 個脈沖轉動一圈,(這個引數很重要!!!下面寫程式需要用到)下圖為電機與模塊接線(這個圖是與Arduino接線,但是與別的板卡接線是一樣的):

三、A4988驅動模塊
A4988 是一款帶轉換器和過流保護的 DMOS 微步驅動器,該產品可在全、半、1/4、1/8 及 1/16 步進模式時操作雙極步進電動機,輸出驅動性能可達 35 V 及 ±2 ,A4988 包括一個固定關斷時間電流穩壓器,該穩壓器可在慢或混合衰減模式下作業,轉換器是 A4988 易于實施的關鍵,只要在“步進”輸入中輸入一個脈沖,即可驅動電動機產生微步,無須進行相位順序表、高頻率控制行或復雜的界面編程,A4988 界面非常適合復雜的微處理器不可用或過載的應用,
麻雀雖小五臟俱全,雖然模塊只有拇指大,我對引腳做了筆記,下面看看每個引腳的名稱及作用,

1、STEP 、 DIR 分別連接單片機的兩個控制埠; EN 可以使用單片機埠控制,也可以直接連接 GND 使能;
2、 MS1 、 MS2 、MS3 按照上一節“步進模式設定”,接高低電平,設定步進模式,來選擇不同的步距角, 設定脈沖的頻率,來控制旋轉速度,步進電機走一步是1.8度,一圈就是200步,例如使用1/16步進,則需要走3200步才等于一圈,
3、 2B 、2A 、 1A 、 1B 分別接步進電機紅、藍、黑、綠線, VMOT 、 GND 接 12V
4、左右直流電源(電壓大小更具步進電機不同,選擇合適電壓),VDD 、 GND 接 3.3V 或 5V ,
5、 sleep,reset:通常短接;
長篇大論講了一堆,主要是想讓大家看懂這個模塊的具體功能,但是實際運用中,如果,不是特別精細的控制,可以直接選擇全步進的作業方式(MS1,MS2,MS3,三個引腳全部懸空,即為全步進模式,那樣的話就只要控制STEP,DIR兩個引腳即可)
四、程式設計
1、C語言(51單片機)
#include"reg52.h"
#include <intrins.h>
sbit dir=P1^0;
sbit step=P1^1;
#define uint unsigned int
void Delay_xms(uint x);
void Delay1000us() //@11.0592MHz
{
unsigned char i, j;
_nop_();
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay_xms(uint x)
{
uint i,j;
for(i=0;i<x;i++)
for(j=0;j<112;j++);
}
void main()
{
uint x,y;
dir=1;//電機正轉
for( y = 0; y<6; y++) { //修改y值可以改變電機轉的圈數
for( x = 0; x <=200; x++) { //一個圈200個脈沖
step=1;
Delay1000us();
step=0;
Delay1000us();
}
}
Delay_xms(1500);
dir=0;//電機反轉
for( y = 0; y<6; y++) {
for( x = 0; x <=200; x++) {
step=1;
Delay1000us();//時間長短會影響電機運動
step=0;
Delay1000us();
}
}
Delay_xms(1500);
2、Python(STM32)
from pyb import Pin, delay
p_dir = Pin('Y1', Pin.OUT_PP)
p_step = Pin('Y2', Pin.OUT_PP)
while True:
p_dir.high
for y in range(0, 6):
for x in range(0, 201):
p_step.high()
pyb.udelay(1000)
p_step.low()
pyb.udelay(1000)
pyb.delay(1500)
p_dir.low
for y in range(0, 6):
for x in range(0, 201):
p_step.high()
pyb.udelay(1000)
p_step.low()
pyb.udelay(1000)
pyb.delay(1500)
3、Verilog(FPGA)
module A4988(
//input
input sys_clk, //時鐘信號50Mhz
input sys_rst_n, //復位信號
//output
output reg dir, // 電機轉動方向
output reg step //電機脈沖信號
);
endmodule
注: 3點56分,實在太困了,Verilog的程式留著下次再更新(就當留個彩蛋,哈哈哈),還有一些需要注意地方,可能一時沒想到,也留著下次一起更新,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/175261.html
標籤:其他
