วันอังคารที่ 24 ตุลาคม พ.ศ. 2560

Arduino 3 phase induction motor variable frequency



เศรษฐกิจปี 2560 ฟื้นฟูเศรษฐกิจ Arduino uno 3phase

ดู 3,038 ครั้ง
เผยแพร่เมื่อ 2 ต.ค. 2016
ติดตามแล้ว 43K คน
http://www.avrfreaks.net/forum/3-phas...
Arduino uno 3phase frequency driver controller for 3 phase induction motor CODE BY Tomasz Drazek Poland THANK YOU VERY MUCH SIR https://onedrive.live.com/?authkey=%2...
แสดงน้อยลง
Sompong Tungmepol
//Arduino Atmega 168 Atmega 328P 3 phase induction motor Variable Speed Controller //Code
// Complier By Arduino Version 101 Version 106 Software
//รุ่นนี้เป็นแบบ AUTO RE RUN โค๊ดนี้ใช้วอลลุ่ม 5KB ตัวเดียวทำหน้าที่ ปิด -ปิด ปรับรอบ ให้ใช้ R //4K7 ต่อ ไฟ+5Vdc แล้วต่อเข้า ขาข้างด้าน + MAX ของ VR ต่อ R 1K-10 K ต่อ เข้า A3 ของ //ATmega 168 ATmega 328 P
#define UN (400.0) //napiecie znamionowe silnika
#define FN (50.0) //czestotliwosc znamionowa silnika
#define P (UN/FN) //wsp. okreslajacy proporcje napiecia do czestotliwoci znamionowej
#define T_PWM (0.000255) //okres sygnalu PWM - ustawiony przez preskaler w licznikach
#define T_MAX (4.0) //okreslenie maksymalnego okresu napiecia wyjsciowego
#define T_MIN (0.02) //minimalny okres napiecia wyjsciowego
#define K_MAX floor(T_MAX/T_PWM) //liczba wartosci okresu dla T_MAX
#define K_MIN ceil(T_MIN/T_PWM) //liczba wartosci okresu dla T_MIN

volatile static unsigned int dlugosc_tab_sin; //zmienna zawierajaca liczbe wartosci w pelnym
//okresie napiecia wyjsciowego
static unsigned int i = 0; //zmienna pomocniacza
volatile static unsigned int licznik_glowny = 0;//zmienna wystepujaca w przerwaniu czyklicznie
//^ co okres T_PWM zwiekszajaca swoja wartosc o 1
static unsigned int next_value_sin = 0; //zmienna ktora wartosc sin nalezy obliczyc
static double t_param=100; //parametr okreslajacy okres napiecia wyjsciowego
static float t = T_PWM; //T_PWM
static float omega_t; //pulsacja napiecia wyjsciowego pomnozona przez T_PWM
static float t_out; //okres wyjsciowy napiecia
static float U_o_param; //parametr okreslajacy wielkosc napiecie wyjsciowego
//^ obliczony na podstawie t_out i U_in
static unsigned int ocr0a, ocr0b, ocr1a;//zmienne pomocnicze do przechowywania obl. wypelnien
static unsigned int ocr1b, ocr2a, ocr2b;//^
static double sin_in; //zmienna zawierajaca parametr funkcji sin
static double blad = 1; //zmienna uzyta do zatrzymania generowania napiecia przy przeciazeniu
static unsigned int analog=0; //zmienna zawierajaca zmierzona wartosc
static double U_in = 0; //zmienna przechowujนca pomiar napiecia ukladu posredniczacego
static double U_rms_max; //maksymalna aktualnie mozliwa do generacji wartosc skuteczna napiecia
static bool a=0; //zmienna logiczna do realizacji dwoch naprzemiennych pomiarow
int main()
{
io_init(); //inicjalizacja wejsc i wyjsc
timers_init(); //inicjalizacja licznikow PWM
adc_init(); //inicjalizacja przetwornika ADC
while(1) //nieskonczona petla z programem glownym
{
if(i==185) //warunek okreslajacy wejscie do funkcji zmiany
{ //parametrow napiecia wysjciowego, wywolanie co okolo 100ms
zmien_predkosc(); //funkcja zmiany parametrow napiecia wyjsciowego
i=0;
}
next_value_sin = licznik_glowny%dlugosc_tab_sin; //kolejna wartoœๆ sinusa do obliczenia
sin_in=omega_t*next_value_sin;

//obliczenie wartosci do rejestrow okreslajacych wypelnienie sygnalu wyjscioweg/
ocr0a = round(blad*(U_o_param*(sin(sin_in)+1)*254/2)+1);//pin 6
ocr0b = ocr0a - 1;
ocr1a = round(blad*(U_o_param*(sin(sin_in-2.09)+1)*254/2)+1);//pin 9
ocr1b = ocr1a - 1;
ocr2a = round(blad*(U_o_param*(sin(sin_in+2.09)+1)*254/2)+1);//pin 11
ocr2b = ocr2a - 1;

//uaktualnienie wartosci w rejestrach/
cli(); //zabronienie na obsloge przerwan na wypadek gdyby
//podczas uaktualniania wystapilo przerwanie
OCR0A = ocr0a; //pin 6
OCR0B = ocr0b; //pin 5
OCR1AL = ocr1a; //pin 9
OCR1BL = ocr1b; //pin 10
OCR2A = ocr2a; //pin 11
OCR2B = ocr2b; //pin 3
sei(); //zezwolenie na obsloge przerwan
i++;
}
}
void adc_init()
{
ADCSRA |= _BV(ADEN);//uruchomienie przetwornika
ADCSRA |= _BV(ADPS2);//ustawienie preskalera
ADCSRA |= _BV(ADPS1);//^
ADCSRA |= _BV(ADPS0);//^
ADMUX |= _BV(REFS0);// napiecie odniesienia ustawione jako napiecie zasilania
ADMUX |= ADMUX &= 0b11110000; //wybranie wejscia ADC0 do pomiaru
}
void timers_init()
{
cli(); // obsloga przerwan zabroniona
//timer0 init
TCCR0A |= _BV(COM0A1) | _BV(COM0B0) | _BV(COM0B1) | _BV(WGM00);
TCCR0B |= _BV(CS01); //preskaler 8
TIMSK0 |= _BV(TOIE0); //flaga od wartosci 0 wlaczona
//timer1 init
TCCR1A |= _BV(COM1A1) | _BV(COM1B0) | _BV(COM1B1) | _BV(WGM10);
TCCR1B |= _BV(CS11); //preskaler 8
//timer2 init
TCCR2A |= _BV(COM2A1) | _BV(COM2B0) | _BV(COM2B1) | _BV(WGM20);
TCCR2B |= _BV(CS21); //preskaler 8
//zerowanie wartosci licznik๓w
TCNT0 = 0;
TCNT1L = 0;
TCNT2 = 0;
/* licznik zlicza w g๓re do 255, nastepnie w d๓ณ: /\/\/\
przy wartosci 255 jest przerwanie przy ktorym dokonuje sie
pomiarow napiec i pradow
*/
sei(); //zezwolenie na obsloge przerwan
}
void io_init()
{
pinMode(6, OUTPUT); //OC0A
pinMode(5, OUTPUT); //OC0B
pinMode(9, OUTPUT); //OC1A
pinMode(10, OUTPUT);//OC1B
pinMode(11, OUTPUT);//OC2A
pinMode(3, OUTPUT); //OC2B
pinMode(2, INPUT);
pinMode(4, INPUT);
pinMode(12, OUTPUT);
}
ISR(TIMER0_OVF_vect) //przerwanie przy wartosci 0 licznika0
{
analog = ADC;
if(a)
{
U_in = 0.0709*analog;
ADMUX |= _BV(MUX0); //wybranie wejscia ADC1 do pomiaru pradu
}
else
{
ADMUX |= ADMUX &= 0b11110000; //wybranie wejscia ADC0 do pomiaru napiecia
if(analog>579)
{
blad = 0; //jezeli przeciazenie wylaczenie generacji napiecia
digitalWrite(12, HIGH); //zapalenie diody
}
}
ADCSRA |= _BV(ADSC);//start odczytywania pomiaru
a=a^1; //bramka XOR neguje wartosc logiczna a
licznik_glowny++;
if(licznik_glowny>=dlugosc_tab_sin) licznik_glowny = 0;
}
void zmien_predkosc()
{

t_param = map(analogRead(3),0,1023,0,100);
U_rms_max = U_in*0.62; //wartosc 0.62 wyzanczona eksperymentalnie
bool up; //zmienna logiczna, informuje o nacisnietym przycisku zwieksz czestotliwosc
bool down; //zmienna logiczna, informuje o nacisnietym przycisku zmiejsz czestotliwosc
up = digitalRead(4); //odczyt: czy nacisniety przycisk zwieksz czestotliwosc
down = digitalRead(2); //odczyt: czy nacisniety przycisk zmiejsz czestotliwosc
if(up==1) t_param--; //jezeli nacisniety przycisk zwieksz czestotliwosc to zmiejsz okres
if(down==1) t_param++; //jezeli nacisniety przycisk zmniejsz czestotliwosc to zwieksz okres
if(t_param<0) t_param=0; //zabezpieczenie przekroczenia wartosci skrajnych
if(t_param>100) t_param=100;//^
dlugosc_tab_sin = ceil((K_MAX-K_MIN)*t_param/500+K_MIN);//ilosc wartosci wypelnien w jednym okresie
t_out = T_PWM*dlugosc_tab_sin; //obliczenie okresu napiecia wyjsciowego
omega_t = t*2*PI/t_out; //obliczenie pulsacji napiecia wyjsciowego
U_o_param = (P/t_out)/U_rms_max; //obliczenie parametru okreslajacego wielkosc napiecia wyjsciowego
if(t_out>1) U_o_param = 0.5*(18.5/U_rms_max); //napi๊cie na wyjsciu przy niskiej czestotliwosci 10V
if(U_o_param>1) U_o_param=1;
//zabezpieczenie przekroczenia wartosci skrajnych
blad = 1; //jezeli przeciazenie wylaczenie generacji napiecia
digitalWrite(12, LOW); //zapalenie diody
}
แสดงน้อยลง
สมพงศ์ อินดัสเตรียล อิเล็กทรอนิคส์
การต่อกับ Arduino UNO Atmega328 ต่อตามนี้ครับ D6= UP D9= VP D11=WP D5=UN D10=VN D3=WN ในคลิปเป็นการต่อกับ MC3PHAC ครับ ดูรายละเอียด จาก คลิป ก่อนหน้านี้ ประกอบการตัดสินใจ ซื้อ นะครับ..ขอบคุณมากครับ...ที่ติดตาม..อะไหล่และอุปกรณ์ ตามคลิป มีจำหน่าย ที่ sompong industrial electronics ท่านที่จะนำไปใช้ ส่วนรวม วัด โรงเรียน โรงพยาบาล ศาสนสถาน ผมยินดี บริจาคให้ ไม่คิดมูลค่า ครับ ..ขอ อนุโมทนา..ครับ. หรือท่านที่ สนใจงานด้านนี้ เพื่อ ทำไปใช้งานส่วนตัว งานอาชีพ ที่ไม่ผิดศีล ผิดธรรม วินัย ไม่เบียดเบียน สรรพสัตว์ สรรพชีวิต งานด้านสร้างสรรค์ แต่ไม่มี เงิน พอที่จะซื้อ ได้ ผมก็ ยินดี บริจาคให้โดย ไม่คิดมูลค่า ครับ ( เท่าที่ของ พอมีอยู่นะครับ...หมดแล้วหมดเลยครับ หมดเป็น รุ่น รุ่นไป ของจากคลิปเก่า ไม่มีแล้วครับ ขอบพระคุณ และอนุโมทนา สาธุ ครับ) ลงวันที่ 24 ตุลาคม 2559 ติด ต่อทาง Email ที่ sompongindustrial@gmail.com mrsompongt@hotmai.com

TM52A หมดแล้วครับ เบอร์ใหม่ ดูจากคลิป นะครับ เป็นเบอร์ GT15J331 และ PS21244 ครับผม..https://www.youtube.com/watch?v=A9fDf...
ทดสอบPower Module GT15J331 โดยใช้มอเตอร์สามเฟสครับ....ใช้งานจริง ต้องติดตั้งบนแผ่นระบายความร้อน..และติดพัดลม..ด้วยนะครับ
https://www.youtube.com/watch?v=YfVvJ...
ระบบอินเวอร์เตอร์ inverter ใช้ร่วมกับโซล่าเซลล์ประหยัดไฟได้จริงหรือไม่ดูจากคลิปนี้ครับPOWER MODULE ควบคุมมอเตอร์สามเฟส Tm52A หมดแล้วนะครับ...วันนี้ต้องเป็นเบอร์ GT15J331 PS21244 ครับ..
TM 51 รับแรงดันไฟฟ้ากระแสตรงตั้งแต่ 24 Voltsถึง 300 Volts ครับ รับกระแสได้ 10 ถึง 15 Amps แล้วจะทำหน้าที่ เปลี่ยนเป็นไฟฟ้ากระแสตรง -ทีแรงดัน 370-375 Volts เพื่อนำไปจ่ายให้กับ PS21244 PS21963 PS219A2 GT15J331 ทำหน้าที่ขับมอเตอร์ สามเฟส 220/380 Volts สูงสุดที่ประมาณ 1/2 แรงม้า ถึง3 แรงม้าแนะนำให้ใช้ที่..1 แรงม้าครับ..บอร์ด Arduino ทำหน้าที่ สร้างและกำหนดค่าของสัญญาณ สามเฟส SINE WAVE แบบ PWM ครับ..มีจำหน่ายหลายที่ครับ ติดต่อกันเองก็แล้วกัน ถ้าหาไม่ได้ ลองโทรไปที่ 02 951 1356 และ 081-803-6553 นะครับ...LINE pornpimon 1411 หรือ ติดต่อที่ s o m p o n g i n d u s t r i a l @ g mail .com m r s o m p o n g t @h o t mail.comm ก็ได้ครับ จำหน่าย PS 21244 MITSUBISHI SEMICONDUCTOR TRANSFER-MOLD TYPE INSULATED TYPE
6 DI 15 S -050 C 6 DI 15 S-050 D TM 51 สำหรับสร้างเครื่องควบคุมมอเตอร์สามเฟส...
วิธีทำให้ TM51จ่ายแรงดันไฟฟ้า 280โวลต์ไม่เกิน320โวลต์เพื่อใช้กับ PS21244 PS21963 PS219A2 MP6501A 6DI15S-050
แสดงน้อยลง
karolina maria
hello good night, I'm experimenting with a 3-phase inverter design with arduino nano, put the program that is here on the internet, but the fault that I present is that it rotates like a stepper motor, please please me you can indicate that it may be happening thank you, karolinamarialopezjhonson@hotmail.com

hola buenas noches, estoy experimentando con un diseño de inversor trifásico con arduino nano, pongo el programa que está aquí en internet, pero la falla que les presento es que gira como un motor paso a paso, por favor, me pueden indicar que puede estar sucediendo gracias, karolinamarialopezjhonson@hotmail.com
Mani sambandam
can i use this in inverter to excite the induction generator? do you have Spwm or SVM code for 3 phase inverter?
Mani sambandam
i can use directly these code in 328? is that closed loop control?
Sompong Tungmepol
// software for direct drive motor Arduino mega2560
//Danijel Gorupec, 2015
//Edit prescaller 4khz And Sine wave For IGBT GT15J331 L6569 4 Khz PWM By Sompong Tungmepol //2/16/2017
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>



#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))





char sin_table[64]=

ไม่มีความคิดเห็น:

แสดงความคิดเห็น