分立器件的全橋電機驅動,可以驅動直流電機也可以驅動步進電機
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (59.44 KB, 下載次數: 105)
下載附件
2019-1-10 15:08 上傳
{WP~GM68O9Q~Q7A(0~VL@F8.png (48.38 KB, 下載次數: 111)
下載附件
分立器件全橋驅動
2019-1-10 14:30 上傳
0.jpg (83.28 KB, 下載次數: 103)
下載附件
2019-1-10 15:17 上傳
0.png (45.65 KB, 下載次數: 99)
下載附件
2019-1-10 15:08 上傳
H橋直流電機調速紅外單片機源程序如下:
- #include<AT89X52.H>
- #define uint unsigned int
- #define uchar unsigned char
- sbit led1=P2^4;
- sbit led2=P2^5;
- sbit led3=P2^6;
- sbit led4=P2^7;
- sbit key1=P1^0;
- sbit key2=P1^1;
- sbit key3=P1^2;
- sbit key4=P1^3;
- sbit key5=P1^4;
- sbit key6=P1^5;
- sbit zheng=P2^0;
- sbit fan=P2^1;
- sbit zhengled=P3^6;
- sbit fanled=P3^7;
- sbit zhixing=P3^5;
- uchar code table[]={0xA0,0xBB,0x62,0x2A,0x39,0x2C,0x24,0xBA,
- 0x20,0x28,0x30,0x25,0xE4,0x23,0x64,0x74};
- uint count=0,count1=0,time=0;
- uint qian,bai,shi,ge;
- uint moshi=0;
- uchar pwm=75;
- unsigned long int jishu=0,shuzhi;
- void delay(uint xms) //延時函數
- {
- int a,b;
- for(a=xms;a>0;a--)
- for(b=110;b>0;b--);
- }
- void initclock() //時鐘初始化
- {
- T2MOD=0x00;
- T2CON=0x04; /*定時器2為自動重裝定時工作模式) TR2=1 */
- RCAP2L=(65536-50000)%256; //給定時器T2裝初值
- RCAP2H=(65536-50000)/256;
- TR2=1; //打開定時器中斷1,2
- ET2=1;
- EA=1; //開中斷
- }
- void timer_init() //定時器一初始化
- {
- TMOD=0x15;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1; //開定時器零1中斷
- TR1=1; //啟動計數器1
- TH0=0X00;
- TL0=0X00;
- ET0=1; //開計數器中斷
- TR0=1; //啟動計數器器0
- EA=1; //開中斷
- }
- void jisuan() //計算時間速度距離函數
- {
- if(time==1)
- {
- jishu=10;
- jishu=TH0*256+TL0; //讀取計數器的值
- TH0=0X00;
- TL0=0X00; //重裝
- time=0;
- TF2=0;
- RCAP2H=(65536-50000)/256;
- RCAP2L=(65536-50000)%256;
- jishu=jishu*60;
- shuzhi=jishu;
- qian=jishu/1000;
- bai=jishu%1000/100;
- shi=jishu%1000%100/10;
- ge=jishu%1000%100%10;
- }
- }
- void display()
- {
- led1=0;
- P0=table[qian];
- delay(5);
- led1=1;
- led2=0;
- P0=table[bai];
- delay(5);
- led2=1;
- led3=0;
- P0=table[shi];
- delay(5);
- led3=1;
- led4=0;
- P0=table[ge];
- delay(5);
- led4=1;
- }
- void keyscan()
- {
- if(key1==0)
- {
- delay(5);
- if(key1==0)
- {
- while(!key1);
- moshi=0;
- }
- }
- if(key2==0)
- {
- delay(5);
- if(key2==0)
- {
- while(!key2);
- moshi=1;
- }
- }
- if(key3==0)
- {
- delay(5);
- if(key3==0)
- {
- EA=0;
- delay(2);
- while(!key3);
- pwm=pwm+5;
- if(pwm>=150)
- {
- pwm=145;
- }
- EA=1;
- }
- }
- if(key4==0)
- {
- delay(5);
- if(key4==0)
- {
- while(!key4);
- EA=0;
- delay(2);
- pwm=pwm-5;
- if(pwm<=5)
- {
- pwm=5;
- }
- EA=1;
-
- }
- }
- if(key5==0)
- {
- delay(5);
- if(key5==0)
- {
- while(!key5);
- timer_init();
- initclock();
- EA=1;
- delay(100);
- zhixing=0;
- }
- }
- if(key6==0)
- {
- delay(5);
- if(key6==0)
- {
- while(!key6);
- zhixing=1;
- EA=0;
- zheng=0;
- fan=0;
- jishu=0;
- }
- }
- }
- void main()
- {
- while(1)
- {
- display();
- jisuan();
- keyscan();
- if(shuzhi<1000)
- {
- zhengled=0;
- fanled=1;
- }
- if(shuzhi>2500)
- {
- zhengled=1;
- fanled=0;
- }
- if(shuzhi>=1000&&shuzhi<=2500)
- {
- zhengled=1;
- fanled=1;
- }
- }
- }
- void T1_time()interrupt 5 //定時器
- {
- TF2=0;
- RCAP2H=(65536-50000)/256;
- RCAP2L=(65536-50000)%256;
- count++;
- if(count==10)
- {
- time=1;
- count=0;
- }
- }
- void time1(void)interrupt 3 //定時器1溢出,yichu=1
- {
- TH1=(65536-1000)/256;
- TL1=(65536-1000)%256;
- count1++;
- if(count1==156)
- {
- count1=0;
- }
- if(moshi==0)
- {
-
- zheng=0;
- if(count1<pwm)
- {
- fan=0;
- }
- if(count1>=pwm)
- {
- fan=1;
- }
- }
- if(moshi==1)
- {
- fan=0;
- if(count1<pwm)
- {
- zheng=0;
- }
- if(count1>=pwm)
- {
- zheng=1;
- }
- }
- }
復制代碼
所有資料51hei提供下載:
電機驅動.zip
(5.25 MB, 下載次數: 348)
2019-1-10 14:28 上傳
點擊文件名下載附件
全橋分立器件步進電機驅動 下載積分: 黑幣 -5
|