『壹』 用c語言實現對直流電機和步進電機進行正反轉控制
簡單的很,先把硬體定義清楚
『貳』 用AT89S51單片機控制步進電機用C語言編寫程序控制電機正反轉
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code p[]={0x40, 0x20, 0x10, 0x08};
void d(uint i)
{
while(i--);
}
void main()
{
uchar i;
uint j=6553;
while(j--)
{
for(i=0;i<4;i++)
{
P1=p[i];
d(65535);
}
}
while(1);
}
『叄』 51單片機中如何用c語言控制直流電機正反轉
#include"reg52.h"
#include"intrins.h"
#define unint unsigned int
#define unchar unsigned char
#define PLAY_OUT P1
unchar sec=0;
unchar min=0;
unchar count=0;
bit gj=0; //光和遙控的切換
unchar r6,r7;
bit time0=1;
bit time1=1;
sbit PLAY_Q_Q=P3^0;
sbit PLAY_Z=P3^1;
sbit PLAY_Y=P3^4;
sbit PLAY_QH=P3^5;
sbit PLAY_Q_H=P3^6;
sbit PLAY_T=P3^7;
unchar r0,r1,r2=0x00,r3=0x00,r4=0x00,r5=0x00;
unchar code TAB_Q[4]={0xf9,0xf5,0xf6,0xfa};//前進
unchar code TAB_H[4]={0xfa,0xf6,0xf5,0xf9};//後退
unchar code TAB_Y[4]={0x9f,0x5f,0x6f,0xaf};//右轉
unchar code TAB_Z[4]={0xaf,0x6f,0x5f,0x9f};//左轉
/*************************/
void intiaton(void);
void int_time3(void);
void int_time0(void);
void fanzhuan_Y(void);
void fanzhuan_Z(void);
void zhenzhuan_Q(void);
void zhenzhuan_H(void);
void zhenzhuan_AQ(void);
void zhenzhuan_AH(void);
void cankey(void);
/*************************/
delay(unint t) //0.6ms
{unint i;
for(i=55;i>t;i--) ;
}
/**************************/
delayms(unint k) //k=1延遲0.884毫秒
{unint i;
for(i=80;i>k;i--)
;
}
/*************************/
void delay238(void) //2.38ms
{
unint i,j;
for(j=125;j>0;j--)
for(i=0;i<1;i++);
}
/************************/
void intiaton(void) //初始化
{
TMOD=0x11;
TH1=0XFA;
TL1=0X56;
ET1=1;
TR1=1;
EA=1;
}
/*********************/
void int_time3() interrupt 3 using 3
{
TH1=0XFA;
TL1=0X56;
sec++;
if(sec==2)
{
sec=0;
min++;
}
}
/*************************/ //光感與按鍵控制
void cankey()
{
if(gj)
{
if(!PLAY_Q_Q)
{
count=1;
}
if(!PLAY_T)
{
count=2;
}
if(!PLAY_Q_H)
{
count=3;
}
}
if((PLAY_Z==0)||(PLAY_Y==0))
{
delayms(1);
if(PLAY_Z==0)
{
fanzhuan_Z();count=1;
}
else
{
fanzhuan_Y();count=1;
}
}
if(PLAY_QH==0)
{
delayms(10);
if(PLAY_QH==0)
{
count++;
if(count==4)
{
count=0;
}
}
while(PLAY_QH==0);
}
switch(count)
{
case 0: PLAY_OUT=0xff;break;
case 1: zhenzhuan_AQ();break;
case 2: PLAY_OUT=0xff;break;
case 3: zhenzhuan_AH();break;
default :break;
}
}
/*******************************/ //按鍵前進
void zhenzhuan_AQ(void)
{
for(r6=0;r6<4;r6++)
{
PLAY_OUT=TAB_Q[r6];
while(sec==0);
sec=0;
}
}
/*******************/ //按鍵後退
void zhenzhuan_AH(void)
{
for(r6=0;r6<4;r6++)
{
PLAY_OUT=TAB_H[r6];
while(sec==0);
sec=0;
}
}
/**********************/ //左轉
void fanzhuan_Z(void)
{
unchar i;
for(i=0;i<22;i++)
{
for(r7=0;r7<4;r7++)
{
PLAY_OUT=TAB_Z[r7];
while(sec==0);
sec=0;
}
}
cankey();
}
/**********************/ //右轉
void fanzhuan_Y(void)
{
unchar i;
for(i=0;i<22;i++)
{
for(r7=0;r7<4;r7++)
{
PLAY_OUT=TAB_Y[r7];
while(sec==0);
sec=0;
}
}
cankey();
}
/***************************/
void main()
{
intiaton();
while(1)
{
cankey();
}
這是加了感光跟按鍵控制的智能小車,是讀大一時候寫的,現在看起來呵呵。。。垃圾代碼一大堆,不過好象還可以用。
『肆』 單片機控制交流電機正反轉的C語言程序
這個很簡單,我教你怎麼玩,下面是思路和方式
思路:有三個輸入,分別是一個按鈕、兩個霍爾感測器(也就是接近開關),我用P0.0到P0.2來代替;輸出2個或以上(這看你接什麼顯示器,如果是PC的話,就不用數字量輸出,直接串口就可以了)控制正反轉的繼電器管腳用P1.0、P1.1;
PS:顯示那塊我不知道你怎麼處理,但是需要與一個全局變數轉動次數k連接起來,另外兩個輸入接近開關選用NPN感測器或用光電隔離,總之有效信號能把管腳電壓拉低就可以了,具體硬體要注意什麼,有需要就問我
現在我們來寫程序:
#include <reg51.h> //選用晶振11.0592MHz
unsigned char k=0; //k表示正反轉次數
sbit X0=P3^2; //調節按鈕
sbit X1=P1^1; //上限位接近開關信號
sbit X2=P1^2; //下限位接近開關信號
sbit Y1=P0^0; //電機上升(注意:我使用的是管腳輸出為0時候,電機運動,這樣可以避免啟動時候,單片機自復位對電機點動的影響)
sbit Y2=P0^1; //電機下降
void delay50ms(unsigned int i)
{
unsigned int j;
for (i;i>0;i--)
for(j=46078;j>0;j--);
}
main()
{
IT0=1; //下降沿觸發
EX0=1; //開P3.2外部中斷
EA=1; //總中斷開
while(1)
while(k)
{
Y1=0; //正轉
while(X1==1); //等待正轉接近開關反應
Y1=1; //正轉停
delay50ms(1); //停止時間50ms
Y2=0; //反轉
while(X2==1); //等待反轉接近開關反應
Y2=1; //反轉停
k--; //圈數減一
}
}
void counter0(void) interrupt 0
{
k++; //外部中斷控制圈數加一
//這個位置可以加你顯示程序
}
程序已經通過測試,放上去就能用,很好玩喲,呵呵
『伍』 用單片機控制步進電機正反轉,簡單易懂的C語言程序,最好帶注釋,步進電機部分電路圖如下
如果會編程這個問題實現起來比較容易。
看題主的情況應該是不太了解編程,向你推薦表控,在不會編程的情況下,可以利用中文表格設置輕松實現步進電機的正反轉。
具體參見下圖:
第1行設置由輸入端X1作為啟動,Y1輸出3萬個脈沖,脈沖頻率600赫茲(每秒600個脈沖的頻率),由於只有Y1輸出脈沖,沒有設置方向輸出端,所以電機正轉。
第3、4行由X2同時啟動兩行作為反轉,Y1輸出3萬個脈沖,頻率為800赫茲,Y1輸出脈沖的同時方向輸出端Y2同時輸出方向信號,因此,電機反轉。反轉的3萬個脈沖輸出結束後電機停止,並中止第4行方向輸出端Y2,反轉信號同時結束,反轉過程結束。
『陸』 電機正反轉程序(C語言)
1.用not 取反即可完成正反轉 2.delay改成調轉到別的程序應該可以了
『柒』 stc89c52怎樣控制直流電機正反轉的c語言程序
一般用單片機控制直流電機運轉的控制方法有兩種,一種為電平控制(可能不準確),另一種為PWM控制。如果你選用第一種,你需要為你的直流電機設計一個驅動控制模塊,建議使用簡單的H橋控制,其控制方法是單片機引腳輸出的高電平為正轉,低電平為反轉,與控制LED燈類似。如果是第二種,你也需要為其設計一個驅動控制模塊,但是控制方法是用到PWM占空比控制,相關的資料在網上很容易找到。我知道的就是這些。
『捌』 用c語言程序實現步進電機的正反轉加減速的編程
內容:1、本程序用於測試4相步進電機常規驅動
2、需要用跳帽或者杜邦線把信號輸出端和對應的步進電機信號輸入端連接起來
3、速度不可以調節的過快,不然就沒有力矩轉動了
4、按s4(設置成獨立按鍵模式)可以控制正反轉
------------------------------------------------*/
#include <reg52.h>
bit Flag;//定義正反轉標志位
unsigned char code F_Rotation[4]={0xf1,0xf2,0xf4,0xf8}; //正轉表格
unsigned char code B_Rotation[4]={0xf8,0xf4,0xf2,0xf1}; //反轉表格
/******************************************************************/
/* 延時函數 */
/******************************************************************/
void Delay(unsigned int i)//延時
{
while(--i);
}
/******************************************************************/
/* 主函數 */
/******************************************************************/
main()
{
unsigned char i;
EX1=1; //外部中斷0開
IT1=1; //邊沿觸發
EA=1; //全局中斷開
while(!Flag)
{
P0=0x71;//顯示 F 標示正轉
for(i=0;i<4;i++) //4相
{
P1=F_Rotation[i]; //輸出對應的相 可以自行換成反轉表格
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
while(Flag)
{
P0=0x7C;//顯示 b 標示反轉
for(i=0;i<4;i++) //4相
{
P1=B_Rotation[i]; //輸出對應的相
Delay(500); //改變這個參數可以調整電機轉速 ,數字越小,轉速越大
}
}
}
/******************************************************************/
/* 中斷入口函數 */
/******************************************************************/
void ISR_Key(void) interrupt 2 using 1
{
Delay(300);
Flag=!Flag; //s3按下觸發一次,標志位取反
}
『玖』 單片機控制電機正反轉動的c語言程序
首先要看你的電機是直流電機還是步進電機。直流電機就簡單了,只有兩根線,電機兩端電壓正負極改變就可以實現正轉反轉。不過要加電機驅動晶元,或者H橋電路,電機驅動晶元可以選擇L298N,加上適當的外圍電路就可以直接用單片機控制電機了。比如讓單片機P1.0 = 0,P1.1 = 1;(單片機I/0口要與電機驅動晶元的輸入腳相連)這樣的話,電機驅動晶元就會輸出一個電壓差,可以使直流電機向一個方向轉,如果使P1.0 = 1,P1.1 = 0,則電機驅動晶元會輸出一個和剛才相反的電壓,使電機向相反的方向轉動。H橋電路和電機驅動晶元的原理差不多,網上多的是。我這說的只是簡單的原理,實際中,L298N的輸入端和單片機相連的時候要加光耦隔離,否則單片機會工作不正常。步進電機就稍微復雜點,也得需要電機驅動晶元才行,只不過控制信號是按一定的規律給的,規律變了,電機轉動的方向也就變了。樓上給出的貌似是步進電機的驅動程序。