На транзистор практически любой импульсный, на двигатель - из расчета максимального тока двигателя.
sany_sch пишет:
Как организовать аппаратную защиту мосфета?
При превышении некоторого значения тока, транзистор нужно закрывать до следующего импульса, причем сделать это на логике, а не программно.
sany_sch пишет:
Почему нельзя програмно? если поставить датчик тока, и показания равны 0, тоесть двигатель стоит, то ШИМ не более 5 или 10. (найти эксперементально) . и дальше добавдляем по 1. Тогда будут исключены резкие запуски двигателя.
Потому что нет гарантии, отсутствия ошибок в программе, невозможности сбоев и что ардуина работает быстрее, чем нарастает ток.
Так номиналы считать нужно, основываясь на токе ограничения и шунте. А я их не знаю. Могу лишь заложиться на какие либо значения, что бы по образу и подобию можно было посчитать.
Если шунт 0.1 Ом, ток ограничения 5А - падение на шунте 0.5 В. Следовательно делитель на другом входе опера должен давать те же 0.5 В. Например нижний 510 Ом, верхний 4.7 кОм дадут 0.489 В, т.е. ток 4.89А. Номинал сопрота от шунта к оперу принципиального значения не имеет, например пусть будет 5-10 кОм.
Всё же решил делать на симистре. Судя по отзывам на этом сайте на постоянке с управлением на транзисторе выходит сложно. Нужен выпрямитель, сетевой фильтр, защита по току, всё это конечно можно приодолеть, я расчитывал на блок питания от копмпьютера, там всё это есть, но нашёл очень удачное решение вот здесь: http://www.cncmasterkit.ru/viewtopic.php?f=3&t=1565 Если меня это не устроит, буду делать на постоянке. Там решена проблема с delite благодаря таймерам: код самый последний в теме, правда нашёл я там две ошибки. Очень важно, что в коде есть PID регулеровка. Есть там и дисплей, у меня он как раз завалялся, думаю, что лишнем не будет если на нём будет отражаться частота вращения (стоит он не дорого). Сегодня проверил на осциллографе, ардуинка работает. Осталось наладить под свой двигатель и свой тахогенератор.
Код с исправлениями и я выбрассил из него, на мой взгляд, лишние:
// TRIAC
#define triac_control 12 // Triac control - pin
#define open_loop 13 //
//RPM control
#define sensorPin A1 // potentiometer or MACH3 - pin
//Power
#define powerOn 4 // manual motor switch - pin
//Zero Detect
#define zero_detect 2 //Zero detect - pin
// when using values in the main routine and IRQ routine must be volatile value
volatile byte zero_byte = LOW; // declare IRQ flag
// HIGH = 1, LOW = 0
// HALL SENSOR
#define hallsensor 3 // hall or optical sensor pin
#define hallsensor2 A4 // to check signal on hall or optical sensor pin
unsigned int rpmcount;
unsigned int rpm;
unsigned long timeold;
unsigned long time1;
//LCD
//LiquidCrystal::LiquidCrystal(rs, enable, d0, d1, d2, d3)
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(5, 6, 7, 8, 9, 10);
//INTERRUPT
#include <avr/io.h>
#include <avr/interrupt.h>
#define PULSE 24 // pulse length on triac control pin
//in timer cycles (1/64 prescalar=> 4us per cycle=>96us)
// PID
#include <PID_v1.h>
//Define Variables we'll be connecting to
double Setpoint, Input, Output;
//Define the aggressive and conservative Tuning Parameters
//double consKp=4, consKi=0.2, consKd=1;
//double consKp=0.4, consKi=0.001, consKd=1;
//double consKp=4, consKi=0.2, consKd=1;
//double consKp=1, consKi=0.4, consKd=0.01; //100% work
//double consKp=0.4, consKi=0.001, consKd=1;
double consKp=1, consKi=0.4, consKd=0.01;
//Specify the links and initial tuning parameters
PID myPID(&Input, &Output, &Setpoint, consKp, consKi, consKd, DIRECT);
int sensorValue=0;
unsigned int analogValue=0;
unsigned int delayValue=8000;
unsigned int rpmmin = 6000; // Minimum and max rpm for the motor
unsigned int rpmmax = 35000;
unsigned int analogmin = 2400; // analogmin and analogmax are the range of delay
unsigned int analogmax = 6000;// time and fot each motor must be determined empirically
void setup() {
//Triac control setup
pinMode(triac_control, OUTPUT);
digitalWrite(triac_control, 0); // triac and LED off
pinMode(open_loop, INPUT);
digitalWrite(open_loop, 1);
//Power switch
pinMode(powerOn, INPUT);
digitalWrite(powerOn, 1); // pull up on
//Zero detect
pinMode(zero_detect, INPUT);
digitalWrite(zero_detect, 1); // pull up on
attachInterrupt(0, zero_fun, FALLING); // interrupt 0 digital pin 2 connected ZC circuit
// Hall sensor
pinMode(hallsensor2, INPUT);
pinMode(hallsensor, INPUT);
digitalWrite(hallsensor, 1); // pull up on
attachInterrupt(1, rpm_fun, FALLING); // interrupt 1 digital pin 3 connected hall sensor
rpmcount = 0;
rpm = 0;
timeold = 0;
// LCD detect
lcd.begin(16,2); // initialize the lcd
lcd.home (); // go home
lcd.print(" Hello ");
lcd.setCursor ( 0, 1 ); // go to the next line
lcd.print (" GOOD LUCK ");
delay(1000);
lcd.clear();
// set up TIMER1
OCR1A = 100; //initialize the comparator
TIMSK1 = 0x03; //enable comparator A and overflow interrupts
TCCR1A = 0x00; //timer control registers set for
TCCR1B = 0x00; //normal operation, timer disabled
// Serial.begin(9600);
//PID
Input = rpm;
Setpoint = analogValue;
//turn the PID on
myPID.SetMode(AUTOMATIC);
myPID.SetOutputLimits(analogmin,analogmax); //usage of this parameters instead of
// rpmmin and rpmmax lets use only one mapping
// in PID
}
void loop()
{
//motor switch and indicator = ON/OFF
if (!digitalRead(powerOn)) // manual or by PC
{
// digitalWrite(powerIndicator, 1);
zero_byte=HIGH;
///////////////RPM counter ///////////////////
//////////////////////////////////////////////////////////////
if ((millis()-timeold) >= 250)
{
//Update RPM every 250 millis, increase this for better RPM resolution,
//decrease for faster update
//rpm = 60*1000/(millis() - timeold)*rpmcount;
unsigned long time = millis() - timeold;
float time_in_sec = (float)time / 1000;
float impuls_time = (float)rpmcount / time_in_sec;
rpm = (int)impuls_time*60;
rpmcount = 0; //reset
timeold = millis(); //reset time
}
//#######################PID ###############################
//##########################################################
analogValue = analogRead(sensorPin);
int analogLevel = map(analogValue,23,833, analogmin,analogmax);
//here we convert the voltage on pot to delay value
// 23-833 is the range of voltages that I got from my pot (in 0-1023 scale)
analogValue = analogLevel;
if (digitalRead(open_loop)==1)
{ Input = map(rpm, rpmmin,rpmmax,analogmin,analogmax);
// Here we put correspondance between rpm and delay values)
Setpoint = analogValue;
myPID.Compute();
analogValue = Output;
}
analogValue = analogmax-analogValue+analogmin;
// this inverts the delay values- higher rpm corrsponds to shorter delay times.
if (analogValue > analogmax)
{analogValue = analogmax;}
if (analogValue < analogmin)
{analogValue = analogmin;}
delayValue=analogValue; // we need this as during a cycle of PID
//calculations analogvalue changes several times
//??????????????????TRIAC delay control ???????????????????
OCR1A = delayValue/4;
//**************indicator ************************
if (rpm < 10)
{
lcd.setCursor ( 0, 0 );
lcd.print(" ");
lcd.print (rpm);}
if (10<= rpm && rpm < 100)
{
lcd.setCursor ( 0, 0 );
lcd.print(" ");
lcd.print (rpm);}
if (100<= rpm &&rpm < 1000)
{
lcd.setCursor ( 0, 0 );
lcd.print(" ");
lcd.print (rpm); }
if (1000<= rpm && rpm < 10000)
{
lcd.setCursor ( 0, 0 );
lcd.print(" ");
lcd.print (rpm);
}
if (10000<= rpm)
{
lcd.setCursor ( 0, 0 );
lcd.print (rpm);}
lcd.setCursor ( 7, 0 );
lcd.print ("RPM");
//////// output power indicator ///////////////////////////////
// max power 13 bars min power bars
lcd.setCursor ( 0, 1 );
lcd.print(" ");
lcd.setCursor ( 0, 1 );
int Level = map(delayValue,analogmin,analogmax, 13, 0);
// if the array element's index is less than ledLevel,
// turn the pin for this element on:
for (int bar = 0; bar < 13; bar++) {
if (bar < Level) {lcd.print(0);}
}
}
else
// when motor is OFF, the display allows to check the input of Hall sensor
//(or optical level)
{
// digitalWrite(powerIndicator, 0);
zero_byte=LOW;
if (millis()-time1 >=10)
{ sensorValue = analogRead(hallsensor2);
//lcd.setCursor ( 0, 1 );
//lcd.print(" ");
lcd.clear();
lcd.setCursor ( 0, 1 );
int sensLevel = map(sensorValue,20,1000, 0, 13);
// values 20,1000 is the output voltage range of sensor in 0-1023 scale (0-5V),
// change them according to your sensor's output
for (int sbar = 0; sbar < 13; sbar++) {
if (sbar < sensLevel) { lcd.print(0);}
}
time1=millis();
}
}
} // end of loop
//Interrupt Service Routines
ISR(TIMER1_COMPA_vect) //comparator match
{ digitalWrite(triac_control, 1); //triac on;
TCNT1 = 65536-PULSE; //trigger pulse width = PULSE
}
ISR(TIMER1_OVF_vect) //timer1 overflow
{
digitalWrite(triac_control, 0); //turn off triac gate
TCCR1B = 0x00; //disable timer stop unintended triggers
}
void zero_fun() //zero detect
{if (zero_byte)
{ TCCR1B=0x03; //start timer with divide by 64 input
TCNT1 = 0; //reset timer - count from zero
}
}
void rpm_fun()
{
rpmcount++;
//Each rotation, this interrupt function is run
}
Правда до конца с кодом ещё не разобрался. Например не пойму куда подключён pin d13
А я продолжу мучить транзисторы. В силовую цепь, по совету Будимира, поставлено сопротивление 0,05 Ом 5 Ватт и поставлен датчик тока 20А который ограничит ШИМ при отсутствии нагрузки. И отключит транзистор при повышенной нагрузке.
В программе избавлюсь от delay . Сброс ШИМ сделаю без задержек, а нарастание по количеству циклов. Например за 20 циклов ШИМ +1. От количества циклов будет зависить плавность пуска.
Пробуй, но я боюсь, что индукция двигателя при разных частотах будет выдавать сюрпризы. Тут и на 50 герцах, паразитные гармоники прут. Я так и не разобрался, - почему даже на симистрах двигатель иногда дёргается, хотя судя по осциллограмме сигнал чистый.
Пробуй, но я боюсь, что индукция двигателя при разных частотах будет выдавать сюрпризы. Тут и на 50 герцах, паразитные гармоники прут. Я так и не разобрался, - почему даже на симистрах двигатель иногда дёргается, хотя судя по осциллограмме сигнал чистый.
Не знаю, ищите, у меня не дёргаются, работают чисто. На лобзиковом станке раньше дёргался, закрепил лучше таходатчик, он там самодельный, и уже год всё отлично. Пользуюсь очень часто.
Не знаю, ищите, у меня не дёргаются, работают чисто. На лобзиковом станке раньше дёргался, закрепил лучше таходатчик, он там самодельный, и уже год всё отлично. Пользуюсь очень часто.
На двигателе штатный таходатчик, разобрал, посмотрел, вроде ломаться нечему. Но проблема одна, что на тда, что на ардуино, иногда может набирать обороты, когда от него этого и не требуется. Возможно дело в двигателе, я грешу на индуктивность, может межвитковое замыкание, пока не пойму.
На двигателе штатный таходатчик, разобрал, посмотрел, вроде ломаться нечему. Но проблема одна, что на тда, что на ардуино, иногда может набирать обороты, когда от него этого и не требуется. Возможно дело в двигателе, я грешу на индуктивность, может межвитковое замыкание, пока не пойму.
Давайте думать. Допустим, по каким -то причинам двигатель начал при той-же нагрузке и при том -же напряжении начал вращаться быстрее. Таходатчик сразу отработает это и подаст сигнал И плата, без разницы какая, сбросит питание. Обороты упадут.
Сгоревшие движки обычно продолжают вращатся. И данным платам, без разницы сгоревший двигатель или нет. Она продолжает поддерживать обороты, главное чтоб симистор выдержал нагрузку.
Основная причина набора оборотов неправильные показания таходатчика. У вас тахогенератор или датчик Холла? Попробуйте посадить магнит помимо винта ещё на силикон. И поставить датчик Холла.
Сделал небольшое дополнение, на мой взгляд полезное. При достижении ШИМ максимального значения загорается светодиод и сигнализирует, что большего из двигателя не "выжать".
Теперь вопрос. При экстренной остановке остаются последние показания прерываний. Как сбросить значение при отсутствии прерываний?
Сейчас просто раз в секунду, после вывода значений на экран, делаю принудительный сброс. Но понимаю, что это не правильно.
Давайте думать. Допустим, по каким -то причинам двигатель начал при той-же нагрузке и при том -же напряжении начал вращаться быстрее. Таходатчик сразу отработает это и подаст сигнал И плата, без разницы какая, сбросит питание. Обороты упадут.
Логично, обороты у меня скакали когда датчик был отключён. Но при маленьком показании потенциометра.
sany_sch пишет:
У вас тахогенератор или датчик Холла? Попробуйте посадить магнит помимо винта ещё на силикон. И поставить датчик Холла.
ТДА без таходатчика просто не запускается. Или это у вас на контроллере так было?
Было и на ардуино и tda, но с tda разобрался после того, как поменял мотор, стал работать стабильно. С ардуино разбираюсь. Оказывается прёт, какаято наводка. С таходатчика сигнал идёт чистый, а ардуино плюсует к сигналу 50 герц. Сейчас ставлю нормальное питание и тыкаю конденсаторы, пока вроде помогает. Пытаюсь разобраться с pid регулятором плавает сильно частота вращения ротора. В общем процесс идёт. А у Вас как? Двигатель работает стабильно?
И да и нет. на холостых, без нагрузки, обороты очень плавают. А при нагрузе, средней, почти стабильно.
Думаю, проблема в том, что на постоянке у таких движков присутствует так называемый "разнос". Движок, на одном напряжении, всё время набирает обороты. Разбираюсь.
Ещё не получается с датчиком тока. Из-за ШИМа показания скачут. Наверное нужен кондёр для сглаживания и усреднения. Не знаю какой и куда поставить.
Спасибо, это уже читал, и ещё что-то про ПИД регулирование.
Тут вот что получается, Если я увеличиваю значение ШИМ быстрее чем на 1 за 20 циклов программы то мосфет "вылетает. На это знание у меня ушел пятый транзистор. Тут что-то другое. Если бы двигатель вёл себя хуже под нагрузкой, то да, нужен ПИД. Здесь же наоборот, под нагрузкой лучше чем в холостую.
Спасибо, это уже читал, и ещё что-то про ПИД регулирование.
Тут вот что получается, Если я увеличиваю значение ШИМ быстрее чем на 1 за 20 циклов программы то мосфет "вылетает. На это знание у меня ушел пятый транзистор. Тут что-то другое. Если бы двигатель вёл себя хуже под нагрузкой, то да, нужен ПИД. Здесь же наоборот, под нагрузкой лучше чем в холостую.
Мне сложно, что посоветовать в С++ я тоже не силён. Слышал, что такого рода эксперименты можно проводить не на 220 вольт, через трансформатор. Допустим 36 вольт. Наладишь, а потом можно и в сеть. Медленно, но у меня даже от 12 вольт двигатель от стиралки вращался. А то так транзисторов не накупишься.
Я уже вторую ардуинку спалил. Прут паразитные шумы, и двигатель дёргается. Бывает часто, аж свет в комнате проседает. Может и у тебя тоже самое? Не пробовал отслеживать показания тахогенератора Serial.print, что там происходит?
Не зная алгоритма работы твоего датчика, можно предположить, что одна пара полюсов дает передний фронт (допустим, HIGH), а второй задний (возвращение в LOW).
Вот и получается деление на два. Типа четкий меандр при скважности 2.
Ты осциллограмму выходную изобрази для ясности.
Цифровые датчики Холла так же разделены на: биполярные и униполярные.
Униполярные – срабатывают при наличии поля определённой полярности и отключаются при снижении индукции поля.
Биполярные – реагируют на смену полярности поля, то есть одна полярность – включает датчик, другая – выключает.
Аналоговые датчики Холла – преобразуют индукцию поля в напряжение, величина показанная датчиком зависит от полярности поля и его силы. Но опять же, нужно учитывать расстояние, на котором установлен датчик.
sany_sch, а, понял. Ну да, выводы 9 и 10 - это выходы сравнения таймера1, (oc1a/oc1b) поскольку сам таймер занят другим делом, то шим генерить он не может)
Любая переменная. какая-нибудь. Когда произошло прерывание, помимо всех нужных расчётов связаных с tic, ещё и какой нибудь переменной присваиваем значение 1. А в процессе програмы я буду на неё опираться и обнулять когда нужно.
Просто сейчас программа уже работает. и давольно сносно. Но хочу попробовать другие алгоритмы работы. Например. Пока не получен сигнал с таходатчика - ШИМ не меняем. Можно, конечно, каждый раз сравнивать тик с педидущим, но думаю, лучше просто дожидаться пока прерывание не сработает.
Когда произошло прерывание, помимо всех нужных расчётов связаных с tic, ещё и какой нибудь переменной присваиваем значение 1. А в процессе програмы я буду на неё опираться и обнулять когда нужно.
После срабатывания датчика выполняется содержание ISR (TIMER1_CAPT_vect), в любом месте можно вставить holl=1; Нужно только объявить её как volatile по аналогии с другими переменными.
Основу скетча оставил но void loop изменил под потенциометр. получилось так:
/*
AC Voltage dimmer with Zero cross detection
Author: Charith Fernanado http://www.inmojo.com
Adapted by DIY_bloke
License: Creative Commons Attribution Share-Alike 3.0 License.
Attach the Zero cross pin of the module to Arduino External Interrupt pin
Select the correct Interrupt # from the below table (the Pin numbers are digital pins, NOT physical pins: digital pin 2 [INT0]=physical pin 4 and digital pin 3 [INT1]= physical pin 5)
Pin | Interrrupt # | Arduino Platform
---------------------------------------
2 | 0 | All
3 | 1 | All
18 | 5 | Arduino Mega Only
19 | 4 | Arduino Mega Only
20 | 3 | Arduino Mega Only
21 | 2 | Arduino Mega Only
In the program pin 2 is chosen
*/
int AC_LOAD = 3; // Output to Opto Triac pin
int dimming = 128; // Dimming level (0-128) 0 = ON, 128 = OFF
void setup()
{
pinMode(AC_LOAD, OUTPUT);// Set AC Load pin as output
attachInterrupt(0, zero_crosss_int, RISING); // Choose the zero cross interrupt # from the table above
}
// the interrupt function must take no parameters and return nothing
void zero_crosss_int() // function to be fired at the zero crossing to dim the light
{
// Firing angle calculation : 1 full 50Hz wave =1/50=20ms
// Every zerocrossing thus: (50Hz)-> 10ms (1/2 Cycle) For 60Hz => 8.33ms
// 10ms=10000us
// (10000us - 10us) / 128 = 75 (Approx) For 60Hz =>65
int dimtime = (75*dimming); // For 60Hz =>65
delayMicroseconds(dimtime); // Off cycle
digitalWrite(AC_LOAD, HIGH); // triac firing
delayMicroseconds(10); // triac On propogation delay (for 60Hz use 8.33)
digitalWrite(AC_LOAD, LOW); // triac Off
}
void loop() {
int val = analogRead(A0);
int i = map(val, 0, 1024, 0, 120);
dimming=i;
}
Вопрос такой. ятак понял, что скетч под 65 герц, а нужно для 50.
И ещё будет ли он работать в паре с таходатчиком и прерываниями по ПИН 9.
Недавно сломалась кнопка регулятора оборотов дрели. Купил в магазине новую кнопку...родной найти не удалось, и расположение дырочек не поня, что куда подключать не разобрался. В целях изучения новую кнопку разобрал и собрать не смог, В общем остались запчасти...корпус, контакты и платка управления с симистором.
Решил разобрать родную кнопку..но осторожнее. Проблема оказалось не стоила выломанного яйца. Отвалилась пайка на ножке симистора. Запаял, и дрель снова плавно регулируется.
Дрель 710 ватт, служит уже много лет. Работаю всегда на регуляторе, на полную не включаю, т.к нет необходимости, да и на полной ток идет через доп.контакт, а не через регулятор.
Вывод - симистор хорошая штука для управления мощной нагрузкой.
на tda 1085 http://www.chipmaker.ru/uploads/monthly_07_2014/post/image/post-60830-089793900%201404570276.pngзащита так и устроена. Шунты R31 R33, Ток регулируется подстроечником R21, напряжения с шунта поступает на ножку 3. В общем эту часть можно взять и перенести на ардуино, подстроечника не надо, можно програмно настроить на нужное напряжение.
Можешь полностью схему нарисовать с номиналами и пояснениями? Для чайников, так сказать.
Походу кризис жанра. Вот схема защиты для "чайников"
Это для юзеров.
А для чайника нужны номеналы.
Если шунт 0.1 Ом, ток ограничения 5А - падение на шунте 0.5 В. Следовательно делитель на другом входе опера должен давать те же 0.5 В. Например нижний 510 Ом, верхний 4.7 кОм дадут 0.489 В, т.е. ток 4.89А. Номинал сопрота от шунта к оперу принципиального значения не имеет, например пусть будет 5-10 кОм.
Всё же решил делать на симистре. Судя по отзывам на этом сайте на постоянке с управлением на транзисторе выходит сложно. Нужен выпрямитель, сетевой фильтр, защита по току, всё это конечно можно приодолеть, я расчитывал на блок питания от копмпьютера, там всё это есть, но нашёл очень удачное решение вот здесь: http://www.cncmasterkit.ru/viewtopic.php?f=3&t=1565 Если меня это не устроит, буду делать на постоянке. Там решена проблема с delite благодаря таймерам: код самый последний в теме, правда нашёл я там две ошибки. Очень важно, что в коде есть PID регулеровка. Есть там и дисплей, у меня он как раз завалялся, думаю, что лишнем не будет если на нём будет отражаться частота вращения (стоит он не дорого). Сегодня проверил на осциллографе, ардуинка работает. Осталось наладить под свой двигатель и свой тахогенератор.
Код с исправлениями и я выбрассил из него, на мой взгляд, лишние:
Правда до конца с кодом ещё не разобрался. Например не пойму куда подключён pin d13
А я продолжу мучить транзисторы. В силовую цепь, по совету Будимира, поставлено сопротивление 0,05 Ом 5 Ватт и поставлен датчик тока 20А который ограничит ШИМ при отсутствии нагрузки. И отключит транзистор при повышенной нагрузке.
В программе избавлюсь от
delay
. Сброс ШИМ сделаю без задержек, а нарастание по количеству циклов. Например за 20 циклов ШИМ +1. От количества циклов будет зависить плавность пуска.А я продолжу мучить транзисторы.
Пробуй, но я боюсь, что индукция двигателя при разных частотах будет выдавать сюрпризы. Тут и на 50 герцах, паразитные гармоники прут. Я так и не разобрался, - почему даже на симистрах двигатель иногда дёргается, хотя судя по осциллограмме сигнал чистый.
А я продолжу мучить транзисторы. В силовую цепь, по совету Будимира, поставлено сопротивление 0,05 Ом 5 Ватт
0,5 ома, если это как в схеме на tda 1085
Пробуй, но я боюсь, что индукция двигателя при разных частотах будет выдавать сюрпризы. Тут и на 50 герцах, паразитные гармоники прут. Я так и не разобрался, - почему даже на симистрах двигатель иногда дёргается, хотя судя по осциллограмме сигнал чистый.
Не знаю, ищите, у меня не дёргаются, работают чисто. На лобзиковом станке раньше дёргался, закрепил лучше таходатчик, он там самодельный, и уже год всё отлично. Пользуюсь очень часто.
0,5 ома, если это как в схеме на tda 1085
да, как на ТДА. Там 2 сопротивления параллельно по 0,1 Ом. В сумме дадут 0,05Ом. Или я чего-то не понял?
да, как на ТДА. Там 2 сопротивления параллельно по 0,1 Ом. В сумме дадут 0,05Ом. Или я чего-то не понял?
Правильно, это я, что-то просчитался!
Не знаю, ищите, у меня не дёргаются, работают чисто. На лобзиковом станке раньше дёргался, закрепил лучше таходатчик, он там самодельный, и уже год всё отлично. Пользуюсь очень часто.
На двигателе штатный таходатчик, разобрал, посмотрел, вроде ломаться нечему. Но проблема одна, что на тда, что на ардуино, иногда может набирать обороты, когда от него этого и не требуется. Возможно дело в двигателе, я грешу на индуктивность, может межвитковое замыкание, пока не пойму.
На двигателе штатный таходатчик, разобрал, посмотрел, вроде ломаться нечему. Но проблема одна, что на тда, что на ардуино, иногда может набирать обороты, когда от него этого и не требуется. Возможно дело в двигателе, я грешу на индуктивность, может межвитковое замыкание, пока не пойму.
Давайте думать. Допустим, по каким -то причинам двигатель начал при той-же нагрузке и при том -же напряжении начал вращаться быстрее. Таходатчик сразу отработает это и подаст сигнал И плата, без разницы какая, сбросит питание. Обороты упадут.
Сгоревшие движки обычно продолжают вращатся. И данным платам, без разницы сгоревший двигатель или нет. Она продолжает поддерживать обороты, главное чтоб симистор выдержал нагрузку.
Основная причина набора оборотов неправильные показания таходатчика. У вас тахогенератор или датчик Холла? Попробуйте посадить магнит помимо винта ещё на силикон. И поставить датчик Холла.
Сделал небольшое дополнение, на мой взгляд полезное. При достижении ШИМ максимального значения загорается светодиод и сигнализирует, что большего из двигателя не "выжать".
Теперь вопрос. При экстренной остановке остаются последние показания прерываний. Как сбросить значение при отсутствии прерываний?
Сейчас просто раз в секунду, после вывода значений на экран, делаю принудительный сброс. Но понимаю, что это не правильно.
Давайте думать. Допустим, по каким -то причинам двигатель начал при той-же нагрузке и при том -же напряжении начал вращаться быстрее. Таходатчик сразу отработает это и подаст сигнал И плата, без разницы какая, сбросит питание. Обороты упадут.
Логично, обороты у меня скакали когда датчик был отключён. Но при маленьком показании потенциометра.
У вас тахогенератор или датчик Холла? Попробуйте посадить магнит помимо винта ещё на силикон. И поставить датчик Холла.
Тахогенератор. такого типа
Логично, обороты у меня скакали когда датчик был отключён. Но при маленьком показании потенциометра.
ТДА без таходатчика просто не запускается. Или это у вас на контроллере так было?
ТДА без таходатчика просто не запускается. Или это у вас на контроллере так было?
Было и на ардуино и tda, но с tda разобрался после того, как поменял мотор, стал работать стабильно. С ардуино разбираюсь. Оказывается прёт, какаято наводка. С таходатчика сигнал идёт чистый, а ардуино плюсует к сигналу 50 герц. Сейчас ставлю нормальное питание и тыкаю конденсаторы, пока вроде помогает. Пытаюсь разобраться с pid регулятором плавает сильно частота вращения ротора. В общем процесс идёт. А у Вас как? Двигатель работает стабильно?
А у Вас как? Двигатель работает стабильно?
И да и нет. на холостых, без нагрузки, обороты очень плавают. А при нагрузе, средней, почти стабильно.
Думаю, проблема в том, что на постоянке у таких движков присутствует так называемый "разнос". Движок, на одном напряжении, всё время набирает обороты. Разбираюсь.
Ещё не получается с датчиком тока. Из-за ШИМа показания скачут. Наверное нужен кондёр для сглаживания и усреднения. Не знаю какой и куда поставить.
И да и нет. на холостых, без нагрузки, обороты очень плавают. А при нагрузе, средней, почти стабильно.
pid ставить надо. Здесь кратко о нём http://we.easyelectronics.ru/Theory/pid-regulyatory--dlya-chaynikov-prak...
Это не сложно. Зато можно настроить очень точно.
Спасибо, это уже читал, и ещё что-то про ПИД регулирование.
Тут вот что получается, Если я увеличиваю значение ШИМ быстрее чем на 1 за 20 циклов программы то мосфет "вылетает. На это знание у меня ушел пятый транзистор. Тут что-то другое. Если бы двигатель вёл себя хуже под нагрузкой, то да, нужен ПИД. Здесь же наоборот, под нагрузкой лучше чем в холостую.
Спасибо, это уже читал, и ещё что-то про ПИД регулирование.
Тут вот что получается, Если я увеличиваю значение ШИМ быстрее чем на 1 за 20 циклов программы то мосфет "вылетает. На это знание у меня ушел пятый транзистор. Тут что-то другое. Если бы двигатель вёл себя хуже под нагрузкой, то да, нужен ПИД. Здесь же наоборот, под нагрузкой лучше чем в холостую.
Мне сложно, что посоветовать в С++ я тоже не силён. Слышал, что такого рода эксперименты можно проводить не на 220 вольт, через трансформатор. Допустим 36 вольт. Наладишь, а потом можно и в сеть. Медленно, но у меня даже от 12 вольт двигатель от стиралки вращался. А то так транзисторов не накупишься.
Я уже вторую ардуинку спалил. Прут паразитные шумы, и двигатель дёргается. Бывает часто, аж свет в комнате проседает. Может и у тебя тоже самое? Не пробовал отслеживать показания тахогенератора Serial.print, что там происходит?
Купил цифровой датчик Холла. хочу пробовать не через прерывания а так как советовал dimax тут и дальше.
Будимир, посмотри, как ребята симисторы на ТДА испытывают: http://www.youtube.com/watch?v=MZe0jqVa2ng
Будимир, посмотри, как ребята симисторы на ТДА испытывают: http://www.youtube.com/watch?v=MZe0jqVa2ng
Типа испытаний японской бензопилы на рельсе.
Симисторы у них с алиэкспресса виноваты.
Про это кино про подобный реверс двигателя ничего кроме слов Лаврова не подходит.
И что он сказал?
Купил цифровой датчик Холла. хочу пробовать не через прерывания а так как советовал dimax тут и дальше.
Вот читал ветку давно, а оказывается, здесь уже есть ответы на все вопросы, и про помехи, и про прерывания, буду изучать.
Будимир, посмотри, как ребята симисторы на ТДА испытывают: http://www.youtube.com/watch?v=MZe0jqVa2ng
Вот и пофиг им токи. Поэтому я на симистре и собираю. А проблемы с неустойчивой работой на ардуино, оказались помехи. Пока с ними не могу справиться.
И что он сказал?
http://www.youtube.com/watch?v=-iNp3oWWMf4
Купил цифровой датчик Холла. хочу пробовать не через прерывания а так как советовал dimax тут и дальше.
Странно. После установки цифрового датчика холла вместо восьми импульсов на один оборот идёт только четыре.
магнит стоит от привода жесткого диска. имеет 8 пар полюсов. должно быть 8 импульсов. Что может быть?
Не зная алгоритма работы твоего датчика, можно предположить, что одна пара полюсов дает передний фронт (допустим, HIGH), а второй задний (возвращение в LOW).
Вот и получается деление на два. Типа четкий меандр при скважности 2.
Ты осциллограмму выходную изобрази для ясности.
Странно. После установки цифрового датчика холла вместо восьми импульсов на один оборот идёт только четыре.
имеет 8 пар полюсов. должно быть 8 импульсов. Что может быть?
http://tutknow.ru/tech_and_electronics/206-datchik-holla-chto-eto-takoe-...
Цифровые датчики Холла так же разделены на: биполярные и униполярные.
Аналоговые датчики Холла – преобразуют индукцию поля в напряжение, величина показанная датчиком зависит от полярности поля и его силы. Но опять же, нужно учитывать расстояние, на котором установлен датчик.
Спасибо. Все перепроверил, действительно 4 пары полюсов, а не 8 как я считал.
sany_sch, канэчна! Вот вам в микросекундах и медленно :)
dimax, скажите, а эта система на другие выходы ни как не влияет? 9 и 10 пин ШИМ не выдают. Другие пока не пробовал. Или это я в скетче накосячил?
sany_sch, таймер железно привязан к определённым портам. Перевести на другие пины никак невозможно.
странно. задал выходом 11 пин - всё пошло. на прерываниях работало на девятом.
странно. задал выходом 11 пин - всё пошло. на прерываниях работало на девятом.
Видимо мы про разные программы говорим. В моём скетче никаких выходов не было) Был вход на 5 пине, который привязан.
Вот этот ваш скетч:
Из 26 сообщения. Вход датчика Холла на пин 8
Если я использую его в своей программе, то 9 и 10 пины перестают выдавать сигнал ШИМ. 11 пин работает нормально.
sany_sch, а, понял. Ну да, выводы 9 и 10 - это выходы сравнения таймера1, (oc1a/oc1b) поскольку сам таймер занят другим делом, то шим генерить он не может)
dimax, спасибо. А как изменить частоту ШИМ чтоб двигатель не пищал. 11пин - выход ШИМ
sany_sch, можно делитель таймера на 1 поставить, тогда частота ШИМ будет 16000000/256/2
TCCR2B = TCCR2B & 0b11111000 | 1;
Спасибо.
Ещё пара вопросов.
В этом вашем участке кода
Что и где нужно изменить чтоб:
1. обнуление шло не каждую секунду, а допустим каждые пол секунды.( в последней строке 65536 /2 ?)
2. после каждого срабатывания датчика переменная holl = 1
(1) Да. Лучше вообще убрать деление из прерывания. Один попугай int_tic равен 4 миллисекунды. Если нужно полсекунды, стало быть 0,5c / 0,004с = 125
(2) я не в курсе что за переменная holl
(2) я не в курсе что за переменная holl
Любая переменная. какая-нибудь. Когда произошло прерывание, помимо всех нужных расчётов связаных с tic, ещё и какой нибудь переменной присваиваем значение 1. А в процессе програмы я буду на неё опираться и обнулять когда нужно.
Просто сейчас программа уже работает. и давольно сносно. Но хочу попробовать другие алгоритмы работы. Например. Пока не получен сигнал с таходатчика - ШИМ не меняем. Можно, конечно, каждый раз сравнивать тик с педидущим, но думаю, лучше просто дожидаться пока прерывание не сработает.
Когда произошло прерывание, помимо всех нужных расчётов связаных с tic, ещё и какой нибудь переменной присваиваем значение 1. А в процессе програмы я буду на неё опираться и обнулять когда нужно.
После срабатывания датчика выполняется содержание ISR (TIMER1_CAPT_vect), в любом месте можно вставить holl=1; Нужно только объявить её как volatile по аналогии с другими переменными.
Спасибо!
sany_sch, можно делитель таймера на 1 поставить, тогда частота ШИМ будет 16000000/256/2
TCCR2B = TCCR2B & 0b11111000 | 1;
Спасибо, помогло. двигатель не пищит, и по моему мосфет стал меньше греться.
Здравствуйте. Работа не заброшена, просто все мосфеты сгорели. заказал более мощные, жду.
Пока решил опробовать симистор.
По этой статье http://cxem.net/arduino/arduino71.php собрал диммер. схему слегка изменил:
Основу скетча оставил но void loop изменил под потенциометр. получилось так:
Вопрос такой. ятак понял, что скетч под 65 герц, а нужно для 50.
И ещё будет ли он работать в паре с таходатчиком и прерываниями по ПИН 9.
Здравствуйте. Работа не заброшена, просто все мосфеты сгорели. заказал более мощные, жду.
Пока решил опробовать симистор.
По этой статье http://cxem.net/arduino/arduino71.php собрал диммер. схему слегка изменил:
Симистор, наверное, неплохой выбор.
Недавно сломалась кнопка регулятора оборотов дрели. Купил в магазине новую кнопку...родной найти не удалось, и расположение дырочек не поня, что куда подключать не разобрался. В целях изучения новую кнопку разобрал и собрать не смог, В общем остались запчасти...корпус, контакты и платка управления с симистором.
Решил разобрать родную кнопку..но осторожнее. Проблема оказалось не стоила выломанного яйца. Отвалилась пайка на ножке симистора. Запаял, и дрель снова плавно регулируется.
Дрель 710 ватт, служит уже много лет. Работаю всегда на регуляторе, на полную не включаю, т.к нет необходимости, да и на полной ток идет через доп.контакт, а не через регулятор.
Вывод - симистор хорошая штука для управления мощной нагрузкой.
Вывод - симистор хорошая штука для управления мощной нагрузкой.
Согласен. Но есть небольшие нюансы. Схема сложнее из за отслеживания нуля. скетч сложнее по тойже причине. А на мосфете используем встроенный ШИМ.
И самое важное. На постоенке двигатель мощнее. А это хороший +.