有源程序加仿真
完成调试后参考第五温室控制案例,改用L298N驱动实现同样的功能
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include<reg51.h>
- #include<intrins.h>
- #define INT8U unsigned char
- #define INT16U unsigned int
- #define S1_ON() (P3 & (1<<5)) == 0x00 //正转
- #define S2_ON() (P3 & (1<<6)) == 0x00 //停转
- #define S3_ON() (P3 & (1<<7)) == 0x00 //反转
- #define Forward 0 //正转指示灯
- #define Stop 1 //停转指示灯
- #define Backward 2 //反转指示灯
- sbit M_DIR = P1^0; //方向控制
- sbit M_PWM = P1^1; //PWM调速控制
- sbit Key_INC = P3^0; //加速键
- sbit Key_DEC = P3^1; //减速键
- //------------------------------------------------------------------------
- //延时函数============================================================
- //-------------------------------------------------------------------------
- void delay_us(INT16U x)
- {
- for(; x>0; x--)
- _nop_();
- }
- //------------------------------------------------------------------------
- //主函数============================================================
- //-------------------------------------------------------------------------
- void main()
- {
- int speed = 200; //默认初始速度
- while(1)
- {
- if (S2_ON()) //切换到S2位置时表示停转
- {
- P0 = ~(1<<Stop); //停转指示灯亮
- M_DIR = 0; M_PWM = 0; //控制停转
- continue; //跳过下面的代码,提前下一秒循环
- }
- //方向控制
- if (S1_ON()) //S1合上为正向
- {
- M_DIR = 0; P0=~(1<<Forward);
- }
- else
- if (S3_ON())
- {
- M_DIR = 1; P0 = ~(1<<Backward);
- }
- //案件调速控制 //S3合上为反向
- ……………………
- …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
直流电机正反转及PWM调速控制.rar
(30.95 KB, 下载次数: 182)
|