分享一个很全面的L298N光耦电机驱动给51黑电子论坛的朋友们,有步进电机的驱动 包含51单片机和Arduino示例程序,有芯片的pdf中文资料和L298N各种常见电路的原理图.
L298N模块原理图:
L298N的pdf中文资料:
L298N模块51单片机PWM调速程序:
- /*
- //利用51计时器+中断来产生PWM信号,从而实现对电机速度
- //的控制
- //程序基于51单片机,晶振11.0592M 12M都可以
- */
- #include"reg52.h"
- #define uint unsigned int
- #define uchar unsigned char
- sbit in1 = P0^0; //IN1逻辑输入端
- sbit in2 = P0^1; //IN2逻辑输入端
- sbit in3 = P0^2; //IN3逻辑输入端
- sbit in4 = P0^3; //IN4逻辑输入端
- uchar count = 0; //定义计数变量
- /****************************
- //T0初使化
- ****************************/
- void Init_timer()
- {
- TH0 = (65535-10)/256;
- TL0 = (65535-10)%256;
- TMOD = 0x01;
- TR0 = 1;
- ET0 = 1;
- EA = 1;
- }
- /****************************
- //电机速度调节,speed为速度
- //值,从0-100可调。
- //两个电机正转调速 speed值取决
- //电机速度,当定时器值小于speed
- //值的时候,电机正转,大于speed
- //值的时候,电机反转.从而达到
- //调速的目的
- ****************************/
- void motor_speed_ctl(uchar speed)
- {
- if(count<=speed)
- {
- in1 = 1;
- in2 = 0;
- in3 = 1;
- in4 = 0;
- }
- else
- {
- in1 = 0;
- in3 = 0;
- }
- }
- /****************************
- //main()主函数
- //大循环
- ****************************/
- void main()
- {
- Init_timer();
- while(1)
- {
- motor_speed_ctl(20); //电机向前行驶,速度可调节,改变括号里的值改变电机速度
- }
- }
- /****************************
- //T0计时中断
- ****************************/
- void Timer0_int()interrupt 1
- {
- TH0 = (65535-10)/256;
- TL0 = (65535-10)%256;
- count ++;
- if(count >= 100)
- {
- count = 0;
- }
- }
复制代码
Arduino示例程序小车加速运动:
- //小车前进与后退
- //时间20120902
- int PWM1=6; //ena port
- int in1=9; //IN1 port
- int in2=10; //IN2 port
- int PWM2=7; //enb port
- int in3=11; //in3 port
- int in4=12; //in4 port
- void setup()
- {
- pinMode(PWM1, OUTPUT); //定义PWM输出
- pinMode(in1, OUTPUT);
- pinMode(in2, OUTPUT);
- pinMode(PWM2, OUTPUT); //定义PWM输出
- pinMode(in3, OUTPUT);
- pinMode(in4, OUTPUT);
- }
- void advance()//前进加速
- {
- int i = 0;
- for(i=0;i<255;i++)
- {
- analogWrite(PWM1,i);
- analogWrite(PWM2,i);
- digitalWrite(in1,HIGH);
- digitalWrite(in2,LOW);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,LOW);
- delay(5);
- }
- }
- void back()//后退加速
- {
- int i = 0;
- for(i=0;i<255;i++)
- {
- analogWrite(PWM1,i);
- analogWrite(PWM2,i);
- digitalWrite(in1,LOW);
- digitalWrite(in2,HIGH);
- digitalWrite(in3,LOW);
- digitalWrite(in4,HIGH);
- delay(5);
- }
- }
- void loop()
- {
- advance();//小车匀加速前进
- delay(1000);//延迟1秒
- back();//小车匀加速后退
- delay(1000);//延迟1秒
- }
复制代码
资料下载:
L298N光耦电机驱动.rar
(898.33 KB, 下载次数: 98)
|