Получаем аналоговый ШИМ-сигнал с платы расширения Konnect

KFlop, KStep, KAnalog, KMotion...

Получаем аналоговый ШИМ-сигнал с платы расширения Konnect

Сообщение Predator » 20 мар 2015, 19:03

Получаем аналоговый ШИМ-сигнал с платы расширения Konnect


Предисловие

В некоторых случаях необходимо получить аналоговый ШИМ-сигнал с платы расширения Konnect, для регулируемого управления скоростью оборотов шпинделя на станке с ЧПУ. В приведённой ниже статье рассмотрим, как это можно сделать и что для этого потребуется.

Итак приступим...

Введение

Контроллер KFLOP + плата расширения Konnect + схема простого низкочастотного фильтра, могут быть использованы для получения программируемого аналогового ШИМ-сигнала, этот сигнал может использоваться в качестве основного сигнала управления регулировкой скорости шпинделя, если больше никакие другие способы управления — не доступны. Всё это демонстрирует гибкость выходов платы расширения Konnect, которые оптоизолированы.

Результаты

На аналоговом осциллографе отображены трассировки сигналов сгенерированных программным обеспечением контроллера KFLOP, ШИМ-сигнал управляет двумя оптоизолированными выходами платы расширения Konnect, которые затем передаются через простой низкочастотный фильтр.

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

Получаем аналоговый ШИМ-сигнал с платы расширения Konnect SineWave.png
Синусоидальный сигнал
Прямоугольный сигнал нужен для тестирования бóльших изменений сигнала. Существенное изменение при < 25 мс.

Получаем аналоговый ШИМ-сигнал с платы расширения Konnect SquareWave.png
Прямоугольный сигнал

Допустимая линейность. Потребуется калибровка, если необходима более высокая точность.

Получаем аналоговый ШИМ-сигнал с платы расширения Konnect LinearityChart.png

Схема

Представляет собой простой двухкаскадный низкочастотный фильтр, который состоит всего из 5-ти компонентов, трех однотипных резисторов и двух однотипных конденсаторов. Значения компонентов не критичны, но резисторы R1 и R2 должны быть одного сопротивления. Один выход с платы расширения Konnect заряжает конденсаторы и один выход разряжает их. Оба выхода не должны включаться одновременно, но даже, если это случится, то никаких повреждений схемы не произойдёт, поскольку резисторы R1 и R2 ограничивают ток.

Используемые резисторы имеют относительно низкоомные значения (100 Ом) и обеспечивают низкое выходное сопротивление, так что любая подключённая нагрузка должна иметь минимальный эффект. При нагрузке в 10 кОм или выше схема должна хорошо работать.

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

Сигналы на выходе платы расширения Konnect могут обновляться каждые 180мкс. Так 180мкс можно считать основным шагом ШИМ. Такой результат был получен при ~10мВ p-p пульсации.

LowPassCircuit.png
Схема низкочастотного фильтра
LowPassCircuit.png (3.37 Кб) Просмотров: 2489
Получаем аналоговый ШИМ-сигнал с платы расширения Konnect WiredCircuit.png
Получаем аналоговый ШИМ-сигнал с платы расширения Konnect CircuitTop.png


Программное обеспечение

Программа ниже моделирует пример того, как RC-цепочка будет реагировать при подаче низкого или высокого напряжения.

Если моделируемое напряжение ниже требуемого выходного напряжения, то выход переключается на высокое напряжение для зарядки конденсатора, в противном случае он переключается на низкое напряжение для разрядки конденсатора.

То же состояние, которое моделируется, также направлено на выходы платы расширения Konnect, для управления реальной схемой. Реальная схема немного сложнее, но модель простая и работает достаточно хорошо. Две RC-цепочки в конечном счете разовьют такое же напряжение, как среднее напряжение ШИМ в устойчивом состоянии, только время отклика будет немного отличаться. Точно так же, несколько отличающиеся значения компонентов будут влиять только на время отклика. Значения в программе были скорректированы для получения наилучшего результата.

Директиве #define могут потребоваться изменения для конкретной схемы и использование битов Ввода/Вывода.

Значение Vout запрограммировано, чтобы создать синусоиду, но более типичней будет передавать значение через глобальную переменную, как Spindle Speed Setting.

Код: Выделить всёРазвернуть
#include "KMotionDef.h" 

// Enables a Konnect on KFLOP JP4 Aux Port then
// PWM's two outputs as push-pull drivers such that
// when low passed filtered with an RC circuit becomes
// a variable analog source.
//
// Configure KFLOP to service Konnect 32 Input 16 output IO board
// Board address is 0,
// 16 Outputs are mapped to Virtual IO 48-63 (VirtualBits)
// 32 Inputs are mapped to Virtual IO 1024-1055 (VirtualBits[0])
//
// Attach Service to Aux0 Port (KFLOP JP4) instead of standard Aux1 Port (KFLOP JP6)
//

void ServiceKonnectPWM(void);

double T,T0 = 0;

float Vout = 0.0; // desired voltage

main() {
    InitAux();
    AddKonnect_Aux0(0,&VirtualBits,VirtualBitsEx);
   for(;;) {
      T=WaitNextTimeSlice();
      ServiceKonnectPWM();
      
      // Fixed
      // Vout = 0.1;
      //Generate a 5 Hz 3V Sine Wave

        Vout = 3.0f*sin(T * TWO_PI * 5.0) + 5.0;
      
      // Generate a Saw Tooth wave
      // Vout = 2 + 6.0* (5.0*T - ((int)(5.0*T)));
      //Generate a 5 Hz Square wave
        //Vout = (5.0*T - ((int)(5.0*T))) > 0.5 ? 8 : 2;
    }
}

#define C 0.00029f // 1000uF
#define R 100.0f // 100 ohms
#define Vcc 11.230f // supply voltage
#define HIGH_BIT 62 // This output drives Cap high
#define LOW_BIT  63 // This output drives Cap low

void ServiceKonnectPWM(void) {

    static int FirstTime = TRUE;
    static float Vc = 0.0f;
    static double T0;
    static int State;
    double T = Time_sec();

    if (FirstTime) {
        FirstTime = FALSE;
        T0 = T;
        State = 0;
    }
   else {
      float V,I;
      
      // Compute Voltage applied to Cap
      V = Vcc*State;
      
      // Compute current
      I = (V-Vc)/R;
      
      // Compute new Cap Voltage
      Vc += I/C*(T-T0);
      
      // determine next state
      
      if (Vc > Vout) {
         ClearBit(HIGH_BIT);
         SetBit(LOW_BIT);
         State=0;
        }
      else {
         ClearBit(LOW_BIT);
         SetBit(HIGH_BIT);
         State = 1;
        }
      
      T0 = T; // save time when applied
    }
}

Автор перевода на русский язык: Александр Кадников
Коллеги представляю Вашему вниманию мой вольный перевод статьи KONNECT - PWM to Analog Example с офсайта KFLOP, если у Вас имеются какие-то пожелания по-улучшению перевода, прошу писать в личку.
Я не матерюсь, а всего лишь употребляю ненормативную лексику в целях более полного и лаконичного выражения своих эмоций.
Аватара пользователя
Predator
Мастер
 
Сообщения: 9451
Зарегистрирован: 18 июл 2013, 18:26
Репутация: 2492
Медальки:
Настоящее имя: Александр

Re: Получаем аналоговый ШИМ-сигнал с платы расширения Konnec

Сообщение Nick » 14 май 2015, 10:41

+медалька! :good:
Аватара пользователя
Nick
Мастер
 
Сообщения: 22398
Зарегистрирован: 23 ноя 2009, 16:45
Откуда: Gatchina, Saint-Petersburg distr., Russia
Репутация: 1475
Заслуга: Developer
Медальки:

Re: Получаем аналоговый ШИМ-сигнал с платы расширения Konnec

Сообщение Predator » 14 май 2015, 13:19

Nick писал(а):+медалька! :good:

Наши - Вам! Изображение
Вот и я медалью обзавёлся, дело сталось за малым, догнать и обогнать Афтаева :)
Я не матерюсь, а всего лишь употребляю ненормативную лексику в целях более полного и лаконичного выражения своих эмоций.
Аватара пользователя
Predator
Мастер
 
Сообщения: 9451
Зарегистрирован: 18 июл 2013, 18:26
Репутация: 2492
Медальки:
Настоящее имя: Александр

Re: Получаем аналоговый ШИМ-сигнал с платы расширения Konnec

Сообщение AlexNikov » 14 май 2015, 17:28

Пытался ага осилить это дело в мануале...не очень дружу с английским. У меня какой вопрос - как такую схемку прикрутить непосредственно к K-FLOP - к примеру при использовании сторонних драйверов и собственно заводя все сигналы на саму плату K-FLOP, у меня вот как раз назрела такая проблема - пока даже не знаю с какой стороны подступиться к коду.
Аватара пользователя
AlexNikov
Мастер
 
Сообщения: 1212
Зарегистрирован: 05 янв 2014, 20:09
Откуда: Томск
Репутация: 716
Настоящее имя: Алексей

Re: Получаем аналоговый ШИМ-сигнал с платы расширения Konnec

Сообщение konstantinshr » 18 авг 2016, 00:52

Судя по описанию KONNET подключается не в стандартный порт JP 6 а в JP4. А если подключить как правильно в JP6 будет работать?
konstantinshr
Мастер
 
Сообщения: 221
Зарегистрирован: 04 авг 2013, 17:05
Откуда: Новороссийск
Репутация: 42


Вернуться в KFlop

Кто сейчас на конференции

Зарегистрированные пользователи: Adskiydart, aftaev, Алексей063, barroweer, bav66, Bing [Bot], BOdrOFF, Сергей Саныч, Darxton, DenisK, error101, Frolv, Google [Bot], Google Feedfetcher, KAT Kzn, Lafayette, Majestic-12 [Bot], Malik, MGG, mikehv, neonas, nik1, NKS, Provodnik, Q-starь, r_v, гаечный ключ, Skydiving, SVP, Taganrog, tovar4i, tubeman88, woodshop, xvovanx, Yandex [bot], Константин Васютин, Леонид Владимирович

Поделиться

Reputation System ©'