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

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

Получаем аналоговый ШИМ-сигнал с платы расширения 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].

BenAflek
2-й разряд
Сообщения: 2655
Зарегистрирован: 29 окт 2014, 08:16
Репутация: 1054
Страна: СССР
 

  »

Predator писал(а):я ведь не писатель :hiding:

Да ладно тебе кочевряжиться - попробуй :D

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

Да ну вас... сами пишите :nono:

Boroda2020
Новичок
Сообщения: 1
Зарегистрирован: 23 авг 2020, 22:01
Репутация: 3
Страна: Беларусь
 

  »

Приветствую коллеги. Спасибо Predator за подробные (насколько это было возможно) инструкции по запуску станков на плате Kflop.

Имеется Kflop + Konnect. Станок переводится с MAch3 на Kflop. На данном этапе шаговик крутится и индуктивный датчик срабатывает. И получился затык на управлении оборотами шпинделя по 0-10В.

Спаял схему на резисторах и конденсаторах - как в мануале Kflop. Там все очень просто и я разобрался даже на английском.

Но совсем непонятно куда вставлять этот код который лежит в мануале? Пробовал его внедрять с правильным форматированием (как мне кажется) в файл инициализации - выскакивает ошибка. Создавал новый файл и вешал его в настройках на команду M3 - тоже ошибка.

И второй вопрос. У меня Konnect подключен через JP6 платы Kflop. Хотя в мануале вроде рекомендуют соединять через разъем JP4. Я в английском не очень силен и мог неправильно понять. Зта схема будет работать даже если Konnect нагружен датчиками и висит на JP6? Или вешать на JP4?

Отправлено спустя 35 минут 38 секунд:
На второй вопрос я нашел такой ответ: "That is mostly correct except that JP6 PWM signals can not be passed through to Konnect. Konnect requires a dedicated Aux Port for it to operate. Konnect can be connected to either Aux0 (JP4) or Aux1 (JP6). So in your case you should move Konnect to to JP4. "

Т.е. если я правильно понял, то -ШИМ сигнал передается только при подключении платы Konnect через разъем JP4.


Остается тогда первый вопрос: "Куда конкретно вешать код для регулировки оборотов шпинделя? В какой файл его добавлять?"

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

Boroda2020 писал(а):Источник цитаты Или вешать на JP4?
Да, пишут что на него нужно.

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

Boroda2020 писал(а):Источник цитаты Но совсем непонятно куда вставлять этот код который лежит в мануале?
Создай файл с именем spindle_speed_setting.c, и добавь вышеприведенный код в него, файл помести в каталог с файлом инициализации.
В KMotionCNC укажи параметры запуска скрипта по-аналогии:


BenAflek
2-й разряд
Сообщения: 2655
Зарегистрирован: 29 окт 2014, 08:16
Репутация: 1054
Страна: СССР
 

  »

Boroda2020, Взлетело? :hmm:

Predator
5-й разряд
Сообщения: 5933
Зарегистрирован: 30 авг 2014, 19:14
Репутация: 4135
Страна: СССР
 

  »

Boroda2020, Запустился?


Вернуться в «KFLOP»