用51單片機控制直流電機 實現調速等功能
電路原理圖如下:
0.png (86.4 KB, 下載次數: 103)
下載附件
2017-5-19 16:29 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載):
0.png (38.82 KB, 下載次數: 119)
下載附件
2017-5-19 16:33 上傳
0.png (71.55 KB, 下載次數: 130)
下載附件
2017-5-19 16:29 上傳
單片機源程序如下:
- #include<reg51.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit key2=P3^2;
- sbit key1=P3^1;
- sbit CLOCK=P2^4;
- sbit ST=P2^5;
- sbit EOC=P2^6;
- sbit OE=P2^7;
- sbit PWM=P3^7;
- uint temp;
- uchar start;
- void keyscan();
- void delay(uint zz);
- void main()
- {
- P3=0;P0=0xff;
- TMOD=0x02;
- TH0=0x01;
- TL0=0X00;
- IE=0x82;
- TR0=1;
- start=0;
- while(1)
- {
-
- keyscan();
- while(start)
- {
- ST=0;ST=1;ST=0; //啟動ADC0809
- while(!EOC); //查詢EOC是否為1;
- OE=1;
- temp=P1; //讀取A/D轉化的結果
- OE=0;
- PWM=1; //PWM輸出高電平
- keyscan();
- delay(temp); //正脈沖寬度
- PWM=0; //PWM輸出低電平
- keyscan();
- delay(255-temp); //低脈沖寬度
- }
- }
- }
- void keyscan()
- {
- key2=1;
- key1=1;
- if(!key1)
- {
- delay(5);
- if(!key1)
- {
- start=1;
- }
- while(!key1);
- delay(5);
- while(!key1);
- }
- key2=1;
- key1=1;
- if(!key2)
- {
- delay(5);
- if(!key2)
- {
-
- if(!PWM)PWM=1;
- else PWM=0;
- if(start)PWM=0;
- start=0;
- }
- while(!key2);
- delay(5);
- while(!key2);
- }
- }
- void clockwave() interrupt 1
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
直流電機控制proteus仿真.rar
(291.46 KB, 下載次數: 142)
2017-5-19 12:44 上傳
點擊文件名下載附件
直流電機控制proteus仿真.rar 下載積分: 黑幣 -5
|