Получаем аналоговый ШИМ-сигнал с платы расширения Konnect
Предисловие
В некоторых случаях необходимо получить аналоговый ШИМ-сигнал с платы расширения Konnect, для регулируемого управления скоростью оборотов шпинделя на станке с ЧПУ. В приведённой ниже статье рассмотрим, как это можно сделать и что для этого потребуется.Итак приступим...
Введение
Контроллер KFLOP + плата расширения Konnect + схема простого низкочастотного фильтра, могут быть использованы для получения программируемого аналогового ШИМ-сигнала, этот сигнал может использоваться в качестве основного сигнала управления регулировкой скорости шпинделя, если больше никакие другие способы управления — не доступны. Всё это демонстрирует гибкость выходов платы расширения Konnect, которые оптоизолированы.Результаты
На аналоговом осциллографе отображены трассировки сигналов сгенерированных программным обеспечением контроллера KFLOP, ШИМ-сигнал управляет двумя оптоизолированными выходами платы расширения Konnect, которые затем передаются через простой низкочастотный фильтр.Синусоидальный сигнал с высоким разрешением и частотой отклика, легко использовать для управления скоростью из приложений.
Прямоугольный сигнал нужен для тестирования бóльших изменений сигнала. Существенное изменение при < 25 мс.
Допустимая линейность. Потребуется калибровка, если необходима более высокая точность.
Схема
Представляет собой простой двухкаскадный низкочастотный фильтр, который состоит всего из 5-ти компонентов, трех однотипных резисторов и двух однотипных конденсаторов. Значения компонентов не критичны, но резисторы R1 и R2 должны быть одного сопротивления. Один выход с платы расширения Konnect заряжает конденсаторы и один выход разряжает их. Оба выхода не должны включаться одновременно, но даже, если это случится, то никаких повреждений схемы не произойдёт, поскольку резисторы R1 и R2 ограничивают ток.Используемые резисторы имеют относительно низкоомные значения (100 Ом) и обеспечивают низкое выходное сопротивление, так что любая подключённая нагрузка должна иметь минимальный эффект. При нагрузке в 10 кОм или выше схема должна хорошо работать.
Двойная фильтрация обеспечивает низкие пульсации выходного сигнала, при этом имея сравнительно быструю реакцию на изменения, при использовании конденсаторов довольно маленькой ёмкости и даже с относительно низкими уровнями ШИМ.
Сигналы на выходе платы расширения Konnect могут обновляться каждые 180мкс. Так 180мкс можно считать основным шагом ШИМ. Такой результат был получен при ~10мВ p-p пульсации.
Программное обеспечение
Программа ниже моделирует пример того, как 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].