Цитата:
Сообщение от Admin
Это для нагревателя подойдет, а мотор с пропусками не будет работать
|
Ваша правда. Чуть разобравшись с кодом, написал такой проверочный скетч:
Развернуть для просмотра
PHP код:
#include <CyberLib.h>
int j=1, zcross=0;
volatile int k=1, i=1, pot;
void setup()
{
Serial.begin(115200);
D3_In; //энкодер счетчик
D7_In; //энкодер поворот
D8_Out; //Настраиваем порты на выход
D4_Out; //Настраиваем порты на выход
D2_In; //настраиваем порт на вход для отслеживания прохождения сигнала через ноль
attachInterrupt(0, zero_crosss, RISING); // прерывание на D2
}
void zero_crosss()
{
zcross++; //Считаем два полупериода (целую волну - Герц)
if (zcross>1)
{
if (j>k) {j=1;D4_Low; D8_Low;} //Сбрасываем счетчик периодов, закрываем симистор, тушим лед
i++; //Счетчик пакетов
if (i>=pot) //Пропускаем пакеты или нет. Если map=1, то каждый пакет с волнами идет на симистор. Если 100, то только каждый сотый...
{
D4_High; D8_High; //Открываем симистор, поджигаем лед
j++; //Счетчик волн в пакете
if (j>k) i=1; //Сбрасываем счетчик пакетов
}
zcross=0; //Сбрасываем счетчик полупериодов
}
}
void loop()
{
pot=map(analogRead(0),0,1023,100,1); // Показания потенциометра
if ((digitalRead(3)==1)&&(digitalRead(7)==1)) {k=constrain(k--,2,98);D3_Out; D3_Low;D3_In;} // Энкодер против часовой
if ((digitalRead(3)==1)&&(digitalRead(7)==0)) {k=constrain(k++,2,98);D3_Out; D3_Low;D3_In;} // Энкодер по часовой
Serial.print("Пакет непрерываных волн D4 (периодов) = "); Serial.print(k);
Serial.print(" Пропускаем волн (периодов) = "); Serial.println(pot);
}
[свернуть]
В нем можно регулировать как пропуски периодов, так и их длительность.
По итогу мотор крутится без гула, но рывками. Особенно интересные звуки когда ставишь цикл с соотношением 1 период в работу, 1 период на пропуск
Со срезанием волны э/двигатель работает плавнее. А на определенных частотах гула вообще не слышно...
Цитата:
Сообщение от Admin
резистор 39 Ом, конденсатор 0,01 мкФ . Но от помех в сети он не сильно поможет
|
А что поможет? Если поможет конечно...
А может фильтр от какого-нибудь розеточного "пилота"?
Цитата:
Сообщение от Admin
Инфракрасным датчиком препятствий Считать ничего не нужно. Например если в течении 1 сек. лог1 или лог0 , то значит вентилятор не крутится
Или второй вариант импульсами от датчика препятствий обнулять таймер
|
Да тут логика понятна, будем пробовать