標(biāo)題:
給大家分享下單片機(jī)步進(jìn)電機(jī)程序,ULN2003A驅(qū)動,可控制正反轉(zhuǎn),啟停加減速
[打印本頁]
作者:
jijkf
時間:
2020-7-13 10:19
標(biāo)題:
給大家分享下單片機(jī)步進(jìn)電機(jī)程序,ULN2003A驅(qū)動,可控制正反轉(zhuǎn),啟停加減速
給大家分享下步進(jìn)電機(jī),用ULN2003A驅(qū)動,可控制正反轉(zhuǎn),加速和減速
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)全部資料下載地址:
51hei.png
(29.18 KB, 下載次數(shù): 72)
下載附件
2020-7-14 01:01 上傳
單片機(jī)源程序如下:
#include "reg52.h"
#include<lcd1602.h>
#include "delay.h"
#include "motor4B.h"
sbit K1 = P3^2;//加速
sbit K2 = P3^3;//減速
sbit K3 = P3^4;//正傳
sbit K4 = P3^5;//反轉(zhuǎn)
sbit K5 = P3^6;//啟動
sbit K6 = P3^7;//停止
void main( )
{
bit fangxiang = 1;//0是逆時針
bit kaiqi = 0;//0是停止
int sudu = 4;//每次步進(jìn)間隔時間為 1ms * sudu,也就是最快每秒25轉(zhuǎn)
char str_buff[] = { "00.00" };
int speed = 0;
init_lcd();
lcd( 0, 0, "LCD_INIT" );
delay( 100 );
lcd( 0, 0, " " );
Init_Motor();
Set_Motor(kaiqi, fangxiang, sudu);
lcd( 1, 0, " reversal " );
lcd( 0, 0, "Speed: " );
lcd( 0, 12, "r/s" );
speed = 1000 / ( 1.0 * 8.0 * sudu ) * 1000;
str_buff[0] = speed / 10000 % 10 + '0';
str_buff[1] = speed / 1000 % 10 + '0';
str_buff[3] = speed / 100 % 10 + '0';
str_buff[4] = speed % 10 + '0';
lcd( 0, 6, str_buff );
while(1)
{
//////////////////////////////////////////////////////////////////////加速
if( K1 == 0 )
{
delay( 50 );
if( K1 == 0 )
{
sudu--;
if( sudu <= 3 )
{
sudu = 4;
}
speed = 1000 / ( 1.0 * 8.0 * sudu ) * 1000;
str_buff[0] = speed / 10000 % 10 + '0';
str_buff[1] = speed / 1000 % 10 + '0';
str_buff[3] = speed / 100 % 10 + '0';
str_buff[4] = speed % 10 + '0';
lcd( 0, 6, str_buff );
Set_Motor(kaiqi, fangxiang, sudu);
// while( K1 == 0 );
}
}
//////////////////////////////////////////////////////////////////////減速
if( K2 == 0 )
{
delay( 50 );
if( K2 == 0 )
{
sudu++;
if( sudu >= 60000 )
{
sudu = 60000;
}
speed = 1000 / ( 1.0 * 8.0 * sudu ) * 1000;
str_buff[0] = speed / 10000 % 10 + '0';
str_buff[1] = speed / 1000 % 10 + '0';
str_buff[3] = speed / 100 % 10 + '0';
str_buff[4] = speed % 10 + '0';
lcd( 0, 6, str_buff );
Set_Motor(kaiqi, fangxiang, sudu);
// while( K1 == 0 );
}
}
//////////////////////////////////////////////////////////////////////正
if( K3 == 0 )
{
delay( 50 );
if( K3 == 0 )
{
fangxiang = 1;
lcd( 1, 0, "Forward rotation" );
Set_Motor(kaiqi, fangxiang, sudu);
while( K3 == 0 );
}
}
//////////////////////////////////////////////////////////////////////反
if( K4 == 0 )
{
delay( 50 );
if( K4 == 0 )
{
fangxiang = 0;
lcd( 1, 0, " reversal " );
Set_Motor(kaiqi, fangxiang, sudu);
while( K4 == 0 );
}
}
//////////////////////////////////////////////////////////////////////啟
if( K5 == 0 )
{
delay( 50 );
if( K5 == 0 )
{
kaiqi = 1;
Set_Motor(kaiqi, fangxiang, sudu);
while( K6 == 0 );
}
}
//////////////////////////////////////////////////////////////////////停
if( K6 == 0 )
{
delay( 50 );
if( K6 == 0 )
{
kaiqi = 0;
Set_Motor(kaiqi, fangxiang, sudu);
while( K6 == 0 );
}
}
}
}
復(fù)制代碼
所有資料51hei提供下載(Proteus仿真程序):
電機(jī).rar
(180.8 KB, 下載次數(shù): 203)
2020-7-13 10:18 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
LRF123456
時間:
2020-9-8 10:30
提問步進(jìn)電機(jī)速度是怎么算的
作者:
LRF123456
時間:
2020-9-8 10:50
大佬,電機(jī)速度咋算的
作者:
zhangyouxiu
時間:
2020-9-24 21:18
proteus里的ULN2003A是不是有問題,為什么我一直無法用來驅(qū)動不進(jìn)電機(jī)
作者:
凈小空
時間:
2020-10-2 10:41
為什么一開始就會轉(zhuǎn)?不應(yīng)該按了開啟后才轉(zhuǎn)嗎?
作者:
hejianmin
時間:
2020-10-3 14:40
這個只能6線電機(jī),4線電機(jī)用不了
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1