Difference between revisions of "Blog 15"
Line 19: | Line 19: | ||
( out 1 till 4 , works different counts 0 till 3) |
( out 1 till 4 , works different counts 0 till 3) |
||
( in 1 till 4 ) |
( in 1 till 4 ) |
||
[[7FETs]] |
|||
Revision as of 12:07, 29 October 2015
BETA
Working with stepper motor
In this post I am going to connect a stepper motor with my Arduino. I want the stepper motor to turn left and right, and I want the stepper motor to turn a certain degrees.
Before programming I first need to connect the Arduino with the stepper motor.
The hardware I used:
- 7fets
- 28BYJ-48 Stepper Motor
( I also posted in Blog 14, I connected the 7fets with an lcd + display. This is something what of course is not needed )
As you can see in the image is that the stepper Motor has 5 coloured cables, that are all together in a white cube. These cables have to get connected with the 7fets. To do this you have to get 5 male to female cables. From cable blue to orange from the stepper motor it has to be connected to pin 2,4,6,8. The red cable can be put on pin 1, all the other places in the row that are dev power. ( Places where it can gets it's voltage ) ( out 1 till 4 , works different counts 0 till 3) ( in 1 till 4 ) 7FETs
Now the programming part:
I used a script named ardemo_lcd.pde, that I changed to get it working with the stepper motor.
const int SPICLK = 13; const int SPIMOSI = 11; const int SPIMISO = 12; const int SPISS = 10; void SPIinit(void) { pinMode (SPICLK, OUTPUT); pinMode (SPIMOSI, OUTPUT); pinMode (SPIMISO, OUTPUT); pinMode (SPISS, OUTPUT); digitalWrite (SPISS, 1); SPCR = _BV(SPE) | _BV(MSTR) | _BV(SPR1) | _BV(SPR0); } char SPI(char d) { // send character over SPI char received = 0; SPDR = d; while(!(SPSR & _BV(SPIF))); received = SPDR; return (received); } void SPI_startpkt (void) { digitalWrite (SPISS, 0); } void SPI_endpkt (void) { digitalWrite (SPISS, 1); } void set_var (unsigned char addr, unsigned char a, unsigned char v) { SPI_startpkt (); delayMicroseconds (WAIT1); SPI (addr); delayMicroseconds (WAIT2); SPI (a); delayMicroseconds (WAIT2); SPI (v); delayMicroseconds (WAIT2); SPI_endpkt (); } void set_var32 (unsigned char addr, unsigned char a, unsigned long v) { SPI_startpkt (); delayMicroseconds (WAIT1); SPI (addr); delayMicroseconds (WAIT2); SPI (a); delayMicroseconds (WAIT2); SPI (v); delayMicroseconds (WAIT2); SPI (v>>8); delayMicroseconds (WAIT2); SPI (v>>16); delayMicroseconds (WAIT2); SPI (v>>32); delayMicroseconds (WAIT2); SPI_endpkt (); } static unsigned char spi_7fet_addr = 0x88; void setup() { //declare the motor pins as outputs SPIinit (); Serial.begin(9600); set_var(0x88, 0x30, 0xff); } void loop(){ set_var32 (0x88, 0x42, 0x50); delay(1000); }