步进电机,走起!
本帖最后由 wjb711 于 2013-8-19 20:59 编辑参考文档http://www.codelast.com/?p=5232
所需工具 步进电机一个, 步进驱动板一个, 如图(树老大的店有售, 本人不是托, 本人用的系从树老大的店采购)
友情给个树老大的广告:步进电机购买地址
http://raspi.taobao.com/category-743871825.htm?spm=a1z10.1.w5003-3008993771.25.jm7zAq&search=y&parentCatId=646415781&parentCatName=%CA%F7%DD%AE%C5%C9%C5%E4%BC%FE&catName=%B5%E7%BB%FA%CF%E0%B9%D8&scene=taobao_shop#bd
步进电机的接法
驱动板的接法如图
口述如下
int1->gpio0
int2->gpio1
int3->gpio2
int4->gpio3
电源要接5v和接地
程序如下(抄别人的)
/* moto.c
* A program to control a stepper motor through the GPIO on Raspberry Pi.
*
* Author: Darran Zhang
*/
#include <wiringPi.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#define CLOCKWISE 1
#define COUNTER_CLOCKWISE 2
void delayMS(int x);
void rotate(int* pins, int direction);
int main(int argc,char* argv[]) {
if (argc < 4) {
printf("Usage example: ./motor 0 1 2 3 \n");
return 1;
}
/* number of the pins which connected to the stepper motor driver board */
int pinA = atoi(argv);
int pinB = atoi(argv);
int pinC = atoi(argv);
int pinD = atoi(argv);
int pins = {pinA, pinB, pinC, pinD};
if (-1 == wiringPiSetup()) {
printf("Setup wiringPi failed!");
return 1;
}
/* set mode to output */
pinMode(pinA, OUTPUT);
pinMode(pinB, OUTPUT);
pinMode(pinC, OUTPUT);
pinMode(pinD, OUTPUT);
delayMS(50); // wait for a stable status
for (int i = 0; i < 500; i++) {
rotate(pins, CLOCKWISE);
}
return 0;
}
/* Suspend execution for x milliseconds intervals.
*@param ms Milliseconds to sleep.
*/
void delayMS(int x) {
usleep(x * 1000);
}
/* Rotate the motor.
*@param pins A pointer which points to the pins number array.
*@param directionCLOCKWISE for clockwise rotation, COUNTER_CLOCKWISE for counter clockwise rotation.
*/
void rotate(int* pins, int direction) {
for (int i = 0; i < 4; i++) {
if (CLOCKWISE == direction) {
for (int j = 0; j < 4; j++) {
if (j == i) {
digitalWrite(pins, 1); // output a high level
} else {
digitalWrite(pins, 0); // output a low level
}
}
} else if (COUNTER_CLOCKWISE == direction) {
for (int j = 0; j < 4; j++) {
if (j == i) {
digitalWrite(pins, 1); // output a high level
} else {
digitalWrite(pins, 0); // output a low level
}
}
}
delayMS(4);
}
}
然后编译
g++ motor.c -o motor -lwiringPi
最后运行
./motor 0 1 2 3
马达就转起来了
前来支持。最好是树莓派使用不进店的全部过程,包括驱动起来的教程哦。貌似还没有这样的文章,有的也是杂七杂八不详细的。 看楼主的图上 好像一个驱动板就只能带一个电机??好像驱动板上就一个插口 对,一个驱动板一个电机,或者用扩展版来实现两个电机的连接,不过我没试过 老外写的脚本过于复杂难懂, 我来写个简单的
原理就是分别赋予GPIO0,1,2,3 这4个脚高电平
举例
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
然后无限循环, 就可以让步进电机持续转下去
还有要注意的事项就是
设置高电平的时候至少要3毫秒以上 也就是我写的x=3
设置低电平还原的时候, 最好是1毫秒 也就是我写的y=1
最后发现其实步进电机转的没有想象的那么快, 不想马达一样快, 差不多两秒转一圈吧
/********** motor1.c ***************/
#include <wiringPi.h>
#include <stdlib.h>
int main()
{
if( wiringPiSetup() == -1 )
exit( 1 );
pinMode( 0, OUTPUT );
pinMode( 1, OUTPUT );
pinMode( 2, OUTPUT );
pinMode( 3, OUTPUT );
int x=3;
int y=1;
for (;;)
{
digitalWrite( 0, HIGH );
delay( x );
digitalWrite( 0, LOW );
delay( y );
digitalWrite( 1, HIGH );
delay( x );
digitalWrite( 1, LOW );
delay( y );
digitalWrite( 2, HIGH );
delay( x );
digitalWrite( 2, LOW );
delay( y );
digitalWrite( 3, HIGH );
delay( x );
digitalWrite( 3, LOW );
delay( y );
}
}
/********** motor1.c ***************/
控制步进电机正传和反转
通过侦测GPIO4的高低电平来实现
脚本如下
/********** motor2.c ***************/
#include <wiringPi.h>
#include <stdlib.h>
int main()
{
if( wiringPiSetup() == -1 )
exit( 1 );
pinMode( 0, OUTPUT );
pinMode( 1, OUTPUT );
pinMode( 2, OUTPUT );
pinMode( 3, OUTPUT );
pinMode( 4, INPUT );
//增加GPIO4为判断引脚
int x=3;
int y=1;
for (;;)
{
if (digitalRead(4) == 0)
//如果是低电平,默认还是原来的转法
{
digitalWrite( 0, HIGH );
delay( x );
digitalWrite( 0, LOW );
delay( y );
digitalWrite( 1, HIGH );
delay( x );
digitalWrite( 1, LOW );
delay( y );
digitalWrite( 2, HIGH );
delay( x );
digitalWrite( 2, LOW );
delay( y );
digitalWrite( 3, HIGH );
delay( x );
digitalWrite( 3, LOW );
delay( y );
}
else
//如果是高电平, 就反转, 把顺序倒转过来,3,2,1,0 分别接高电平
{
digitalWrite( 3, HIGH );
delay( x );
digitalWrite( 3, LOW );
delay( y );
digitalWrite( 2, HIGH );
delay( x );
digitalWrite( 2, LOW );
delay( y );
digitalWrite( 1, HIGH );
delay( x );
digitalWrite( 1, LOW );
delay( y );
digitalWrite( 0, HIGH );
delay( x );
digitalWrite( 0, LOW );
delay( y );
}
}
}
/********** motor2.c ***************/
实验结果是 如果GPIO4未接, 顺时针旋转
如果GPIO4接高3.3伏,逆时针旋转。 高级,转速如何,可以做小车吗 Chuyue 发表于 2013-8-22 09:36 static/image/common/back.gif
高级,转速如何,可以做小车吗
转速约两秒一圈, 相当的慢, 不过扭力很大, 直接做小车的的话, 需要加齿轮放大转速 wjb711 发表于 2013-8-22 10:00 static/image/common/back.gif
转速约两秒一圈, 相当的慢, 不过扭力很大, 直接做小车的的话, 需要加齿轮放大转速
了解!补字补字 多谢楼主分享
页:
[1]
2