|
本帖最后由 freeLabs 于 2016-2-25 20:08 编辑
简介
如果你想接近免费使用下面介绍的这款驱动芯片的话,可以关注我另外一片帖子--[url=freeLabs--自由实验室-只需押金,就能享受硬件和指导服务 freeLabs--自由实验室-只需押金,就能享受硬件和指导服务
如果你有兴趣的话,请不要觉得有什么,请放心联系我
未完待续
文章状态:未完成,欢迎讨论你在学习中遇到的问题
我们可能使用其他的驱动芯片驱动步进电机的情况比较多,经常看到的是使用ULN2003,还有一些专用的步进电机驱动芯片,这里我使用TB6612FNG来驱动的话,是因为自己手头上刚好有这款芯片,所以就拿着试了一下,发现是可以的,因为步进电机大都是脉冲控制工作方式的。
下面上面是TB6612FNG直流电机的驱动芯片但是这里用作一个步进电机驱动
这个驱动芯片的特点就是使电流可以达到平均电流1.2A,最大电流能够达到3A。所以用来驱动这款步进电机老化电流是足够的。
需要使用到的硬件和接线
1. arduino promini控制板,这款主板是Arduino系列最基本的一块控制板!如果你手头上还有其他的控制板的话,是完全可以的跑下面的代码的。
2. Tb6612FNG 驱动板,或者其他双H桥直流驱动芯片;
3. 若干的杜邦线;母头对母头,具体具体要看你手头上的,一个硬件端子接口的要求,
4.外接的电源,这里我选用的是5V开关电源,因为这款步进电机要求的电压就是5V;
5. 28BYJ-48 步进电机,这是一款非常基础的步进电机,体积很小,扭矩很小,淘宝上这款步进电机卖的比较便宜也非常热销,
这里接线有点乱了,因为这事跟我当时在测试的时候拍下来图片,所以只能将就着先看一下后面我会用fritzing画出来详细的接线图,不过现在你可以在下面arduino源代码注释里面可以找到一些接线的细节;- /*
- * Arduino Pin TB6612FNG
- * 3 PWMA
- * 7 AIN1
- * 8 AIN2
- * 5 PWMB
- * 10 BIN1
- * 11 BIN2
- * 4 STBY
- */
复制代码 另外和驱动板的接线方式,用步进电机高温线红色的线接五伏电源,因为有四根线是橙色,黄色,粉色,蓝色,分别接Tb6612FNG的输出口 AO1,AO2, BO1,BO2 - 步进电机线 TB6612FNG
- 橙 AO1
- 黄 AO2
- 粉 BO1
- 蓝 BO2
复制代码
arduino 程序
下面的代码,我是自己写了一个C#的上位机来调试玩的,接受一个从C#那里传过来的指令,然后让步进电机转一下,当然如果你不想这样子做的话,没关系,也完全可以自己修改一下下面的代码。
- /* arduino csharp communication demo
- * the sketch received the easy commands from the csharp application
- * it obedients the GNU General Public License v2.0 or later
- * 2016/02/21 writed by wayen in LongGang ShenZhen
- */
- int PWMA = 3;
- int AIN1 = 7;
- int AIN2 = 8;
- int PWMB = 5;
- int BIN1 = 10;
- int BIN2 = 11;
- int STBY = 4;
- int pinLed = 13;
- void setup() {
- // put your setup code here, to run once:
- pinMode(PWMA, OUTPUT);
- pinMode(PWMB, OUTPUT);
- pinMode(AIN1, OUTPUT);
- pinMode(AIN2, OUTPUT);
- pinMode(BIN1, OUTPUT);
- pinMode(BIN2, OUTPUT);
- pinMode(STBY, OUTPUT);
- Serial.begin(9600);
- }
- void loop() {
- // put your main code here, to run repeatedly:
- char readChar;
- while (Serial.available() > 0) //read the betys from the serial buffer
- {
- readChar = Serial.read();
- if (readChar == 'Y' || readChar == 'y') // always light the led onboard
- {
- digitalWrite(pinLed, HIGH);
- for (int i = 0; i < 48; i++)
- {
- driveStepper();
- }
- Serial.println("read Y");
- }
- else if (readChar == 'S' || readChar == 's')// blink the led onborad
- {
- digitalWrite(pinLed, LOW);
- delay(100);
- digitalWrite(pinLed, HIGH);
- delay(100);
- digitalWrite(pinLed, LOW);
- delay(100);
- digitalWrite(pinLed, HIGH);
- delay(100);
- digitalWrite(pinLed, LOW);
- Serial.println("read s");
- stopStepper();
- }
- Serial.println(readChar);
- delay(100);
- }
- }
- void stopStepper()
- {
- digitalWrite(STBY, LOW);
- }
- void stepStepper()
- {
- digitalWrite(STBY, HIGH);
- for (int i = 0; i < 4; i++)
- {
- delay(10);
- if (i == 0)
- {
- digitalWrite(AIN1, HIGH);
- digitalWrite(AIN2, LOW);
- digitalWrite(BIN1, LOW);
- digitalWrite(BIN2, LOW);
- }
- else if (i == 1)
- {
- digitalWrite(AIN1, LOW);
- digitalWrite(AIN2, HIGH);
- digitalWrite(BIN1, LOW);
- digitalWrite(BIN2, LOW);
- }
- else if (i == 2)
- {
- digitalWrite(AIN1, LOW);
- digitalWrite(AIN2, LOW);
- digitalWrite(BIN1, HIGH);
- digitalWrite(BIN2, LOW);
- }
- else if (i == 3)
- {
- digitalWrite(AIN1, LOW);
- digitalWrite(AIN2, LOW);
- digitalWrite(BIN1, LOW);
- digitalWrite(BIN2, HIGH);
- }
- }
- }
- void driveStepper()
- {
- analogWrite(PWMA, 255);
- analogWrite(PWMB, 255);
- stepStepper();
- }
复制代码
下面是C#的源代码,代码里面有一些注释,晚点我再补上详细的解释,这个代码包括一些控件的使用,其中主要还是SerialPort这个控件的使用,因为只要掌握了这个控件,就能很轻松的写一些C#的上位机和Arduino通信了。也挺好玩的。
[pre lang="Csharp" line="1"]//reference url:http://www.68idc.cn/help/buildlang/ask/20150507335891.html http://www.360doc.com/content/13/0829/09/7531335_310657574.shtml
// use the
// const baudrate 9600 databits 8 parity none stopbit 1
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;
namespace cs_SerialPortCommunication
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//设置两个全局变量
SerialPort sp1 = new SerialPort();
bool flag = true;
//窗体加载的时候执行下面的语句
private void Form1_Load(object sender, EventArgs e)
{
//检查是否含有串口
string[] str = System.IO.Ports.SerialPort.GetPortNames(); ;
if (str == null) { MessageBox.Show("本机没有串口!", "Error"); return; }
//添加串口项目
foreach (string s in System.IO.Ports.SerialPort.GetPortNames())
{
//获取有多少个COM口
cbSerial.Items.Add(s);
}
//串口设置默认选择项
cbSerial.SelectedIndex = 0; //设置cbSerial的默认选项
Control.CheckForIllegalCrossThreadCalls = false;
sp1.DataReceived += new SerialDataReceivedEventHandler(sp1_DataReceived);
}
// 串口数据接受,并且显示在textbox上面
void sp1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
if (sp1.IsOpen)
{
byte[] byteRead = new byte[sp1.BytesToRead];
textBox1.Text = sp1.ReadLine();
sp1.DiscardInBuffer();
}
}
private void label1_Click(object sender, EventArgs e)
{
}
private void btn_Click(object sender, EventArgs e)
{
if (!sp1.IsOpen)
{
MessageBox.Show("请先打开串口", "Error");
return;
}
string strSendOpen = "y";
string strSendClose = "s";
//MessageBox.Show("flag = " + flag);
if (flag == true)
{
sp1.WriteLine(strSendOpen);
flag = false;
}
else
{
sp1.WriteLine(strSendClose);
flag = true;
}
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
if (!sp1.IsOpen)
{
try
{
string serialName = cbSerial.SelectedItem.ToString();
sp1.PortName = serialName;
string strBaudRate = "9600"; // 使用固定的9600波特率传输
string strDataBit = "8"; //使用8位传输
Int32 iBaudRate = Convert.ToInt32(strBaudRate);
Int32 iDataBits = Convert.ToInt32(strDataBit);
sp1.BaudRate = iBaudRate;
sp1.DataBits = iDataBits;
sp1.StopBits = StopBits.One;
sp1.Parity = Parity.None;
if (sp1.IsOpen == true)
{
sp1.Close();
}
sp1.Open();
button2.Text = "关闭串口";
}
catch (System.Exception ex)
{
MessageBox.Show("有错误产生: " + ex.Message, "Error");
return;
}
}
else {
sp1.Close();
button2.Text = "打开串口";
}
}
private void label3_Click(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
}
}
[/code]
[size]这次试验效果演示的gif动态图
因为这里有以前驱动直流电机的gif动态图
还有一个有趣的应用就是那这个驱动芯片来驱动四颗LED灯。
当然上面只是C#上位机这个工程里面的控制代码,还有一些其他的内容放在最后的帖子后面的附件里
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|