Can A-star LV power small motor without Motor driver?

Hi,

Can the A-star 32U4 Mini LV power a small motor without a Motor driver? I want to use the 115:1 Metal Gearmotor 15.5Dx30L mm that has a stall of 0.8A.

The regulated current is 1A. The graph shows it can peak to 1.6A for a few seconds.

Are there disadvantages of doing this?

Hi.

The exact amount of current available from the 5V output pin of the A-Star Mini LV will depend on the input voltage you are using. For lower input voltages the regulator will not be able to supply close to 1.6A for any amount of time. However, with any input voltage you would probably be able to use the 5V regulator to power that motor. Please note that since the 5V line on the A-Star also powers the AVR directly, you should make sure to use proper protections to limit voltage spikes caused by the motor (e.g. capacitors, flyback diode, etc).

-Claire

In case you did not already realize it, running a motor from a constant voltage like that will mean that it will only spin in one direction at a constant speed. If you want to control the speed and direction, you would want to use a motor driver.

-Claire

For running a small motor at 1A and VIN you are better off using a Baby-Orangutan. In the pololu archive of Orangutan LV168 under resources there is an example Demo3 where you can control the motor outputs with a potmeter.
OrangutanLV168Project3.zip (28 KB)

Some time ago I dismantled an old HP printer and took out a small 12V stepper motor, I used this in a project and controlled the speed with a Baby-O. You can control the stepper motor with the M1 and M2 outputs.

Here is the code I used:

[code]// F_CPU tells util/delay.h our clock frequency
//#define F_CPU 8000000UL // Orangutan frequency (8MHz)
#define F_CPU 20000000UL // Baby Orangutan frequency (20MHz)
#include <avr/io.h>
#include <util/delay.h>

void delayms( uint16_t millis ) {
while ( millis ) {
_delay_ms( 1 );
millis–;
}
}

int main( void )
{
DDRB |= 1 << DDB3; // set pin PD1 to output
DDRD |= 1 << DDD3; // set pin PD1 to output
DDRD |= 1 << DDD5; // set pin PD1 to output
DDRD |= 1 << DDD6; // set pin PD1 to output

while ( 1 ) // FULL STEP ONLY
{

unsigned int i;

	for (i = 0; i < 25; i++)		// 25 steps forward
	{
		//Step 1 1010 D3 B3 D5 D6
		PORTD |= 1 << PORTD3;		// on
		PORTB &= ~( 1 << PORTB3 );	// off
		PORTD |= 1 << PORTD5; 		// on
		PORTD &= ~( 1 << PORTD6 );	// off
		delayms( 100 );				// delay 1000 ms

		//Step 2 0110 D3 B3 D5 D6
		PORTD &= ~( 1 << PORTD3 );	// off
		PORTB |= 1 << PORTB3; 		// on
		PORTD |= 1 << PORTD5; 		// on
		PORTD &= ~( 1 << PORTD6 );	// off
		delayms( 100 );				// delay 1000 ms

		//Step 3 0101 D3 B3 D5 D6
		PORTD &= ~( 1 << PORTD3 );	// off
		PORTB |= 1 << PORTB3; 		// on
		PORTD &= ~( 1 << PORTD5 );	// off
		PORTD |= 1 << PORTD6; 		// on
		delayms( 100 );				// delay 1000 ms

		//Step 4 1001 D3 B3 D5 D6
		PORTD |= 1 << PORTD3;		// on
		PORTB &= ~( 1 << PORTB3 );	// off
		PORTD &= ~( 1 << PORTD5 );	// off
		PORTD |= 1 << PORTD6; 		// on
		delayms( 100 );				// delay 1000 ms
	}


	for (i = 0; i < 25; i++)		// 25 steps backwards
	{
		//Step 4 1001 D3 B3 D5 D6
		PORTD |= 1 << PORTD3;		// on
		PORTB &= ~( 1 << PORTB3 );	// off
		PORTD &= ~( 1 << PORTD5 );	// off
		PORTD |= 1 << PORTD6; 		// on
		delayms( 100 );				// delay 1000 ms

		//Step 3 0101 D3 B3 D5 D6
		PORTD &= ~( 1 << PORTD3 );	// off
		PORTB |= 1 << PORTB3; 		// on
		PORTD &= ~( 1 << PORTD5 );	// off
		PORTD |= 1 << PORTD6; 		// on
		delayms( 100 );				// delay 1000 ms

		//Step 2 0110 D3 B3 D5 D6
		PORTD &= ~( 1 << PORTD3 );	// off
		PORTB |= 1 << PORTB3; 		// on
		PORTD |= 1 << PORTD5; 		// on
		PORTD &= ~( 1 << PORTD6 );	// off
		delayms( 100 );				// delay 1000 ms

		//Step 1 1010 D3 B3 D5 D6
		PORTD |= 1 << PORTD3;		// on
		PORTB &= ~( 1 << PORTB3 );	// off
		PORTD |= 1 << PORTD5; 		// on
		PORTD &= ~( 1 << PORTD6 );	// off
		delayms( 100 );				// delay 1000 ms
	}

}
return 0;

}
[/code]