Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

3 phase ac induction motor control

Status
Not open for further replies.

hins

Newbie level 3
Joined
Nov 26, 2009
Messages
4
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Location
china
Activity points
1,336
//******************************************************** // *********** PWM DC MOTOR CONTROL ************* //******************************************************** //Controller : ATmega8 (1MHz internal Crystal) //Compiler : ICCAVR //Author : CC Dharmani, Chennai(India) //Date : Nov 2008
//******************************************************** #include <iom8v.h> #include <macros.h> #define increaseButton_PRESSED !(PIND & 0x40) #define increaseButton_OPEN (PIND & 0x40) #define decreaseButton_PRESSED !(PIND & 0x80) #define decreaseButton_OPEN (PIND & 0x80) #define DIRECTION_FORWARD !(PIND & 0x20) #define DIRECTION_REVERSE (PIND & 0x20) #define STOP_MOTOR TCCR1B = 0x00; TCCR1A = 0x00 #define START_MOTOR TCCR1B = 0x09 #define set_FORWARD TCCR1A = 0x81 #define set_REVERSE TCCR1A = 0x21 //defining macros for setting minimum and maximum PWM counter values //and step-size for controlling the voltage applied to MOSFETs base #define COUNTER_LOWER_LIMIT 0x0090 #define COUNTER_UPPER_LIMIT 0x00f8 #define STEP_SIZE 0x0008 void port_init(void) { PORTB = 0x00; DDRB = 0x06; //PWM pins OC1A & OC1B defined as outputs PORTC = 0x00; DDRC = 0x00; PORTD = 0xE0; //internal pull-up enabled for three pins connected to switches DDRD = 0x00; } //TIMER1 initialize - prescale:1 //PWM Frequency: 1KHz void timer1_init(void) { TCCR1B = 0x00; //stop TCNT1H = 0xFC; //setup TCNT1L = 0x18; OCR1A = COUNTER_LOWER_LIMIT; OCR1B = COUNTER_LOWER_LIMIT; ICR1H = 0x03; ICR1L = 0xE8; TCCR1A = 0x81; //set forward; OC1A connected, OC1B disconnected TCCR1B = 0x09; //start Timer } //call this routine to initialize all peripherals void init_devices(void) { //stop errant interrupts until set up CLI(); //disable all interrupts port_init(); timer1_init(); MCUCR = 0x00; GICR = 0x00;
TIMSK = 0x00; //timer interrupt sources SEI(); //re-enable interrupts //all peripherals are now initialized } //***** FUNCTION FOR SOFTWARE DELAY OF 1 mSEC (appx.) ******* void delay_ms(int miliSec) //for 1 Mhz crystal { int i,j; for(i=0;i<miliSec;i++) for(j=0;j<100;j++) { asm("nop"); asm("nop"); } } //************************ main *************************** void main(void) { unsigned int counter = COUNTER_LOWER_LIMIT; unsigned char dir = 0, dir1 = 0; init_devices(); while(1) { CHECK_PB: while(increaseButton_OPEN && decreaseButton_OPEN) { //loop here until any push-button is pressed if(DIRECTION_FORWARD) //check for Direction control switch status dir = 0; else dir = 1; if(dir != dir1) //chenge direction if switch position has changed { STOP_MOTOR; delay_ms(500); if(dir == 0) set_FORWARD; else set_REVERSE; START_MOTOR; dir1 = dir; } } if(increaseButton_PRESSED) //Speed-increase push-button is pressed { delay_ms(20); //key debouncing delay after key-pressed if(increaseButton_OPEN) goto CHECK_PB; while(increaseButton_PRESSED); //wait here till the push-button is kept pressed
delay_ms(20); //key debouncing delay after key released if(counter >= COUNTER_UPPER_LIMIT) //if speed is already maximum, no action counter = COUNTER_UPPER_LIMIT; else counter += STEP_SIZE; //increase speed by a fixed step OCR1A = counter; OCR1B = counter; } else //speed-decrease push-button is pressed { delay_ms(20); //key debouncing delay after key-pressed if(decreaseButton_OPEN) goto CHECK_PB; while(decreaseButton_PRESSED); //wait here till the push-button is kept pressed delay_ms(20); //key debouncing delay after key released if(counter <= COUNTER_LOWER_LIMIT) //if speed is already minimum, no action counter = COUNTER_LOWER_LIMIT; else counter -= STEP_SIZE; //reduce speed by a fixed step OCR1A = counter; OCR1B = counter; } } } //****************************** END *************************************** //**********,can anyone convert for 3 phase ac induction motor control.here only one pwm we want 3 pwm for 3 phase motor.
 

Hi friend

for 3 phase ac induction motor control,
I suggest you Microchip's PIC18F4431 Microcontroller.

This controller has 8 power control PWM for Motor control and
also MOTION FEEDBACK MODULE for Motor feedback.

Microchip also give application note for this purpose.
I attached one link from Microchip below.

**broken link removed**

Hope this is help you
Shaym
 

Status
Not open for further replies.

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top