給大家分享下步進電機,用ULN2003A驅動,可控制正反轉,加速和減速
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)全部資料下載地址:
51hei.png (29.18 KB, 下載次數: 72)
下載附件
2020-7-14 01:01 上傳
單片機源程序如下:
- #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;//反轉
- sbit K5 = P3^6;//啟動
- sbit K6 = P3^7;//停止
- void main( )
- {
- bit fangxiang = 1;//0是逆時針
- bit kaiqi = 0;//0是停止
- int sudu = 4;//每次步進間隔時間為 1ms * sudu,也就是最快每秒25轉
- 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 );
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載(Proteus仿真程序):
電機.rar
(180.8 KB, 下載次數: 203)
2020-7-13 10:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|