Сделал схему для регулировки однофазного вентилятора на ШИМ-е, выкрал в инете код программы, отладил под себя- все работает отлично, регулировка плавная. Есть риск спалить движок на малых оборотах. Прикрутил термодатчик, дописал скечь, чтобы мерил температуру движка, но знаний не хватает, что с этим условием делать, когда температура мотора превышает установленную. Надо запретить выход ШИМ-а на pin10, а когда температура спадёт хотя бы до 50 град опять дать разрешение на пуск с любой кнопки (7-ой или 1-ой).
int MotorPWM = 10;
int MotorSpeed = 150; // vary this value between 0 and 500 for 9-bit precision whereby 500 = stop and 0 = full speed
void setup ()
{
TCCR1A = B11110010;
TCCR1B = B00010001;
ICR1 = 500 ; // 9 bit resolution, this value sets the frequency of the PWM-signal to 16kHz
OCR1B = 500; // vary this value between 0 (max power) and 500 (500 = off) for 9-bit precision - PWM at pin MotorPWM
pinMode(MotorPWM, OUTPUT); // declare the port as an OUTPUT OCR1A = 1023;
analogWrite(MotorPWM,MotorSpeed); //initialize primary pwm
}
void loop()
{
//тут идёт сама программ регулировки оборотов
char Key = K_pad.getKey();
if (Key =='1')
{
if (MotorSpeed > 0)
{
MotorSpeed = MotorSpeed -50;
if (MotorSpeed==450)
{
MotorSpeed = 300;
}
}
if (OCR1A <= 500) {OCR1A = MotorSpeed;}
if (OCR1B <= 500) {OCR1B = MotorSpeed;}
}
if (Key == '7')
{
if (MotorSpeed < 500)
{
MotorSpeed = MotorSpeed +50;
if (MotorSpeed == 350)
{
MotorSpeed = 500;
}
}
if (OCR1A <= 500) {OCR1A = MotorSpeed;}
if (OCR1B <= 500) {OCR1B = MotorSpeed;}
}
//но нужна защита от перегрева есть прикручен термо датчик, температура выводитсья
// теперь надо чтобы она и гасила мотор
if (T_motor > 65)
{
// вот тут чего то надо выключить но так, чтобы после тогоб как остынет мотор имел //разрешение на пуск. Т.э. нажал кнопку (любую) и он пошёл.
}
}
ШИМ для мотора поблема с термозащитой
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: ШИМ для мотора поблема с термозащитой
Кошмар какой то...
Запустить ШИМ, прикрутить датчик, чтобы он ещё заработал, - без проблем. А дёрнуть ногой и опросить кнопку - проблема... Как такое может быть ?
Запустить ШИМ, прикрутить датчик, чтобы он ещё заработал, - без проблем. А дёрнуть ногой и опросить кнопку - проблема... Как такое может быть ?

Re: ШИМ для мотора поблема с термозащитой
Ай ну не надо. Чего уж там. Я тут с паяльником думал выкручусь, а тут подсунули идею про ардуину, вот и понеслось. Я электрик а не програмист, вот наверное потому и бывает смешные вопросы.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: ШИМ для мотора поблема с термозащитой
На самом деле проблема непонятна. То-ли кнопку опросить не можете, то-ли чего...
А с условием... ну что с ним ещё делать ? Обрабатывать его нужно...
А с условием... ну что с ним ещё делать ? Обрабатывать его нужно...
Re: ШИМ для мотора поблема с термозащитой
Просто не нахожу команду- если условие не удолетворяется т.е. Тмотора выше 65 град дожен остоновитсья ШИМ digitalwrite LOW?
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: ШИМ для мотора поблема с термозащитой
woow писал(а):Просто не нахожу команду- если условие не удолетворяется
Код: Выделить всё
else{
.....
.....
}http://yandex.ru/yandsearch?clid=9582&t ... 0%A1%D0%B8
Re: ШИМ для мотора поблема с термозащитой
неа, не про то. if/else мне понятно, С и С++ это кода не будь на пенсии, а сейчас мне боле понятная ардуиновский коктейль
когда есть строка задающая
analogWrite(MotorPWM,MotorSpeed);
..........
а потом я по условию его отключаю
if (T_motor < 65)
{
pinMode(MotorPWM, OUTPUT);
}
else
{
digitalWrite(MotorPWM, LOW);
}
и когда Тмотор спадает нпрм. до 60град, ШИМ не запускается. на компиляторе этого не видно, авот на макете и облом.
когда есть строка задающая
analogWrite(MotorPWM,MotorSpeed);
..........
а потом я по условию его отключаю
if (T_motor < 65)
{
pinMode(MotorPWM, OUTPUT);
}
else
{
digitalWrite(MotorPWM, LOW);
}
и когда Тмотор спадает нпрм. до 60град, ШИМ не запускается. на компиляторе этого не видно, авот на макете и облом.
-
Rtmip
- Держит паяльник хвостом
- Сообщения: 963
- Зарегистрирован: Чт апр 03, 2014 23:16:55
- Откуда: Россия
Re: ШИМ для мотора поблема с термозащитой
А если так:
if (T_motor < 65)
{
pinMode(MotorPWM, OUTPUT);
}
if (T_motor >= 65)
{
digitalWrite(MotorPWM, LOW);
}
Re: ШИМ для мотора поблема с термозащитой
Спасибо за мысль, но не помогло.
Тыкал тыкал - кажись этой строки не хватало:
if (T_motor < 65)
{
pinMode(MotorPWM, OUTPUT);
analogWrite(MotorPWM,MotorSpeed);
}
else
{
digitalWrite(MotorPWM, LOW);
}
Не знаю на сколько это грамотно, но работает.
Тыкал тыкал - кажись этой строки не хватало:
if (T_motor < 65)
{
pinMode(MotorPWM, OUTPUT);
analogWrite(MotorPWM,MotorSpeed);
}
else
{
digitalWrite(MotorPWM, LOW);
}
Не знаю на сколько это грамотно, но работает.