Эксперименты по управлению электро-двигателем
- Войдите на сайт для отправки комментариев
Решил тему создать здесь, т.к. не определил куда она больше относится, к программированию или к аппаратным вопросам.
Решил сделать регулятор оборотов двигателя с обратной связью, и чтобы не наломать дров, решил делать частями, обкатывая каждую часть проекта.
Кто-то скажет - " Тема про регулятор уже есть!!!!!". Да, согласен. Но там уровень разработок гораздо выше, а я как не опытный в этих делах новичок буду идти неторопливо, мелкими шагами, и постараюсь дойти до конечного результата, победного или провального.
Сейчас уже попробовал шим регулятор оборотов двигателя и собрал макет тахометра с щелевым опртодатчиком. Если с ШИМ регулировкой пока все ясно, то с тахометром пока есть вопросы.
Если кому интересно, вот ссылка на видео, где сравнивается ШИМ 8бит и ШИМ 10 бит
https://www.youtube.com/watch?v=AsB2yE233BA&feature=youtu.be
Всвязи с тем, что тема вызвала огромный интерес :), решил добавить коротенькое видео про тахометр на Ардуинке. Тахометр потом вольется в регулятор оборотов двигателя и будет с ним одним устройством. Вот ссылочка
https://www.youtube.com/watch?v=tYvchahLkTU&feature=youtu.be
Вывод от этого опыта - Этот оптический датчик получается несколько громоздким. Будем думать как и что применить. Есть варианты - датчик холла и оптический ИК датчик на отражение......
А ссылки? На шилд на нокиа и т.д. - хотелось бы жеж
А по ШИМ, на ардуино можно сделать и 16 битный, DIMAX публиковал код, я исследую 10 битный, код не меняется практически
/* Вызываем для изменения скважности) */ void analogWrite16(uint16_t value) { OCR1A = value;} /* Вызываем в setup() */ void setup16bitPWM () { pinMode(9,OUTPUT); TCCR1A=(1<<COM1A1)|(1<<COM1A0)|(1<<WGM11); TCCR1B=(1<<WGM13)|(1<<WGM12)|(1<<CS10); //mode14 FastPwm ICR1=1023; // счётчик для 10 бит, для 16 бит - 65535 OCR1A=512; //50% default value } void setup() { Serial.begin(9600); analogReference(INTERNAL); setup16bitPWM();А ссылки? На шилд на нокиа и т.д. - хотелось бы жеж
А по ШИМ, на ардуино можно сделать и 16 битный, DIMAX публиковал код, я исследую 10 битный, код не меняется практически
Вот ссылка на Nokia-шилд, но уже следующей версии http://www.ebay.com/itm/LCD4884-Joystick-Shield-v2-0-4884-LCD-Expansion-Board-For-Arduino-Raspberrypi-M-/172213448897?hash=item2818b8b0c1:g:XSgAAOSwuR5XPvxQ
Где-то уже писал о достоинствах и недостатках (по моему скромному мнению), сейчас повторю
Достоинства:
1. Компактная красивая компановка;
2. На борту имеется подключенный дисплей, джойстик-аналог аналоговой клавиатуры;
3. Около каждого, выведенного на шилд цифрового и аналогового пина имеется дополнительно GND и VCC
Недостатки:
1. Дисплей жестко висит на пинах 2,3,4,5,6 (мне не удалось использовать пины 2 и 3 для внешних прерываний)
2. Пины выведены штырьками вертикально вокруг дисплея, и дисплей загромождается кучей проводов.
Битность ШИМ это и есть частота, если при 16 битах частота равна 244Гц, то при
10 битах (244*65536/1024)
11 битах (244*65536/2048)
12 битах (244*65536/4096)
13 битах (244*65536/8192)
14 битах (244*65536/16384)
15 битах (244*65536/32768)
Битность ШИМ это и есть частота, если при 16 битах частота равна 244Гц, то при
10 битах (244*65536/1024)
11 битах (244*65536/2048)
12 битах (244*65536/4096)
13 битах (244*65536/8192)
14 битах (244*65536/16384)
15 битах (244*65536/32768)
На Ардуинке заявлен 8-ми битный ШИМ. Я считал что это значения от 0 до 255, т.е. 255 градаций скважности. А 10 бит это значения от 0 до 1023.
На Ардуинке частота ШИМ примерно 490 герц, на транзистортестере, который тоже на Атмеге 328, заявлен 10-ти битный шим. На транзистортестере частота ШИМ 7800 герц.
Как эти значения связаны с вашими формулами? Извините, но до меня не дошло :(
Пост #2 - это код ШИМ на таймерах, ШИМ от 8 бит до 16, там в коде есть пояснение, выход ШИМ на 9 пин )))
Слона то я и не приметил )))
Пост #2 - это код ШИМ на таймерах, ШИМ от 8 бит до 16, там в коде есть пояснение, выход ШИМ на 9 пин )))
Слона то я и не приметил )))
P.S. Попробовал, запустил, РАБОТАЕТ! Измерил тестером частоту на пин 9, она 15.6 килогерц. Вечерком подключу осцилограф, посмотрю, попробую скважность менять.
Спасибо dimax_у и ua6em_у
Поправьте коммент, плиз. Ибо тут выставляется не только режим fastPwm, но ещё и задается предделитель для частоты счета таймера. Управляя предделителем можно получать разные частоты ШИМ, вплоть до 30Гц для 8-битного таймера... Частота 490гц получается для предделителя в 1/64 - типового для 16Мгц тактовой и нормальной работы millis().
Только и всего.
P.S. Да и ШИМ можно получать и иными режимами работы таймера. В частности для 16-и битного таймера очень удобен 14-й режим fastPWM with ICP register. Задавая правильный предделитель и ограничение счета в регистре ICP, очень удобно управлять серводвигателями через аппаратный ШИМ, например так:
// v.1 set 16bit timer (only t:[1,3,4,5]) to PWM special for servo motors: // 1/64 FAST-pwm mode with ICP, 50hz (20msec) and set to pwmOut PWM pin, // Установка 16битного таймера и его каналов в типовой ШИМ для серво моторов. Ноги на вывод устанавливать отдельно! // // @example: set timer5 to pwmServo and use 2 servo at pins 44,46: // timerSetServo(5, pwmPinMode(44, PWM_NORMAL)|pwmPinMode(46, PWM_NORMAL)) // ** set pins 44,46 to OUTPUT manually! #define timerSetServo(t,pwmPinMask) \ { \ timerControl(t, A) = (1<<WGM11)|(pwmPinMask); \ timerControl(t, B) = (1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); \ timerCapture(t) = 4999; \ } // v.2: set to servoMode too for one servo drive by PWM pin number p:[2,3,5,6,7,8,11,12,44,45,46,T1C] // Установка одной ноги на ШИМ и её таймера в типовой режим сервоШИМа: 50Гц. // Для последующего канала этого же таймера достаточно вызвать pwmSet(p). // // example set 45 pin to use servo (only one for timer!): pwmSetServo(45); // set pin to OUTPUT manually! Ногу на вывод - самостоятельно! #define pwmSetServo(p1) \ { \ timerControl(pwmGetTimer(p1), A) = (1<<WGM11)|(pwmPinMode(p1, PWM_NORMAL)); \ timerControl(pwmGetTimer(p1), B) = (1<<WGM13)|(1<<WGM12)|(1<<CS11)|(1<<CS10); \ timerCapture(pwmGetTimer(p1)) = 4999; \ }Поправьте коммент, плиз. Ибо тут выставляется не только режим fastPwm, но ещё и задается предделитель для частоты счета таймера. Управляя предделителем можно получать разные частоты ШИМ, вплоть до 30Гц для 8-битного таймера... Частота 490гц получается для предделителя в 1/64 - типового для 16Мгц тактовой и нормальной работы millis().
Только и всего.
P.S. Да и ШИМ можно получать и иными режимами работы таймера. В частности для 16-и битного таймера очень удобен 14-й режим fastPWM with ICP register. Задавая правильный предделитель и ограничение счета в регистре ICP, очень удобно управлять серводвигателями через аппаратный ШИМ, например так:.................................
Нашел в инете статейку по ШИМ Ардуино. Там рассказано как изменить частоту ШИМ, и есть табличка для выбора частоты. Попробовал, работает. Скетчик очень простой (в конце статьи)
Может кому интересно, вот ссылочка http://mypractic.ru/urok-37-shirotno-impulsnaya-modulyaciya-v-arduino.html
Самое интересное в конце статьи (скетч и таблица). Из таблицы следует, что я правильно понимал что такое битность ШИМ и что такое частота. В таблице на первой позиции 8-ми битный шим с частотой 62.5 килогерц.
P.S. Решил блок с мосфетом и двигателем гальванически развязать с микроконтроллером. Вроде говно вопрос, ставим оптрон. Иду в ПДФчик "Базовое подключение устройств к Ардуино", нахожу как подключается оптрон (оптрон нарисован точно такой же 4N25 как и у меня), подключаю, испытываю. ШИМ на частоте 490 герц работает, на частоте 7800 - нет! Не сразу понял, что виноват оптрон. Начал разбираться....оптрон, вроде бы килогерц 300 уж должен пропустить! Оказывается не так все просто. Пока немножко завяз на этой стадии. Ребята с другого форума кое-что подсказали. Результаты обнадеживающие. По прохождении этого этапчика отпишу.
По прохождении этого этапчика отпишу.
Этап не пройден?
По прохождении этого этапчика отпишу.
Этап не пройден?
Более интересными показались темы вроде "Регулятор оборотов двигателя с обратной связью."