Микроконтроллер для БТГ
Вот только нет на ней кварца 32,768КГц для внутренних часов.MagistrTNT пишет:
Выглядит почти как родная.ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]
А так все работает, ШИМ выдает до 42МГерц как научил наш Канадский соотечественник.
Как у Вас успехи с Due?
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Получается с помощью внутрисхемного отладчика записывать и отлаживать програмы написанные на С. Пока не получилось для этой цели запустить встроенный программатор хотя коды и програмы для него нашел. Если получится запустить то каждый сможет заливать в него не только скейтчи но и нармальные Програмы на С и ассемблере без использования внешних устройств.Mining пишет:
Вот только нет на ней кварца 32,768КГц для внутренних часов.MagistrTNT пишет:
Выглядит почти как родная.ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]
А так все работает, ШИМ выдает до 42МГерц как научил наш Канадский соотечественник.
Как у Вас успехи с Due?
А кварц надо допоять без него может не все правельно функционировать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Допаять надо не только кварц, но и два конденсатора на 22пФ . Еще и R8 отсутствует.MagistrTNT пишет:
Получается с помощью внутрисхемного отладчика записывать и отлаживать програмы написанные на С. Пока не получилось для этой цели запустить встроенный программатор хотя коды и програмы для него нашел. Если получится запустить то каждый сможет заливать в него не только скейтчи но и нармальные Програмы на С и ассемблере без использования внешних устройств.Mining пишет:
Вот только нет на ней кварца 32,768КГц для внутренних часов.MagistrTNT пишет:
Выглядит почти как родная.ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]
А так все работает, ШИМ выдает до 42МГерц как научил наш Канадский соотечественник.
Как у Вас успехи с Due?
А кварц надо допоять без него может не все правельно функционировать.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А что значит "Все параметры выводятся на PC терминал." ? У Вас какая то оболочка стоит на PC ?Abadiya пишет:
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]Mining пишет: Для меня реализацию на МК я вижу два варианта в два этапа.
Вариант 1. Ручной режим.
1.Создать генератор прямоугольных импульсов для Push-pull.
1.1.Частота от0до60кГц, ручная регулировка энкодером с минимальным шагом 0,1 Гц(лучший вариант 0,01Гц).
1.2.Скважность регулируемая, ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.Создать генератор прямоугольных импульсов для накачки Тесла.
2.1. Частота от 1,0 до 2,0 МГЦ, ручная регулировка энкодером с минимальным шагом 0,1 Гц (лучший вариант 0,01Гц).
2.2.Скважность регулируемая, ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.3 Сдвиг фазы регулируемый, ручной режим энкодером с минимальным шагом 1о
Вариант 2. Ручной режим.
1.Создать генератор прямоугольных импульсов для push-pull.
1.1.Частота от 0до60кГц, ручная регулировка энкодером с минимальным шагом 0,1 Гц(лучший вариант 0,01Гц).
1.2.Скважность регулируемая, ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.Создать генератор нано-импульсов.
2.1. Частота в диапазоне push-pull от 0 до 60кГц, ручная регулировка энкодером с минимальным шагом 0,1 Гц (лучший вариант 0,01Гц).
2.2.Длительность импульса от 10 до 300Нс(можно от 50 до 200Нс), ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.3 Сдвиг фазы регулируемый, ручной режим энкодером с минимальным шагом 1о
После того как в ручном режиме получаю эффект работы установки без вмешательства от внешней подпитки и тогда Второй этап сделать обратные связи для автоподстройки.
Посмотри на этот код.
2 канала; 30-60 кГц с шагом 1 Гц; 2-й канал с синхронизацией; управление- 3 кнопки; Все параметры выводятся на PC терминал.
1. Выход на Push-pull - аппаратный ШИМ ATMega: регулировка частоты + ширина импульса
2. Этот же выход идёт на 2 аппаратных прерывания, по подъёму и спаду для 2-х полупериодов, так же сигнал на для Tesla. Регулируется смещение от начала фронта основного сигнала (Push-pull), регулируется ширина импульса+ пачки импульсов 1-** если включена пачка импульса, то отдельно регулируется пауза между импульсами.
3. Включить / отключить пачки импульсов в противофазе на втором полупериоде
ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]
/*
Copyright release under LGPL (GNU General Public License), as well as a non-commercial use.
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
For legal advice on subjects of Copyright, Trademarks and Patents please consult
legal counsel at myattorneyusa.com
*/
#include "CyberLib.h"
#include <PWM.h>
//byte pin1=4, pin2=5, pin3=6; // pin кнопок
bool p1, p2, p3;
int pwm = 9; // pwm out Push-pull
int32_t f=100;
int duty=128;
int shift=1;
int dutyTT=1;
int packet=1;
int packet_del=1;
int pac=0;
int cycle=0;
bool success;
int mode=1;
// 1 - частота ШИМ
// 2 - ширина ШИМ
// 3 - Сдвиг 2-го импульса
// 4 - Ширина 2-го импульса
// 5 - Количество импульсов
// 6 - пауза между импульсами
// 7 - вкл/выкл противофазы
void setup()
{
Serial.begin(115200);
Serial.println("Init device");
Serial.println("mode: PWM Frequency HZ");
InitTimersSafe();
bool success = SetPinFrequencySafe(pwm, f);
D10_Out; //Настраиваем pin D10 на выход
D9_Out;
D4_In;
D5_In;
D6_In;
D2_In;
D2_High;
D4_High;
D5_High;
D6_High;
//pinMode(2, INPUT_PULLUP);
attachInterrupt(0, Kick,RISING );
}
void loop()
{
label:
p3=D4_Read;
p2=D5_Read;
p1=D6_Read;
if (p1==LOW && p2==HIGH && p3==HIGH) {mode++;
if (mode>9)
{
mode=1;
}
switch (mode) {
case 1:
Serial.println("mode: PWM Frequency HZ"); // Частота основного сигнала
break;
case 2:
Serial.println("mode: PWM Duty %"); // Ширина оснеовного сигнала
break;
case 3:
Serial.println("mode: Shift TT impulse uS"); // сдвиг второго импульча относительно первого
break;
case 4:
Serial.println("mode: Duty TT impulse uS"); // ширина второго импульса
break;
case 5:
Serial.println("mode: Impulses packet"); // пачкоген. количество импульсов
break;
case 6:
Serial.println("mode: Pause between impulses uS"); // пауза между импульсами в пакете
break;
case 7:
Serial.println("mode: Second cycle ON/OFF"); // включение импульса во втором полупериоде
break;
case 8:
Serial.println("mode: Save Data"); // включение импульса во втором полупериоде
break;
case 9:
Serial.println("mode: Load Data"); // включение импульса во втором полупериоде
break;
// default:
}
delay_ms(300);
}
if (p3==LOW && p2==HIGH && p1==HIGH)
{
switch (mode){
case 1:
f++;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(f);
break;
case 2:
duty++;
if (duty>255) duty=255;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(duty);
break;
case 3:
shift++;
Serial.println(shift);
break;
case 4:
if (dutyTT==0){
detachInterrupt(0);
attachInterrupt(0, Kick,RISING );
}
dutyTT++;
Serial.println(dutyTT);
break;
case 5:
packet++;
Serial.println(packet);
break;
case 6:
packet_del++;
Serial.println(packet_del);
break;
case 7:
cycle=1;
attachInterrupt(1, KickInv,FALLING );
Serial.println("Second cycle ON!");
break;
case 8:
WriteEEPROM_Long(0, f);
WriteEEPROM_Byte(10, duty);
WriteEEPROM_Long(15, shift);
WriteEEPROM_Long(25, dutyTT);
WriteEEPROM_Byte(35, packet);
WriteEEPROM_Byte(36, packet_del);
WriteEEPROM_Byte(37, cycle);
Serial.println("Data saved!");
break;
case 9:
f = ReadEEPROM_Long(0);
duty = ReadEEPROM_Byte(10);
shift = ReadEEPROM_Long(15);
dutyTT = ReadEEPROM_Long(25);
packet = ReadEEPROM_Byte(35);
packet_del = ReadEEPROM_Byte(36);
cycle = ReadEEPROM_Byte(37);
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
if (cycle==1) attachInterrupt(1, KickInv,FALLING );
else detachInterrupt(1);
Serial.println("Data loaded!");
break;
}
delay_ms(100);
}
if (p2==LOW && p1==HIGH && p3==HIGH)
{
switch (mode){
case 1:
f--;
if (f<50)f=50;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(f);
break;
case 2:
duty--;
if (duty<0) duty=0;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(duty);
break;
case 3:
shift--;
if (shift<=0)shift=1;
Serial.println(shift);
break;
case 4:
dutyTT--;
if(dutyTT<=0){dutyTT=0;
detachInterrupt(0);
attachInterrupt(0, Kick1,RISING );
Serial.println(dutyTT);
}
break;
case 5:
packet--;
if (packet<1)packet=1;
Serial.println(packet);
break;
case 6:
packet_del--;
if (packet_del<0)packet_del=0;
Serial.println(packet_del);
break;
case 7:
cycle=0;
detachInterrupt(1);
Serial.println("Second cycle OFF!");
break;
case 8:
WriteEEPROM_Long(0, f);
WriteEEPROM_Byte(10, duty);
WriteEEPROM_Long(15, shift);
WriteEEPROM_Long(25, dutyTT);
WriteEEPROM_Byte(35, packet);
WriteEEPROM_Byte(36, packet_del);
WriteEEPROM_Byte(37, cycle);
Serial.println("Data saved!");
break;
case 9:
f = ReadEEPROM_Long(0);
duty = ReadEEPROM_Byte(10);
shift = ReadEEPROM_Long(15);
dutyTT = ReadEEPROM_Long(25);
packet = ReadEEPROM_Byte(35);
packet_del = ReadEEPROM_Byte(36);
cycle = ReadEEPROM_Byte(37);
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
if (cycle==1) attachInterrupt(1, KickInv,FALLING );
else detachInterrupt(1);
Serial.println("Data loaded!");
break;
}
delay_ms(100);
}
if (p3==LOW && p2==HIGH && p1==LOW && mode==1)
{
f=f+100;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(f);
delay_ms(100);
}
if (p2==LOW && p1==HIGH && p3==LOW && mode==1)
{
f=f-100;
if (f<50)f=50;
success = SetPinFrequencySafe(pwm, f);
pwmWrite(pwm, duty);
Serial.println(f);
delay_ms(100);
}
//analogWrite(9,30);
goto label;
}
void Kick()
{ pac=0;
delay_us(shift);
while(pac<packet)
{
D10_High;
delay_us(dutyTT);
D10_Low;
if(packet_del>0)delay_us(packet_del);
pac++;
}
}
void Kick1()
{ pac=0;
delay_us(shift);
while(pac<packet)
{
D10_High;
D10_Low;
pac++;
}
}
void KickInv()
{ pac=0;
delay_us(shift);
while(pac<packet)
{
D10_High;
delay_us(dutyTT);
D10_Low;
if(packet_del>0)delay_us(packet_del);
pac++;
}
}
Есть желание? помоги дороботать! Частота от 1,0 до 2,0 МГЦ не реализована. Нужно подключать модуль AD9850
/Сократ/
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Эффект увеличения мощности поймали с Вашим прибором?ua4yhz пишет:
М-да,у моего китайского ATTEN-а частоту можно выставить 1 милиГц,да вот только загвоздка однаВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]Mining пишет: Abadiya, для начала на Arduino Due надо создать два генератора прямоугольных импульсов с возможностью точной регулировки частоты, скважности и сдвиг фазы.
Вот уже писал здесь:
Для меня реализацию на МК я вижу два варианта в два этапа.
Вариант 1. Ручной режим.
1.Создать генератор прямоугольных импульсов для Push-pull.
1.1.Частота от0до60кГц, ручная регулировка энкодером с минимальным шагом 0,1 Гц(лучший вариант 0,01Гц).
1.2.Скважность регулируемая, ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.Создать генератор прямоугольных импульсов для накачки Тесла.
2.1. Частота от 1,0 до 2,0 МГЦ, ручная регулировка энкодером с минимальным шагом 0,1 Гц (лучший вариант 0,01Гц).
2.2.Скважность регулируемая, ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.3 Сдвиг фазы регулируемый, ручной режим энкодером с минимальным шагом 1о
Вариант 2. Ручной режим.
1.Создать генератор прямоугольных импульсов для push-pull.
1.1.Частота от 0до60кГц, ручная регулировка энкодером с минимальным шагом 0,1 Гц(лучший вариант 0,01Гц).
1.2.Скважность регулируемая, ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.Создать генератор нано-импульсов.
2.1. Частота в диапазоне push-pull от 0 до 60кГц, ручная регулировка энкодером с минимальным шагом 0,1 Гц (лучший вариант 0,01Гц).
2.2.Длительность импульса от 10 до 300Нс(можно от 50 до 200Нс), ручной режим энкодером с минимальным шагом 0,1% (лучший вариант 0,01%).
2.3 Сдвиг фазы регулируемый, ручной режим энкодером с минимальным шагом 1о
Все параметры вывожу на двустрочный дисплей типа Lcd1602
(Использую Arduino 1602 LCD KeyPad Shield)
В меню вхожу с помощью кнопок.
После того как в ручном режиме получаю эффект работы установки без вмешательства от внешней подпитки и тогда Второй этап сделать обратные связи для автоподстройки.
Вложение не найдено
Частота "гуляет" 100 Гц туда и столько же обратно...(прогревать нужно не менее 4 часов чтобы получить точность 5*10 -6).
Чтобы получить точность в 0.01 Гц опорник рубидиевый ставить нужно,а он денег стоит столько,что на них можно 100 ардуинок купить оптом.Ну или на крайняк по спутникам GPS синхронизироваться,но тоже столько же бабла это будет стоить,сколько и рубидий.Проще купить например Г4-158 до 100 МГц или Г4-156 до 130 МГц.Ещё и на бочёнок пива останется,чем из г... конфету строить.
/Сократ/
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
Оптимизируем digitalWrite на Arduino
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
О. Спасибо. Просто не очень понял по руски.Mining пишет:
Это он видимо запускает "Монитор порта" в Arduino Software (IDE) и смотритtesla-nsk пишет: А что значит "Все параметры выводятся на PC терминал." ? У Вас какая то оболочка стоит на PC ?
Сейчас увидел это в sketch
Serial.begin(115200);
Serial.println("Init device");
Serial.println("mode: PWM Frequency HZ");
InitTimersSafe();
bool success = SetPinFrequencySafe(pwm, f);
/Сократ/
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
А вот это случаем не то для DUE над чем Вы трудитесьMagistrTNT пишет:
Получается с помощью внутрисхемного отладчика записывать и отлаживать програмы написанные на С. Пока не получилось для этой цели запустить встроенный программатор хотя коды и програмы для него нашел. Если получится запустить то каждый сможет заливать в него не только скейтчи но и нармальные Програмы на С и ассемблере без использования внешних устройств.Mining пишет:
Вот только нет на ней кварца 32,768КГц для внутренних часов.MagistrTNT пишет:
Выглядит почти как родная.ВНИМАНИЕ: Спойлер! [ Нажмите, чтобы развернуть ] [ Нажмите, чтобы скрыть ]
А так все работает, ШИМ выдает до 42МГерц как научил наш Канадский соотечественник.
Как у Вас успехи с Due?
А кварц надо допоять без него может не все правельно функционировать.
arduino.ru/forum/programmirovanie/arduin...druzya#comment-30518
Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.
