资料介绍
电路板图如下:



描述
电机驱动板 Atmega328PU 和 HC01
?
嘿,如果你正在制作一个基本的机器人设置,一个电机驱动器控制器板,它通过板载 MCU 控制电机驱动器并具有用于蓝牙连接的 HC01 BT 模块,那么这里有什么超级酷和有用的东西。
?
?
?
?
我在 PCB 上添加了四个安装孔,因此我可以添加 PCB 支架以将电机驱动器固定在电路板的顶部。使用支架是一种聪明的方法,因为我们可以使用这种方法添加多个模块,只需将它们堆叠在一排支架中即可。
我还在电路板的一侧添加了一个 HC-SR04 超声波传感器分线针,因此它可以用来制作一个避障机器人。
本文将介绍这款电机驱动器的构建过程,让我们开始吧。
?
材料
以下是我在这个项目中使用的东西-
- 定制PCB
- Atmega328PU
- 22PF 盖 0603 封装
- 16MHz晶体
- 10K电阻0603封装
- 1K电阻0603封装
- 指示灯 LED 0603 封装
- AMS1117 稳压器
- HC01 蓝牙模块
- 10uF 电容 1206 封装
- 1uF 电容 1206 封装
- IC 插座 DIP 28
- USB 微型端口
- 排针插座
- Arduino 作为用于闪烁 Atmega328PU 的 ISP 设置
- PCB 支架
- 马达
- 超声波传感器 HC-SR04
- 电池组 12V
- 电机驱动器 L298N
?
示意图
?
?
这是我准备的原理图,它由与 HC01 模块连接的最小 Atmega328PU 设置组成。在 Atmega328PU 和 HC01 之间,有一个 AMS1117 3.3V 稳压器,用于将 5V 从 VCC 降压到 3.3V 以使 HC01 工作。
我添加了一堆连接器,用于将东西与 atmega 连接,其中包括 ISP 输出,Atmega 的分支 SPI 引脚用于闪烁,然后我还添加了用于电机驱动器 IN1、IN2、IN3 和 IN4 的 CON4 与 D6、D9、D10 和D11。
我还添加了一些带 D2、D3 和 D4 的 LED 以及一个 CON4 插头引脚,用于将超声波传感器与该板连接。
完成原理图后,我将其转换为电路板文件。
?
PCB设计
?
?
至于设计,我制作了一个边缘有倒角的矩形板,还在板的中心放置了四个安装孔,这样我就可以使用 Standoffs 将 L298N 电机驱动器放置在这个 PCB 上。
?
PCBWAY
?
?
完成设计后,我在PCBWAY的报价页面上传了Gerber数据,选择了红色的阻焊层颜色,然后下单。
下订单后,我在一周内收到了 PCB,PCB 质量非常好。
?
?
?
这种形状是完全随机的,所以很难制作,但他们在制作这个 PCB 方面做得非常出色,没有任何错误。
?
一定要检查一下,以更低的价格获得出色的 PCB 服务。
?
电路板组装
?
PCB组装过程将具有以下步骤。
- 锡膏点胶
- 拾取和放置过程
- 热板回流
- 添加剩余的 THT 组件
- 刻录引导加载程序
?
?
焊膏
?
第一步是在每个元件焊盘上涂抹焊膏。
我使用了普通的 Sn-Pb 焊膏,其熔化温度为 140 至 270 °C。
添加锡膏后,我们进入下一个过程,即“PICK & Place Process”
?
挑选和放置
?
然后,我使用 ESD Tweeaser 小心地将每个 SMD 组件一个一个地挑选并放置在指定的位置,这需要大约 30 秒的时间,但结果是一个完美的 PCB,所有组件都放置在它们的位置。
?
热板回流
?
?
?
在“PICK & Place Process”之后,我小心翼翼地将整个电路板抬起并放在我的 DIY SMT Hotplate 上,它也是自制的,就像这个项目一样。
几分钟后,当热板达到焊膏熔化温度时,所有组件都将通过此热回流工艺焊接。
然后我们从热板上取下 PCB 以冷却所有组件和电路板表面。
?
?
然后我通过 USB 端口插入 5V 电源以检查 HC01 是否工作,如果设置正常工作,HC01 一侧的 LED 将闪烁。
?
THT 组件
?
?
?
最后,我们将 THT 组件添加到 PCB,它们是 Atmega 插座和接头引脚。
完成后,我们的电路就完成了!
?
Atmega328PU 通过 Arduino 作为 ISP 烧录引导加载程序
?
?
?
现在,此设置使用 Atmega328PU。Atmega328PU 有一个小十六进制文件,称为引导加载程序,类似于 BIOS。便宜的 atmega328PU 通常不附带预装的引导加载程序,因此我必须将引导加载程序刻录到 MCU 上,为此,我使用了我之前的一个项目,即基于 Arduino 的 Attiny Programmer。
?
该程序员是为将引导加载程序和 Flash 代码刻录到 Attiny MCU 中,使用上传到常规 Arduino Nano R3 的“Arduino as ISP Sketch”进行一些调整(在复位和 GND 之间添加 1uf Cap)
请参阅我以前的项目以制作此程序员并开始使用此闪烁方法。
?
我将 Atmega328PU 的 SPI 引脚通过 Arduino Nano 的 SPI 引脚通过一个插头插座连接在一起,并烧录 Atmega328PU 的引导程序,并上传 ULTRASONIC SENSO TEST SKETCH 用于测试 Atmega 芯片。
?
?
测试草图#1 超声波传感器
?
{
序列号.开始();
pinMode(trigPin,输出);
pinMode(echoPin,输入);
pinMode(LED,输出);
pinMode(led2,输出);
pinMode(led3,输出);
}
{
,距离;
数字写入(trigPin,低);
延迟微秒();
数字写入(trigPin,高);
延迟微秒();
数字写入(trigPin,低);
持续时间=脉冲输入(回声针,高);
距离 = (持续时间/ ) / ;
(距离 <= ){
数字写入(领导,高);
}
{
数字写入(领导,低);
}
(距离 < ){
数字写入(led2,高);
}
{
数字写入(led2,低);
}
(距离 < ){
数字写入(led3,高);
}
{
数字写入(led3,低);
}
延迟();
}
?
?
我将 HC-SR04 超声波传感器模块添加到其分配的 Header Pin 插座中,并上传了我制作的测试草图。当我们将任何东西放在它前面 30 厘米的距离处时,第一个 LED 会发光,通过减小其他两个 LED 发光的距离。
?
测试草图#2 BT 终端 LED 开/关
?
垃圾;
字符串输入字符串 = ;
? ? ? ? ? ? ? ? ? ?
{
?序列号.开始();? ? ? ? ? ?
?pinMode(,OUTPUT)也应如此;
}
{
? (Serial.available()){
? (Serial.available())
? ? {
? ? ? inChar = ( )Serial.read();
? ? ? inputString += inChar;? ? ? ?
? ? }
? ? Serial.println(inputString);
? ? (Serial.available() > )??
? ? {
? ? ? 垃圾 = Serial.read() ; }? ? ?
? ? }
? ? (inputString == ){? ? ? ? ?
? ? ? digitalWrite( , HIGH);??
? ? }
? ? (inputString == ){? ?
? ? ? digitalWrite( , LOW);
? ? }
? ? 输入字符串 = ;
? ? }
?
?
检查超声波传感器后,我将BT测试草图上传到MCU并使用BT终端APP与HC01连接。
通过BT终端APP向HC01发送“on”,LED点亮,发送“off”将其关闭。
?
添加带 PCB 支架的电机驱动器
在测试板工作正常后,我继续下一步,即使用 PCB Standoffs 将 L298N 电机驱动器添加到主板。
?
在主板和电机驱动器之间添加电线连接器
?
?
?
然后我在电机控制器的 VCC GND 和 5V 以及电机驱动器的 VCC GND 和 5V 之间添加了电线。
然后我在电机控制器的控制引脚和 Atmega328pu 的 Pwm 引脚之间添加了电线。
?
- ENA 和 ENB 均为高电平
- IN1 至 D6
- IN2 至 D9
- IN3 至 D10
- IN4 至 D11
设置完成,现在我们可以将电池添加到电机驱动器的 VCC 和 GND 端口,并将电机端子添加到电机驱动器的连接器。
?
添加电机和电池
?
?
?
?
最终草图 - 测试电机
?
motorLpin1 = ;
motorLpin2 = ;
motorRpin1 = ;
motorRpin2 = ;
LED1 = ;
LED2 = ;
LED3 = ;
{
序列号.开始();
Serial.flush();
pinMode(motorLpin1,输出);
pinMode(motorLpin2,输出);
pinMode(电机Rpin1,输出);
pinMode(电机Rpin2,输出);
pinMode(LED1,输出);
pinMode(LED2,输出);
pinMode(LED3,输出);
}
{
字符串输入= ;
(Serial.available()){
输入+=()Serial.read();
延迟();
}
(输入== ){
马达停止();
}
(输入== ){
马达前进();
}
(输入== ){
电机后退();
}
(输入== ){
左电机();
}
(输入== ){
右电机();
}
}
{
数字写入(motorLpin1,HIGH);
数字写入(motorLpin2,LOW);
数字写入(motorRpin1,HIGH);
数字写入(电机Rpin2,低);
数字写入(LED1,高);
数字写入(LED2,低);
数字写入(LED3,低);
}
{
数字写入(motorLpin1,LOW);
数字写入(motorLpin2,HIGH);
数字写入(电机Rpin1,低);
数字写入(motorRpin2,HIGH);
数字写入(LED1,低);
数字写入(LED2,高);
数字写入(LED3,低);
}
{
数字写入(motorLpin1,HIGH);
数字写入(motorLpin2,LOW);
数字写入(电机Rpin1,低);
数字写入(motorRpin2,HIGH);
数字写入(LED1,低);
数字写入(LED2,低);
数字写入(LED3,高);
}
{
数字写入(motorLpin1,LOW);
数字写入(motorLpin2,HIGH);
数字写入(motorRpin1,HIGH);
数字写入(电机Rpin2,低);
数字写入(LED1,低);
数字写入(LED2,低);
数字写入(LED3,高);
}
{
数字写入(motorLpin1,LOW);
数字写入(motorLpin2,LOW);
数字写入(电机Rpin1,低);
数字写入(电机Rpin2,低);
数字写入(LED1,低);
数字写入(LED2,低);
数字写入(LED3,低);
}
?
?
?
我将上面的草图上传到 Atmega 中,然后添加了一个带有电机驱动器连接器的齿轮直流电机,并添加了一个 12V 电池组来为整个系统供电。
为了控制电机,我正在使用与 HC01 模块连接的 BT 终端应用程序向 MCU 发送“F”表示前进,“B”表示后退。
为了停止电机,我们通过 BT 端子发送“S”,电机停止旋转。
?
下一步,做一个机器人
?
?
此电机控制器的下一步或下一步用途将是构建一个机器人,我目前正在设计一个将使用此控制器设置的机器人,敬请期待。
如果您喜欢机器人,请查看我以前的机器人项目-
?
?
?
谢谢,PCBWAY 支持这个项目,如果你需要更好的 PCB 服务以降低成本,请检查它们,我很快就会带着新项目回来。
和平
?
代码
?
|
int motorLpin1 = 6; |
?
|
int motorLpin2 = 9; |
?
|
int motorRpin1 = 10; |
?
|
int motorRpin2 = 11; |
?
|
int LED1 = 2; |
?
|
int LED2 = 3; |
?
|
int LED3 = 4; |
?
|
?
|
?
|
void setup() |
?
|
{ |
?
|
Serial.begin(9600); |
?
|
Serial.flush(); |
?
|
pinMode(motorLpin1,OUTPUT); |
?
|
pinMode(motorLpin2,OUTPUT); |
?
|
pinMode(motorRpin1,OUTPUT); |
?
|
pinMode(motorRpin2,OUTPUT); |
?
|
pinMode(LED1,OUTPUT); |
?
|
pinMode(LED2,OUTPUT); |
?
|
pinMode(LED3,OUTPUT); |
?
|
?
|
?
|
?
|
?
|
} |
?
|
?
|
?
|
void loop(){ |
?
|
String input=""; |
?
|
while(Serial.available()){ |
?
|
input+=(char)Serial.read(); |
?
|
delay(5); |
?
|
} |
?
|
?
|
?
|
if(input=="S"){ |
?
|
MotorStop(); |
?
|
} |
?
|
else if(input=="F"){ |
?
|
MotorForward(); |
?
|
} |
?
|
else if(input=="R"){ |
?
|
MotorBackward(); |
?
|
} |
?
|
else if(input=="TL"){ |
?
|
MotorLeft(); |
?
|
} |
?
|
else if(input=="TR"){ |
?
|
MotorRight(); |
?
|
} |
?
|
?
|
?
|
} |
?
|
?
|
?
|
void MotorForward(void) |
?
|
{ |
?
|
digitalWrite(motorLpin1,HIGH); |
?
|
digitalWrite(motorLpin2,LOW); |
?
|
digitalWrite(motorRpin1,HIGH); |
?
|
digitalWrite(motorRpin2,LOW); |
?
|
digitalWrite(LED1,HIGH); |
?
|
digitalWrite(LED2,LOW); |
?
|
digitalWrite(LED3,LOW); |
?
|
} |
?
|
?
|
?
|
void MotorBackward(void) |
?
|
{ |
?
|
?
|
?
|
digitalWrite(motorLpin1,LOW); |
?
|
digitalWrite(motorLpin2,HIGH); |
?
|
digitalWrite(motorRpin1,LOW); |
?
|
digitalWrite(motorRpin2,HIGH); |
?
|
digitalWrite(LED1,LOW); |
?
|
digitalWrite(LED2,HIGH); |
?
|
digitalWrite(LED3,LOW); |
?
|
} |
?
|
void MotorLeft(void) |
?
|
{ |
?
|
digitalWrite(motorLpin1,HIGH); |
?
|
digitalWrite(motorLpin2,LOW); |
?
|
digitalWrite(motorRpin1,LOW); |
?
|
digitalWrite(motorRpin2,HIGH); |
?
|
digitalWrite(LED1,LOW); |
?
|
digitalWrite(LED2,LOW); |
?
|
digitalWrite(LED3,HIGH); |
?
|
} |
?
|
void MotorRight(void) |
?
|
{ |
?
|
?
|
?
|
digitalWrite(motorLpin1,LOW); |
?
|
digitalWrite(motorLpin2,HIGH); |
?
|
digitalWrite(motorRpin1,HIGH); |
?
|
digitalWrite(motorRpin2,LOW); |
?
|
digitalWrite(LED1,LOW); |
?
|
digitalWrite(LED2,LOW); |
?
|
digitalWrite(LED3,HIGH); |
?
|
?
|
?
|
} |
?
|
void MotorStop(void) |
?
|
{ |
?
|
?
|
?
|
digitalWrite(motorLpin1,LOW); |
?
|
digitalWrite(motorLpin2,LOW); |
?
|
digitalWrite(motorRpin1,LOW); |
?
|
digitalWrite(motorRpin2,LOW); |
?
|
digitalWrite(LED1,LOW); |
?
|
digitalWrite(LED2,LOW); |
?
|
digitalWrite(LED3,LOW); |
?
|
?
|
?
|
} |
- 基于atmega328p和Arduino平台的气象站设计 3次下载
- 基于Atmega328P PU的EEPROM 1次下载
- 使用ATmega328的七段显示驱动程序
- ATmega328/168/8/48/88编程屏蔽开源
- AtMega328编程/开发板开源分享
- 用于无线电发射器HC12的带有ATmega328p的PCB
- Atmega328 led动画或vumeter开源分享
- Atmega328时钟开源分享
- 用于测试Atmega328/Arduino Uno和Atmega1284/p的板
- 最低系统ATmega328p开源
- ATMEGA 328P与L293D电机驱动器开源
- 基于ATmega328的Arduino的变频驱动器 4次下载
- ATMEGA328数据手册.英文版pdf 0次下载
- Atmega328p-pu与Atmega16A-PU区别
- Arduino Atmega328P开发板软件下载与安装 132次下载
- 电机驱动板发烫严重的原因分析 1200次阅读
- 开源电机驱动器开发方法与实现 1600次阅读
- CLN17电机驱动器的特点和应用场景 1659次阅读
- 如何利用ATmega328P构建一个可靠的LoRa设备 5495次阅读
- 如何为ATmega328P刷bootloader? 7973次阅读
- dfrobot四路电机驱动板简介 4000次阅读
- dfrobotPPM双路电机驱动板简介 2509次阅读
- 微雪电子树莓派电机驱动板介绍 3479次阅读
- 微雪电子树莓派步进电机驱动板|Stepper Motor HAT介绍 5524次阅读
- 如何采用Arduino系统板进行单片机编程 6505次阅读
- 一种用 74hc138 和 74hc595 驱动 8x8 点阵显示技术 1w次阅读
- 用Arduino Uno开发板和一块面包板就能轻松搞定这一切 2.4w次阅读
- 基于ATmega16单片机的智能快速充电机设计与实现 4520次阅读
- 74hc164驱动共阴数码管与共阳数码管_74hc164驱动源程序 1.4w次阅读
- Atmega32M1的电动工具电机驱动方案 1748次阅读
下载排行
本周
- 1山景DSP芯片AP8248A2数据手册
- 1.06 MB | 532次下载 | 免费
- 2RK3399完整板原理图(支持平板,盒子VR)
- 3.28 MB | 339次下载 | 免费
- 3TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 4DFM软件使用教程
- 0.84 MB | 295次下载 | 免费
- 5元宇宙深度解析—未来的未来-风口还是泡沫
- 6.40 MB | 227次下载 | 免费
- 6迪文DGUS开发指南
- 31.67 MB | 194次下载 | 免费
- 7元宇宙底层硬件系列报告
- 13.42 MB | 182次下载 | 免费
- 8FP5207XR-G1中文应用手册
- 1.09 MB | 178次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33566次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21549次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6656次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537798次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420027次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191187次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183279次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论