Генератор для катушки Мишина

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

За основу проекта взята известная схема генератора для катушки Мишина на основе генератора на микросхеме XR2206 (174ГФ2) и усилителя мощности на микросхеме TDA7056.
В схему генератора введены цепи авутоматической подстройки частоты на резонансную частоту катушки на основе следующих компонентов: датчик тока - INA219, управление arduino nano, цепь управления частотой - DAC MCP4725 в связке с полевым транзистором КП103.
Микропроцессорное управление позволяет устранить недостатки генератора по этой схеме описанные к примеру здесь.

Реализован режим синуса и режим меандра, ручной и автоматический режим работы генератора.
Обмен данными между управляющим модулем и датчиками осуществляется по шине I2C.
Ручной и автоматический режимы реализованы полностью независимыми, то-есть при переводе генератора в ручной режим коммутация соответствует базовой схеме. В автоматическом режиме элементы регулировки частоты переключаются на цифровой блок DAC, а в качестве регулирующего частоту элемента использован полевой транзистор КП103.
 

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

Основа скетча:
 

 

Коды библиотеки:
INA219.H

 

INA219.CPP
 

Схема генератора:

Внешний и внутренний вид генератора:

 

Н_Андрей_Ю
Н_Андрей_Ю аватар
Offline
Зарегистрирован: 22.12.2016

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

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Н_Андрей_Ю пишет:

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

у меня на руках объективные данные СКТ (в динамике), они говорят совершенно о другом, дай Бог чтобы вам он никогда не понадобился!

Flikk
Offline
Зарегистрирован: 22.11.2017

А мне нравится идея, хочу повторить только на dds генераторе

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

А мне нравится идея, хочу повторить только на dds генераторе

Уже, только на макетной плате, до разработки новой платы руки еще не дошли, непонятно насколько высоко можно гнать по частоте от 300кГц, катушек пока не делалось, но датчик резонанса тот же )))

Flikk
Offline
Зарегистрирован: 22.11.2017

Заказал модуль на ad9833, усилитель останется на tda7056. Уже руки чешутся все собрать и проверить. А зачем высоко гнать по частоте, там же рабочий диапазон 300+-50 кГц

Flikk
Offline
Зарегистрирован: 22.11.2017

Хотел спросить, а в какую цепь вы включали датчик тока, он ведь измеряет падение постоянного напряжения, а на катушке переменка. Я ставил в цепь питания микросхемы усилителя, делал на тда7297. 

Pserg1977
Offline
Зарегистрирован: 03.02.2018

Есть продвижки?

Схема интересная!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pserg1977 пишет:

Есть продвижки?

Схема интересная!

Устройство реализовано!!!
В тех же габаритах сделана плата процессора и на PIC контроллере, программа на ассемблере.
То-есть, можно применить либо ардуино нано  либо самодельный контроллер не меня ничего в приборе.

Pserg1977
Offline
Зарегистрирован: 03.02.2018

Думаю пик в данном случае более уместен!!!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Хотел спросить, а в какую цепь вы включали датчик тока, он ведь измеряет падение постоянного напряжения, а на катушке переменка. Я ставил в цепь питания микросхемы усилителя, делал на тда7297. 

Основным потребителем тока в этой схеме является микросхема TDA-7056 поэтому меряю общий ток потребления, на резонансе он максимальный и равен при 9 вольтах питания порядка одного ампера, если микросхема исправна, на неисправной - вдвое меньше. На неисправной на осциллограмме питающего тока отсутствует тот эффект которому Мишин дал название эмплозия )))  (эффект перезаряда емкости контура)
Катушка - последовательный колебательный контур, эквивалентное сопротивление на частоте резонанса получилось порядка двух ом.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pserg1977 пишет:

Думаю пик в данном случае более уместен!!!


На пике другой алгоритм поиска резонанса, другой автор программы, делает это медленнее чем на ардуино...
Ждёмс, может кто предложит свой алгоритм поиска резонанса, так как железо по своему составу оптимально )))
Сейчас ведутся работы по генератору на ADхх33 что позволит подключать любые катушки с неизвестной резонансной частотой

По распиновке и размерам PIC уложен в конструктив ардуино нано ))) то-есть лёгким движением руки...превращается )))

Pserg1977
Offline
Зарегистрирован: 03.02.2018

Ну хоть что-нибудь опубликуйте. Спасибо за труд!

Н_Андрей_Ю
Н_Андрей_Ю аватар
Offline
Зарегистрирован: 22.12.2016

Как я и говорил пустая трата времени. Это из тойже оперы что и поиск "свободной энергии"

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pserg1977 пишет:
Ну хоть что-нибудь опубликуйте. Спасибо за труд!

Так основа опубликова выше, там указан режим измерения INA219 ну и библиотеки для работы с оной, далее измеряем, сравниваем, корректируем. На Пик контроллере нет аппаратного I2C, реализован программно.

Алгоритм обсуждался здесь

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Н_Андрей_Ю пишет:

Как я и говорил пустая трата времени. Это из тойже оперы что и поиск "свободной энергии"

а при чём здесь свободная энергия?
Аналогичный прибор сделан в Израиле как медицинский прибор, называется M1F, сертифицирован минздравом USA на лечение онкологии.
Исследования велись давно, не могу сказать, что Мишин не позаимствовал идеи этих исследований.
Только по частотам он значительно шире...

 

Pserg1977
Offline
Зарегистрирован: 03.02.2018

ua6em пишет:

Pserg1977 пишет:
Ну хоть что-нибудь опубликуйте. Спасибо за труд!

Так основа опубликова выше, там указан режим измерения INA219 ну и библиотеки для работы с оной, далее измеряем, сравниваем, корректируем. На Пик контроллере нет аппаратного I2C, реализован программно.

Алгоритм обсуждался здесь

 

Я ещё ардуинами не пользовался. Было бы не плохо увидеть схему целиком. Ну про платы....было бы сказочно просто. Может много хочу, ну как есть. Заранее благодарен.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pserg1977 пишет:

ua6em пишет:

Pserg1977 пишет:
Ну хоть что-нибудь опубликуйте. Спасибо за труд!

Так основа опубликова выше, там указан режим измерения INA219 ну и библиотеки для работы с оной, далее измеряем, сравниваем, корректируем. На Пик контроллере нет аппаратного I2C, реализован программно.

Алгоритм обсуждался здесь

 

Я ещё ардуинами не пользовался. Было бы не плохо увидеть схему целиком. Ну про платы....было бы сказочно просто. Может много хочу, ну как есть. Заранее благодарен.

Для этого надо сесть и специально этим заняться, к сожалению времени нет. Была надежда, что к проекту подключатся более компетентные программеры и реализуют свои познания на профессиональном уровне )))
Видимо никого не заинтересовал сей девайс.
Платы делались в Pcad так что доступен только формат pcb.
Да и повторять один к одному как-то не интересно.

PS можно купить готовое изделие, предложений масса, да и по цене будет дешевле, но из исследованных мной генераторов  ни один не работает в режиме стоячей волны, все в режиме бегущей волны, то-есть катушка работает не на своей резонансной частоте. Да и на осциллограмме "провальчика" нет.
Здесь реализована классика - именно тот режим, что публиковал Мишин в первых своих постах на Ютубе.

 

Pserg1977
Offline
Зарегистрирован: 03.02.2018

Ну хозяин барин. В любом случае, спасибо. А тех кого не заинтересовал, им сильно в голову вбили научную догму. Каждому своё.

Flikk
Offline
Зарегистрирован: 22.11.2017

Я делал на макетке схему, плюс датчик тока и усилитель TDA 7294 

Только еще подключал датчик тока по I2C и в ручном режиме смотрел показания тока потребления микросхемы усилителя.

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

Если кому нужет мой кривой скетч, могу выложить. И ручной генератор и с автоматической перестройкой с 270 кГц до 350кГц

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Я делал на макетке схему, плюс датчик тока и усилитель TDA 7294 

Только еще подключал датчик тока по I2C и в ручном режиме смотрел показания тока потребления микросхемы усилителя.

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

Если кому нужет мой кривой скетч, могу выложить. И ручной генератор и с автоматической перестройкой с 270 кГц до 350кГц

Выкладывай, посмотрю почему у тебя перебор частот медленный, у меня алгоритм двухпроходный, поправлю, но посмотреть не на чем, у меня AD9850,а она по другому программируется
Да, интересует напряжение питания и каков ток микросхемы. Еще виден ли на осциллограмме провал, так как на этой диаграмме . Естественно в точке питания контура
Если снимать осциллограмку с виточка, то  естественно чистейшая синусоида

Оригинальная схема и код видимо брались здесь?


 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Pserg1977 пишет:
Ну хозяин барин. В любом случае, спасибо. А тех кого не заинтересовал, им сильно в голову вбили научную догму. Каждому своё.

просто предмет сей не входит в круг их понятий...
Обоснований то масса, но что истина ведает только абсолют...
Самое главное, что есть эффект!

Flikk
Offline
Зарегистрирован: 22.11.2017

Вот схема по которой собирал. А скетч взял с http://edycube.blog.fc2.com/blog-entry-933.html. Вечером выложу свой скетч. По току питания усилителя могу сказать, что максимум был 130 мА мне показалось как-то маловато. Возможно микросхема усилителя брак, так как цена была рублей 5 за штуку

Pserg1977
Offline
Зарегистрирован: 03.02.2018

Здорово, жду скетч.

Заранее благодарен!!!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Если верить этому даташиту эта микросхема для этих целей не подходит,
Правильная TDA7056 наше всё.
Есть микросхемы для модемов    VDSL но я их еще не пытал, размах ножек мелковат для лута.
Код содран у англичанина

1const int SINE = 0x2000;                    // Define AD9833's waveform register value.
2const int SQUARE = 0x2028;                  // When we update the frequency, we need to
3const int TRIANGLE = 0x2002;                // define the waveform when we end writing.   

Ну не может жеж пояснение совпадать до буковки )))

Flikk
Offline
Зарегистрирован: 22.11.2017

Я использовал не 7294, а TDA 7297. И хоть у нее и стоит предел в 300кГц, но видимо она не тянет их, как и некоторые TDA7056. Собрал макетку по схеме "Дена"для проверки микросхемы, работает отлично, ток  выставлял до 500мА. Делаю сейчас плату под выложенную мной схему с TDA7056 и енкодерами, посмотрим как пойдет, надеюсь жена не выгонет из дома.

Я скетч подсмотрел на китайском сайте, а уж откуда там передрали фиг знает

Вот мой  код. Автоподстройка частоты по току питания усилителя, енкодеры не задействованы.

 

001#include <Rotary.h>           
002#include <SPI.h>
003#include <Wire.h>
004#include <LiquidCrystal_I2C.h>
005#include <Adafruit_INA219.h>
006 
007Adafruit_INA219 ina219;
008 
009// Set the LCD address to 0x27 for a 16 chars and 2 line display
010LiquidCrystal_I2C lcd(0x27, 20, 4);
011 
012const int SINE = 0x2000;                    // Define AD9833's waveform register value.
013const int SQUARE = 0x2020;                  // When we update the frequency, we need to
014const int TRIANGLE = 0x2002;                // define the waveform when we end writing.
015 
016int wave = 0;
017int waveType = SINE;
018int wavePin = 7;
019int freqUpPin = 2;                          // Define rotary encoder pins.
020int freqDownPin = 3;
021int stepUpPin = 5;
022int stepDownPin = 6;
023int current_mA_OLD = 0;
024int maxFreq = 0;
025const float refFreq = 25000000.0;           // On-board crystal reference frequency
026 
027const int FSYNC = 10;                       // Standard SPI pins for the AD9833 waveform generator.
028const int CLK = 13;                         // CLK and DATA pins are shared with the TFT display.
029const int DATA = 11;
030 
031Rotary r = Rotary(freqUpPin, freqDownPin);    // Rotary encoder for frequency connects to interrupt pins
032Rotary i = Rotary(stepUpPin, stepDownPin);    // Rotart encoder for setting increment.
033 
034long freq = 300000;               // Set initial frequency.
035long freqOld = freq;
036 
037long incr = 1000;
038long oldIncr = 1000;
039char disp_buf[16];
040 
041char* formText[3] = {
042  "      SINE",
043  "    SQUARE",
044  "  TRIANGLE",
045  };
046 
047char* stepText[18] = {
048  "       1Hz",
049  "       2Hz",
050  "       5Hz",
051  "      10Hz",
052  "      20Hz",
053  "      50Hz",
054  "     100Hz",
055  "     200Hz",
056  "     500Hz",
057  "   1,000Hz",
058  "   2,000Hz",
059  "   5,000Hz",
060  "  10,000Hz",
061  "  20,000Hz",
062  "  50,000Hz",
063  " 100,000Hz",
064  " 200,000Hz",
065  " 500,000Hz"
066};
067 
068int stepPointer = 6;
069//long  incr = 0;
070String units = stepText[stepPointer];
071String form = formText[wave];
072 
073void setup() {
074 
075  Serial.begin(9600);
076  uint32_t currentFrequency;
077     
078  Serial.println("Hello!");
079   
080  // Initialize the INA219.
081  // By default the initialization will use the largest range (32V, 2A).  However
082  // you can call a setCalibration function to change this range (see comments).
083  ina219.begin(0x40);
084  // To use a slightly lower 32V, 1A range (higher precision on amps):
085  ina219.setCalibration_32V_1A();
086  // Or to use a lower 16V, 400mA range (higher precision on volts and amps):
087  //ina219.setCalibration_16V_400mA();
088 
089  Serial.println("Measuring voltage and current with INA219 ...");
090   
091  pinMode(freqUpPin, INPUT_PULLUP);      // Set pins for rotary encoders as INPUTS and enable
092  pinMode(freqDownPin, INPUT_PULLUP);    // internal pullup resistors.
093  pinMode(stepUpPin, INPUT_PULLUP);
094  pinMode(stepDownPin, INPUT_PULLUP);
095  pinMode(wavePin, INPUT_PULLUP);
096 
097  // Configure interrupt and enable for rotary encoder.
098  PCICR |= (1 << PCIE2);
099  PCMSK2 |= (1 << PCINT18) | (1 << PCINT19);
100  sei();
101  SPI.begin();
102  delay(50);
103 
104  lcd.init();
105  lcd.backlight();
106  lcd.clear();  //
107  lcd.setCursor( 0, 0 );
108  lcd.print( "AD9833" );
109  lcd.setCursor( 0, 1 );
110  lcd.print( "Signal Generator" );
111  delay(1000);
112  lcd.clear();
113 
114  AD9833reset();                                   // Reset AD9833 module after power-up.
115  delay(50);
116  AD9833setFrequency(freq, SINE);                  // Set the frequency and Sine Wave output
117  updateDisplay();
118 
119}
120 
121void getStep() {
122  switch (stepPointer) {
123    case 0:  incr = 1; break;
124    case 1:  incr = 2; break;
125    case 2:  incr = 5; break;
126    case 3:  incr = 10; break;
127    case 4:  incr = 20; break;
128    case 5:  incr = 50; break;
129    case 6:  incr = 100; break;
130    case 7:  incr = 200; break;
131    case 8:  incr = 500; break;
132    case 9:  incr = 1000; break;
133    case 10: incr = 2000; break;
134    case 11: incr = 5000; break;
135    case 12: incr = 10000; break;
136    case 13: incr = 20000; break;
137    case 14: incr = 50000; break;
138    case 15: incr = 100000; break;
139    case 16: incr = 200000; break;
140    case 17: incr = 500000; break;
141  }
142}
143 
144void updateDisplay() {
145  getStep();
146  units = stepText[stepPointer];
147  //lcd.clear();
148  lcd.setCursor( 0, 0 );
149  lcd.print( "STEP: " );
150  lcd.print(units );
151 
152  lcd.setCursor( 0, 1 );
153  lcd.print("FRQ:");
154  if (freq < 1000) {
155    sprintf(disp_buf, "%10ld", freq);
156  }
157  else if (freq < 1000000) {
158    int freqL = freq % 1000;
159    int freqM = freq / 1000;
160    sprintf(disp_buf, "%6d,%03d", freqM, freqL);
161  }
162  else {
163    int freqL = freq  % 1000;
164    int freqM = (freq / 1000) % 1000;
165    int freqH = freq / 1000000;
166    sprintf(disp_buf, "%2d,%03d,%03d", freqH, freqM, freqL);
167  }
168  lcd.print(disp_buf);
169  lcd.print("Hz");
170   
171  form = formText[wave];
172  lcd.setCursor( 0, 2 );
173  lcd.print( "FORM: " );
174  lcd.print(form );
175 
176   
177  
178}
179 
180void loop() {
181 
182  float shuntvoltage = 0;
183  float busvoltage = 0;
184  float current_mA = 0;
185  float loadvoltage = 0;
186 
187  shuntvoltage = ina219.getShuntVoltage_mV();
188  busvoltage = ina219.getBusVoltage_V();
189  current_mA = ina219.getCurrent_mA();
190  loadvoltage = busvoltage + (shuntvoltage / 1000);
191   
192  Serial.print("Bus Voltage:   "); Serial.print(busvoltage); Serial.println(" V");
193  Serial.print("Shunt Voltage: "); Serial.print(shuntvoltage); Serial.println(" mV");
194  Serial.print("Load Voltage:  "); Serial.print(loadvoltage); Serial.println(" V");
195  Serial.print("Current:    "); Serial.print(current_mA); Serial.println(" mA");
196  Serial.println("");
197  lcd.setCursor( 0, 3 );
198  lcd.print( "Current: " );
199  lcd.print(round(current_mA));
200  lcd.print("mA");
201 
202  if (oldIncr != incr) {
203    updateDisplay();
204    oldIncr = incr;
205  }
206  // Check if push button on 'increment' rotary encoder is pushed and set Wave Type accordingly.
207  if (digitalRead(wavePin) == LOW) {
208    wave += 1;
209    if (wave > 2) wave = 0;
210    switch (wave) {
211      case 0: waveType = SINE; break;
212      case 1: waveType = SQUARE; break;
213      case 2: waveType = TRIANGLE; break;
214    }
215   // AD9833setFrequency(freq, waveType);     // Set AD9833 to frequency and selected wave type.
216   // updateDisplay();
217    //delay(200);
218  }
219  if (current_mA <= current_mA_OLD-4){
220    freq = 300000;
221    current_mA_OLD =0;
222  }
223if  ((current_mA) >= current_mA_OLD) {
224      
225if ((freq + incr) <= 350000) freq += incr;
226    current_mA_OLD = current_mA;
227     maxFreq = freq;
228    if (freq <= 300000)  freq = 300000;
229    if (freq >= 350000) freq = 350000;
230    //delay(10);
231  if (freq != freqOld) {                    // If frequency has changed, interrupt rotary encoder
232    AD9833setFrequency(freq, waveType);     // must have been turned so update AD9833 and display.
233    updateDisplay();
234    freqOld = freq;                         // Remember new frequency to avoid unwanted display
235  }                                         // and AD9833 updates.
236}
237}
238// AD9833 documentation advises a 'Reset' on first applying power.
239void AD9833reset() {
240  WriteRegister(0x100);   // Write '1' to AD9833 Control register bit D8.
241  delay(10);
242}
243 
244 
245 
246// Set the frequency and waveform registers in the AD9833.
247void AD9833setFrequency(long frequency, int Waveform) {
248 
249  long FreqWord = (frequency * pow(2, 28)) / refFreq;
250 
251  int MSB = (int)((FreqWord & 0xFFFC000) >> 14);    //Only lower 14 bits are used for data
252  int LSB = (int)(FreqWord & 0x3FFF);
253 
254  //Set control bits 15 ande 14 to 0 and 1, respectively, for frequency register 0
255  LSB |= 0x4000;
256  MSB |= 0x4000;
257 
258  WriteRegister(0x2100);
259  WriteRegister(LSB);                  // Write lower 16 bits to AD9833 registers
260  WriteRegister(MSB);                  // Write upper 16 bits to AD9833 registers.
261  WriteRegister(0xC000);               // Phase register
262  WriteRegister(Waveform);             // Exit & Reset to SINE, SQUARE or TRIANGLE
263 
264}
265void WriteRegister(int dat) {
266 
267  // Display and AD9833 use different SPI MODES so it has to be set for the AD9833 here.
268  SPI.setDataMode(SPI_MODE2);
269 
270  digitalWrite(FSYNC, LOW);           // Set FSYNC low before writing to AD9833 registers
271  delayMicroseconds(10);              // Give AD9833 time to get ready to receive data.
272 
273  SPI.transfer(highByte(dat));        // Each AD9833 register is 32 bits wide and each 16
274  SPI.transfer(lowByte(dat));         // bits has to be transferred as 2 x 8-bit bytes.
275 
276  digitalWrite(FSYNC, HIGH);          //Write done. Set FSYNC high
277}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Вот мой  код. Автоподстройка частоты по току питания усилителя, енкодеры не задействованы.

нет ребята, всё не так, всё не так ребята )))

1. Надо определиться с полосой пропускания самой катушки по уровню к примеру 0,5, если есть генератор померь
2. Шагать надо с шагом равным полосе пропускания от нижней частоты до верхней к примеру от 250Кгц до 350Кгц
3. Как только на следующем шаге ток начинает падать, останавливаем и запоминаем эту частоту и вносим новые значения Fmin и Fmax и запускаем второй проход определения резонансной частоты, к примеру с шагом 500 герц, находим экстремум, выставляем частоту
С режимом первичной настройки всё
А вот дальше процедура удержания.
Процедуру первичной установки частоты вынести в setup.
С этими библиотеками INA219 я не экспериментировал, с теми что работал библиотеки есть в посте, там же и процедура настройки датчика тока

Насчет супруги не переживай, катушка очень хорошо и быстро снимает любую депрессию )))

Прямо тут и начну делать скетч!
ПРОСЬБА НЕ ЦИТИРОВАТЬ!!!
 

Используемые библиотеки:

INA219.h

 

 

INA219.cpp
 

Все сторонние библиотеки включаем в тело проекта, находиться будут файлами в папке проекта

Скетч сканера портов I2C:
 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

откуда брал свою библиотеку для дисплея? включу в тело проекта ту, что подвернулась )))

Flikk
Offline
Зарегистрирован: 22.11.2017

Про скетч все верно, я и сам понимаю что не то у меня. Библиотека с GITHUB https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Буду переделывать

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Про скетч все верно, я и сам понимаю что не то у меня. Библиотека с GITHUB https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Буду переделывать

Библиотеки заменил на твои, они более свежие, скомпилировалось.
1. Попробуй скетч, библиотеки надо поместить в папку скетча.
2. Если заработает, можешь показать осциллограмму?
 

PS компилирую на версии 1.8.2 под nano

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Про скетч все верно, я и сам понимаю что не то у меня. Библиотека с GITHUB https://github.com/fdebrabander/Arduino-LiquidCrystal-I2C-library

Буду переделывать

И что со скетчем, работает?

Flikk
Offline
Зарегистрирован: 22.11.2017

Пока руки не дошли. Все время уходит на зарабатывание денег.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Пока руки не дошли. Все время уходит на зарабатывание денег.

Так там делов на пять минут )))

Flikk
Offline
Зарегистрирован: 22.11.2017

Попробовал сетч. Компелируется, но после загрузки программа стопается на 118 строке

До этой строки все выполняется, как доходит, так и останавливается. Смотрел через SerialPrint();

Есть какие мысли?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Есть! Процедура должна выполняться сразу после включения питания. Перетащил ее в первую строку процедуры setup(); #26

Flikk
Offline
Зарегистрирован: 22.11.2017

Разобрался. В void setup(); нужно было добавить SPI.begin(); 

Алгоритм мне понятен и все логично, Ишим экстремум грубо, затем отрезок +- 20кГц пробегаем по 500Гц и находим точно максимум. Но нужно усреднять показания тока, слишком быстро меняются значения. По предложенному алгоритму у меня генератор стопается на 230кГц и бывает ещё на 330кГц. А реальная резонансная частота катушки 304кГц. Видимо автонастройка стопается на гармониках. Курим алгоритм дальше

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Разобрался. В void setup(); нужно было добавить SPI.begin(); 

Алгоритм мне понятен и все логично, Ишим экстремум грубо, затем отрезок +- 20кГц пробегаем по 500Гц и находим точно максимум. Но нужно усреднять показания тока, слишком быстро меняются значения. По предложенному алгоритму у меня генератор стопается на 230кГц и бывает ещё на 330кГц. А реальная резонансная частота катушки 304кГц. Видимо автонастройка стопается на гармониках. Курим алгоритм дальше

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

Строки 106 и 109 чуток поправил, константу задержки на накопление результата тока - тоже

 

Flikk
Offline
Зарегистрирован: 22.11.2017

Спасибо разобрался. Пока пытался заставить работать скетч переписал его на библиотеку Adafruit_INA219. 

Короче все заработало ток при резонансе держится на отметке 400 ма. Частота находится за 3 секунды примерно и держится уверенно. Подстройку сделал просто через условие, что если ток питания стал меньше максимального- то запускаем ещё раз цикл поиска ренанса. находится быстро и уверенно. 

Осциллографа пока нет и не могу снять форму и фазу тока и напряжения. 

От катушки чувствуется тепло если поднести ладонь, пока все

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

Спасибо разобрался. Пока пытался заставить работать скетч переписал его на библиотеку Adafruit_INA219. 

Короче все заработало ток при резонансе держится на отметке 400 ма. Частота находится за 3 секунды примерно и держится уверенно. Подстройку сделал просто через условие, что если ток питания стал меньше максимального- то запускаем ещё раз цикл поиска ренанса. находится быстро и уверенно. 

Осциллографа пока нет и не могу снять форму и фазу тока и напряжения. 

От катушки чувствуется тепло если поднести ладонь, пока все

скетч в студию

Flikk
Offline
Зарегистрирован: 22.11.2017

Работает, пробуйте хотя это тот же код что и у вас

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

я не попробую, у меня AD9833 пока еще нет )))
На фрутовской библиотеке скетч поменьше памяти забирает )))
Всё закинул в папку скетча, поправил кавычки и скомпилировал
Да, ток при 9 вольтах на исправной микросхеме будет и более 1 ампера, надо поправить в коде
учитывая этот параметр, как это будет выглядеть? (с библиотекой не разбирался)
 

sem_pai
Offline
Зарегистрирован: 02.03.2018

Здравствуйте!

С нетерпением жду продолжения проекта. Я делал такие генераторы на 2206. Люди пользуются. Отзывы отличные.

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

С уважением

Flikk
Offline
Зарегистрирован: 22.11.2017

По току в коде ничего и нет, находит максимум и все. Думаю нужно поискать как регулировать уровень сигнала с AD9833, библиотеку пока не смотрел.

Можно конечно прикрутить еще модуль електронного сопротивления, но это увеличивает бюджет

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Так прототипируйте, код уже рабочий. Рабочее напряжение питания 9 вольт, при 12 вольтах  токи будут очень большие, это то минимальное напряжение при котором на осциллограмме видна имплозия )))
С выхода AD9833 на вход TDA резисторный делитель.
Схема надеюсь понятна.
Дисплей подключается по шине I2C

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Flikk пишет:

По току в коде ничего и нет

Как это нет, смотрим строка 38 -  ina219.setCalibration_16V_400mA(); 

 

Flikk
Offline
Зарегистрирован: 22.11.2017

Сори, исправлюсь

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Вот так будет выглядеть под мои деталюшки:
 

 

AleksandrM
Offline
Зарегистрирован: 20.07.2017

Заработало.Долго возился Пришлось подредактировать  строку

080 ina219.begin(0x40);

в такой вид

080 ina219.begin();

Причину не знаю ,может кто подскажет?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

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

AleksandrM
Offline
Зарегистрирован: 20.07.2017

Сканер показывает правильный адрес 0х40

И еще наблюдаеться болтанка тока и частоты в пределах 10-15 милиампер и частоты в пределах килогерц 10-15....

Может из за монтажа .... Пока все на проводочках.... Или из за питания все питаю от USB

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Адрес распаять жёстко, запитать правильно, такой болтанки по частоте быть не должно, сказать что-то большее не смогу, так как не на чем поэкспериментировать. Как там рассчитывает ток библиотека от фрута мне не ведомо, предыдущая работала в режиме усреднения...
PS ёмкость контура 3000пф, активное сопротивление - 40 метров медяшки 0,5, индуктивность порядка 100