This is an old revision of the document!


DC Motors

The operation of direct current (DC) motors, like all other electric motors, is based on simple electromagnetism. Brushed DC motors have two wire connectors, positive and negative. The rotation direction is determined by the polarity and speed by the voltage. Controlling the DC motor: One full H-bridge or two half bridges (push–pull drivers) can be used for driving one DC motor forwards and backwards. Drive circuits are available as ASICs, or can be built from separate components, such as transistors. In this lab we are using the IC L293D, which contains four push–pull drivers in one chip package.

Simple test program.

With this compied program you can test your equipment set-up. DC motor is connected to DC1 port 2 and servo motor PWM1 mootorite_testv5.hex

Connection schema

Motor drive signals from ATmega128 to the actuator board

Connecting the components

Electrical connections

  1. Make sure all power is off.
  2. Connect the actuator board and main board with a 26-pin cable.
  3. Connect the DC motor(s) to the actuator board, as shown in Figure 1.
  4. Connect the JTAG converter with the ATmega128 main board and the PC.
  5. Finally, connect the power to the main and actuator boards.

Example code

/*-------------------------------------------------------------
Title: DC motor with Actuator Board
Date: 080424
Ver.: 1.2
Compiler: AVR-GCC
Target: ATmega128
Hardware: ATmega128 controller board, Actuator board, DC motor
Author: Raivo Sell 2008
Notes: in1 PD7 in2 PD6
Optimization: -O0 (needed for delay function)
Description: Start and stop the DC motor and change the rotation direction. 
Motor is connected to the DC1 pins 3
---------------------------------------------------------------*/
#define SET(x) |= (1<<x) //set bit high bit in pin x
#define CLR(x) &=~(1<<x) //set bit low bit in pin x
#define MS (100) //defines delay
#define F_CPU 14745600UL //CPU Frequency (influences delay function)
#include <avr/io.h>
///////////////// Functions //////////////////////////////////
void dc_drive(int pin, int op){ // DC motor control function
	if (op==1) PORTD SET(pin);
	else PORTD CLR(pin);
}
 
void _delay_ms(int t){ // Delay function
	int i,j;
	for (i=0;i<t;i++){
		for (j=0;j<8000;j++){}
	}
}
///////////////// Main function //////////////////////////////////
int main (void){
	DDRD = 0xFF;// set port direction (output)
	PORTD = 0x00;// initialize port
	while(1){
		dc_drive(6,1); // Start DC motor
		dc_drive(7,0);
		_delay_ms(MS); // Wait for a second
		dc_drive(6,0); // Change direction
		dc_drive(7,1);
		_delay_ms(MS); // Wait for a second
		dc_drive(6,0); // Stop DC motor
		dc_drive(7,0);
		_delay_ms(MS); // Wait for a second
	}
}
en/examples/motors/dc.1238082597.txt.gz · Last modified: (external edit)
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0