有源程序加仿真
完成調(diào)試后參考第五溫室控制案例,改用L298N驅(qū)動實現(xiàn)同樣的功能
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (19.53 KB, 下載次數(shù): 46)
下載附件
2018-1-2 03:23 上傳
0.png (15.63 KB, 下載次數(shù): 44)
下載附件
2018-1-2 03:22 上傳
單片機源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define INT8U unsigned char
- #define INT16U unsigned int
- #define S1_ON() (P3 & (1<<5)) == 0x00 //正轉(zhuǎn)
- #define S2_ON() (P3 & (1<<6)) == 0x00 //停轉(zhuǎn)
- #define S3_ON() (P3 & (1<<7)) == 0x00 //反轉(zhuǎn)
- #define Forward 0 //正轉(zhuǎn)指示燈
- #define Stop 1 //停轉(zhuǎn)指示燈
- #define Backward 2 //反轉(zhuǎn)指示燈
- sbit M_DIR = P1^0; //方向控制
- sbit M_PWM = P1^1; //PWM調(diào)速控制
- sbit Key_INC = P3^0; //加速鍵
- sbit Key_DEC = P3^1; //減速鍵
- //------------------------------------------------------------------------
- //延時函數(shù)============================================================
- //-------------------------------------------------------------------------
- void delay_us(INT16U x)
- {
- for(; x>0; x--)
- _nop_();
- }
- //------------------------------------------------------------------------
- //主函數(shù)============================================================
- //-------------------------------------------------------------------------
- void main()
- {
- int speed = 200; //默認初始速度
- while(1)
- {
- if (S2_ON()) //切換到S2位置時表示停轉(zhuǎn)
- {
- P0 = ~(1<<Stop); //停轉(zhuǎn)指示燈亮
- M_DIR = 0; M_PWM = 0; //控制停轉(zhuǎn)
- continue; //跳過下面的代碼,提前下一秒循環(huán)
- }
- //方向控制
- if (S1_ON()) //S1合上為正向
- {
- M_DIR = 0; P0=~(1<<Forward);
- }
- else
- if (S3_ON())
- {
- M_DIR = 1; P0 = ~(1<<Backward);
- }
- //案件調(diào)速控制 //S3合上為反向
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼
所有資料51hei提供下載:
直流電機正反轉(zhuǎn)及PWM調(diào)速控制.rar
(30.95 KB, 下載次數(shù): 182)
2018-1-1 16:44 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|