L298N双路驱动直流电机方案(支持PWM+正反转)
目录
写在前面(吐槽吐槽)
我想要驱动两个直流电机.
直流电机,说白了,就是那种小马达,小时候玩四驱车时那种没有正负极的马达,转速快,力矩小。
比如
我用它带一个扇叶,就能实现正反转以及通过PWM进行调速,问题在于,这样的一个马达驱动电流竟然达到了400ma,我是主控板(stm32F103ZET6正点原子精英版),在外接12v 1A的电源适配器后,提供的5v,3.3v的电源提供的负载的最大电流也只有1.2A,排除板子本身需要200ma以上,最大提供给负载也只有1A,为这电源我折腾了不少,什么dc电压扩展板,面包电源板等等,它们驱动一个电机还好,两个电机就不行了。
最后我找了我电信的同学,成功找到答案,用可充电锂电池组提供持久的放电,才真正意义上解决电源源头的问题。。
正文
本次用的是ST的L298N,就是淘宝是能找到的那种,双路直流电机驱动板
怎么用呢?它有个12v Power端口的电源输入口,实际上输入7-12v都可以,如果是在这一端输入电压,同时如果你想有一个让这个L298N提供5V电源以向外输出, 则把上图的5Venable 短接。
基于网上对这资料很杂且乱,我只能实践记录操作以验证真理。
在不拔使能A的调线帽时,测试s正转 2s截止 2s反转,为了简单测试,我用arduino来测试。
void setup(){
Serial.begin(115200);
pinMode(12,OUTPUT);
pinMode(14,OUTPUT);
}
void loop(){
digitalWrite(12,HIGH);
digitalWrite(14,LOW); //正转
delay(2000);
digitalWrite(12,LOW); //制动
digitalWrite(14,LOW);
delay(2000);
digitalWrite(12,LOW);
digitalWrite(14,HIGH); //反转
delay(2000);
}
现象正确。
在不拔控制端 也就是上图中的A ENABLE的跳线帽的情况下实现PWM去控制。
测试一个方向上转速不断增大
int A=12;
int B=14;
void setup(){
Serial.begin(115200);
pinMode(A,OUTPUT);
pinMode(B,OUTPUT);
}
void loop(){
PWM_Run_x(A,50);
PWM_Run_x(B,0);
delay(2000);
PWM_Run_x(A,75);
PWM_Run_x(B,0);
delay(2000);
PWM_Run_x(A,95);
PWM_Run_x(B,0);
delay(2000);
PWM_Run_x(A,125);
PWM_Run_x(B,0);
delay(2000);
PWM_Run_x(A,165);
PWM_Run_x(B,0);
delay(2000);
PWM_Run_x(A,205);
PWM_Run_x(B,0);
delay(2000);
PWM_Run_x(A,0);
PWM_Run_x(B,0);
delay(2000);
}
void PWM_Run_x(int pin,int val){
analogWrite(pin, val);
}
现象正确
然后拔了A ENABLE ,则直接就不转了。这与网上的资料是有出入。
比如以下查到的资料。
最后
今天是中秋节,各位中秋快乐。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?