Свежие обсуждения
Микроконтроллеры

ШИМ регулятор оборотов для колекторника

1 8 10

Neman2000: А в общем, если никому все ж неинтересно, то пусть модератор все и удалит

Неман, не надо обижаться, на обиженных воду возят. Мне, например, интересно, я сам занимаюсь моделированием автомобилей, не гонки, конечно, меня это не сильно волнует, а техническая сторона вопроса: цифровой канал управления, пропорциональное управление, передача голоса и цифровых сигналов, огибание препятствий на ультразвуке и т.д. Думаю, практически всем, кто отвечал, тоже тема интересна. Модератора здесь нет, есть один Юха, он наш, был по крайней мере.

Neman2000: ...была надежда сделать что-то более совершенное и заодно немного научиться програмировать, но видно здесь и с такой поддержкой не судьба (цитата-"можно и бан получить...")

Вообще-то, вы немного передёргиваете, было конкретно сказано про конкретно другой форум, а не про этот.

Насчёт надежды и желания научиться программировать. Перестаньте ныть и сконцентрируйтесь конкретно на программировании. Научитесь делить большую задачу на отдельные фрагменты и отлаживать эти фрагмены независимо, чтобы потом их можно было бы объединить и согласовать их работу между собой. Здесь нет ничего страшного.

Задвиньте в долгий ящик все готовые самопальные проекты, поскольку они не отвечают вашим конкретным требованиям. Напишите свою программку и выложите здесь, увидите сколько будет помощников.

Например, пусть одна программка считывает напряжение с переменного резистора и выдаёт наружу импульсы длительностью 1-2 мс, в зависимости от напряжения и периодом повторения 20-50 мс. Так вы научитесь измерять напряжение батареи и формировать шим.

Пусть вторая программка принимает импульсы от первой задачи, измеряет их и выдаёт рабочую шим. Для начала в качестве нагрузки можно поставить подходящую лампочку. Так вы научитесь формировать параметры рабочего шима - период и скважность.

Освоите, переходите в следующему шагу - объединение программы измерения входного импульса и выработка рабочего шим во всех режимах. Не берите экзотичные оболочки для разработки, в вашем случае достаточно CodeVisionAVR, да и в других тоже.

 

Minus: а обязательное шунтирования шин питания регулятора хорошим плёночным конденсатором разве от пиков не спасает?

Ток 20А, время затухания 0,1 мс (10% от периода шим 1000 Гц), заряд Q=I*T. Напряжение на кондёре не больше пробивного напряжения полевика, ёмкость конденсатора можете посчитать? Да к тому же, когда полевик включится, будет пичок тока от этого конденсатора, только в обратную сторону. Не, ну ставить надо, помехи от мощных силовых цепей уменьшить и броски тока срезать...

Minus: в судо и авиа (и не знаю каком) моделизме я бы черезмерных зарядных токов от отключенного двигателя совсем не опасался, это актуально когда система инерционна и с жёсткой связкой "двигатель-движитель-среда" т.е. максимум на автомоделях
Не знаю как на авиамоделях, надо думать, а на судомоделях вся кинетическая масса модели M*V*V/2 должна участвовать в той или иной степени, природу не обманешь, модель движется вперёд по инерции, а гребной винт остановился! Так не бывает! Пару-то секунд он будет вращаться, значит будет вырабатываться электроэнергия...Ну если вы стенку перед моделью на полном ходу поставите, она разобьётся, а если электроэнергия выработается примерно той же величины, то она безобидна, как бы не так.

 

На RC форумах море готовых решений, но меня удивило не это, а желание делать что-то для колекторника(прошлый век), когда бесколекторники стоят сейчас копейки и преобразователи для них тоже, когда-то тоже делал бесколекторники и преобразователи сам, но тогда они стояли на порядок дороже, теперь смысла нет, бк для небольшого самоля стоит с преобразователем 25 баксов, лучше потратить время на полёты или покатушки, имхо.

 

mono1
*На RC форумах море готовых решений*-есть только недоделки без исходников либо же с ними неразобраться,
а я хочу сам научиться делать программу,
Помогите,все принципы работы регулятора оборотов некоторые проекты я описАл выше.
От Фловкоде отказываемся,Атмел нехочу за неимением доки на русском,
остается микрочип,из восьминогих и доступных- пик12ф629 или 675,а компилятор
Хайтек.
Конкретно непойму как замерить приращение сигналла дешифратора,далее както его вписАть в TMR0 и далее
вывести шим в зависимости от длинны приращения (управляющего сигналла дешифратора)
Пожалуйста опишите алгоритм (замер длинны сигнала и одновременно от его процента такой же процент щима
должен на любой пин выдаваться.
Просьба несоветовать купить готовое изделие и реализация только в пик12ф629 или 675,а компилятор
Хайтек,
Извините но повторюсь,нужен алгоритм записи входящего сигнального импульса(процента длинны ТТЛ_сигналла) и одновременно выдачи процента ШИМа предыдущего сигнального импульса и кусочек реализации Си кода для начинающих,чтоб разобраться можно было

 

Ух ты, Неман появился. Я думал, что ты бросил эти микроконтроллеры. Мы с тобой как начинающие почти одновременно на этом форуме стали вопросы задавать. Молодец. Я вот тоже не сдаюсь . Вот, в архивах про ШИМ что я находил, т.к. тоже надо было его использовать, но не для двигателя, а для ЦАПа.

188445.zip

 

Второй архив.

188446.zip

 

Граф еще прикреплю,и несовсем удачный пример Предко(светодиодный глаз робота),
может в нем что поменять или дописАть?
Помогите пжлст.
//________________________________________________________________________
// Шаблон программы управления роботом для компилятора Hi Tech PIC Lite
// Таймер установлен на срабатывание каждые 1024 мкс.

#include <pic.h>

__CONFIG(0x03F70); //Конфигурация РIСI6F628:
//тактовый генератор внутренний,
// RA6,RA7-используются для ввода вывода,
// используется внешний сигналл сброса,
//таймер РWRТ включен,
//сторожевой таймер выключен,
//защита кода отключена,
// детектор падения напряжения включен,

//########################### Глобальные переменные:########################
volatile int RTC = 0; // Счетчик реального времени.
char PWMCycle; // Счетчик циклов от 0 до 29
char PWMDuty; // Длительность импульса
volatile int PWMLoop; // Счетчик периодов ШИМ сигналла
static bit trisLED @ (unsigned) &TRISB*8+1; // Биты управления выводом RB1
static bit LED @ (unsigned) &PORTB*8+1;
const int LEDon = 0; // Выключить светодиод
const int LEDoff = 1; // Включить светодиод

//************************ Обработчик прерываний от таймера:********************************
void interrupt tmr0_int(void)
{
if (T0IF) { // Если запрос на прерывание поступил от таймера ТМR0,
T0IF = 0; // то сбросить флаг прерывания
RTC++; // и выполнить инкремент счетчика времени.

//*****Здесь описать дополнительные действия для обработки прерываний от таймера*****
//
switch(PWMDuty) { // Проверить на крайние значения
case 0: // Если задана нулевая ширина импульсов
LED = LEDoff; // То держать низкий уровень
break;
case 29: //Если ширина импульсов равна периоду
LED = LEDon; // То держать высокий уровень
break;
default: //В противном случае
// Если значение счетчика циклов меньше заданной ширины импульса
if (PWMCycle = PWMDuty)
LED = LEDon; // то держать высокий уровень
else // Впротивном случае низкий уровень
LED = LEDoff;
} // Конец оператора switch
if (++PWMCycle == 30) { // Конец текущего периода?
PWMCycle = 0; // Да,сброс счетчика циклов
PWMLoop++; // И инкремент счетчика периодов
} // endif
} // endif
//************** Здесь можно разместить код для установки других прерываний************
} // Конец обработчика прерываний.

//################################## СЛУЖЕБНАЯ ПРОГРАММА ###############
void enableLED(int LEDstate) // Установить состояние светодиода
{ //В соответствие со значением LEDstate
LED = LEDoff; // Сначала светодиод негорит
if (LEDstate) {
PWMCycle = 0; // Обнулить счетчик циклов
PWMDuty = 29; // Сначала ширина импульсов равна периоду
PWMLoop = 0; // Счетчик периодов равен 0
trisLED = 0; // Вывод управления светодиодом переводим в режим выходного
} else
trisLED = 1; // Вывод управления светодиодом переводим в режим входного
//Светодиод потушен
} //Конец служебной программы
//############################# ГЛАВНАЯ ПРОГРАММА: #####################
void main(void)
{

OPTION = 0x0D1; // использовать предделитель совместно
// с таймером ТМR0, коэффициент деления 4.
TMR0 = 0; // Начальный сброс таймера TMR0
T0IE = 1; // Разрешить прерывания от таймера.
GIE = 1; // Разрешить обработку прерываний.

//*******Здесь надо выполнить инипиализапию периферийных устройств.***************
enableLED(1); //Включить светодиод и выполнить инициализацию параметров

while (1==1) { // Бесконечный цикл.
//**************** Здесь надо разместить код для реализации *******************************
// Алгоритм измененияширины импульсов во времени
if (PWMLoop == 2) { // Каждые две секунды
if (PWMDuty == 0)
PWMDuty = 29; //Максимальная ширина импульсов
else
PWMDuty--; //Уменьшить ширину импульсов
PWMLoop = 0; // Сбросить счетчик периодов
} // endif
} // endwhile Конец оператора while.
} // End of Mainline Конец главной программы.

 

Два других в одном.

188448.zip

 

эх, про PIC10F204 и симистор не то (не про ШИМ).

 

Спасибо но это совсем не то!,или для Атмелов,или на асме,и принципа замера вх. импульса и одновременно выдачи шима(когда когда замеряет шим должен присутствовать!)нету!
Мне же надо алгоритм и кусок Си кода с коментариями для начинающих,
чтоб хоть немного почувствовать от чего оттолкнуться.
Шаблон вышеприведенного исходника(MPLAB_7.41+HiTech_PICC_Lite_9.5LP2+Proteus_7.2SP6)креплю
Знающие помогите.

Ко всем с Ув.-Neman2000

188459.rar