Zero Cross и Timer для проблемы управления SCR ..(Решен)

Raceautoelectro
Солнце 2 июля 2017 г., 8:36 вечера
Привет, у меня есть небольшая проблема с таймерами; Таймер меняется, я - это нечто простое, но я не нахожу его ...
https: // www.YouTube.com/watch?V = I-NWHMR ... e = youtu.быть Мой код char *myStr="Hello world";

Стивестронг
Пн, 3 июля 2017 г. 12:46
Вы поймете проблему из своего описания?
Потому что я этого не сделаю.

Raceautoelectro
Пн, 3 июля 2017 г., 18:40
Stevestrong, Timer1.setPeriod (5 * 1000); не ведет себя так, как должно ... Период меняется, в фильме вы можете увидеть сигнал по сравнению с нулевым крестом . Извините за мой плохой английский, надеюсь, вы понимаете на этот раз .

Raceautoelectro
Пн, 3 июля 2017 г. 18:54
Я тоже пытаюсь waitfor 0 /t 1 2> NUL %1\dfu-util.exe -l -d %2 -a %3 -s %4 -D %5 %1\dfu-util.exe -l -d %2 -a %3 --reset-stm32

Пито
Пн, 3 июля 2017 г., 19:36
Таким образом, желтый сигнал представляет собой выход ZCD (детектор с нулевым детектором), а на падающем крае сигнала ZCD (PB1 ZCD_PIN, вход) вы хотите запустить таймер1, такой как он дает активный низкий сигнал (PB0 LED_PIN, выход) длины XX Microsecs (синий сигнал).
Но активная низкая продолжительность Blue_Signal (LED_PIN) меняется (он растет со временем) - это проблема?

Raceautoelectro
Пн, 3 июля 2017 г., 19:58
Пито, эксплуатационно : | , И после роста он становится более низкой ценности и снова начнет расти снова .

Пито
Пн, 3 июля 2017 г., 8:21 вечера
Что, когда вы добавляете перед настройкой ()
Sketch uses 27,180 bytes (1%) of program storage space. Maximum is 2,097,152 bytes. Global variables use 14,680 bytes of dynamic memory.

Raceautoelectro
Пн, 3 июля 2017 г. 20:37
Пито, не работает eeeuk: 13: ошибка: 'timer1' не называет типа

Таймер1.setCompare (timer_ch1, 1);

^


«Timer1» не называет тип

ZMEMW16
Пн, 3 июля 2017 г., 8:58 вечера
та же ошибка
Стивен

Пито
Пн, 3 июля 2017 г., 21:06
Ребята, arm-none-eabi-objcopy -I binary -O elf32-big generic_boot20_hytiny.bin generic_boot20_hytiny.elf

Raceautoelectro
Пн, 3 июля 2017 г., 21:17
Я попробовал все комбинацию, мой разум с любопытством способен :))) (все еще есть много для обучения) . Я также пытаюсь попробовать Hardwaretimer Timer1 (1); но это не будет компилироваться (C: \ users \ raceautoelectroctro \ documents \ arduino \ ardware \ arduino_stm32 \ stm32f1 \ cores \ maple/hardwaretimer.CPP: 48: множественное определение `timer1 ') ... Я также постараюсь удалить, переместить то, что я думаю, что это конфликты ... Но не повезло .

Пито
Пн, 3 июля 2017 г., 21:25
Будьте креативны :)
Это компилируется здесь: # jlink upload tools.jlink_upload.cmd=jlink_upload tools.jlink_upload.cmd.windows=jlink_upload.bat tools.jlink_upload.path.windows={runtime.hardware.path}/tools/win tools.jlink_upload.path.macosx={runtime.hardware.path}/tools/macosx tools.jlink_upload.path.linux={runtime.hardware.path}/tools/linux tools.jlink_upload.upload.params.verbose=-d tools.jlink_upload.upload.params.quiet= tools.jlink_upload.upload.pattern="{path}/{cmd}" "{build.path}/{build.project_name}.bin"

Raceautoelectro
Пн, 3 июля 2017 г., 21:40
Pito, с вами код ведет себя как мой код, полное представление о проблеме: https: // www.YouTube.com/watch?v = e5mkb-g ... e = youtu.быть

Пито
Пн, 3 июля 2017 г., 21:44
Поэтому, когда он достигает 5 мс (на основе вашего видео), он сбрасывается в ноль.

Raceautoelectro
Пн, 3 июля 2017 г. 9:50 вечера
Пито, да и хочу все время оставаться на 5 мс

Пито
Пн, 3 июля 2017 г. 9:51 вечера
Попробуйте с этим: // Touch screen library with X Y and Z (pressure) readings as well // as oversampling to avoid 'bouncing' // (c) ladyada / adafruit // Code under MIT License // Ported to STM32 by Jaret Burkett https://github.com/jaretburkett #ifndef _ADAFRUIT_TOUCHSCREEN_STM_H_ #define _ADAFRUIT_TOUCHSCREEN_STM_H_ #include class TSPoint { public: TSPoint(void); TSPoint(int16_t x, int16_t y, int16_t z); bool operator==(TSPoint); bool operator!=(TSPoint); int16_t x, y, z; }; class TouchScreen { public: TouchScreen(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym); TouchScreen(uint8_t xp, uint8_t yp, uint8_t xm, uint8_t ym, uint16_t rx); bool isTouching(void); uint16_t pressure(void); int readTouchY(); int readTouchX(); TSPoint getPoint(); int16_t pressureThreshhold; private: uint8_t _yp, _ym, _xm, _xp; uint16_t _rxplate; }; #endif

Raceautoelectro
Пн, 3 июля 2017 г. 9:59 вечера
Без изменений в областях : | Изменить: время уменьшается ... Freo от 5 мс до 0 .... Затем 5 снова

Пито
Пн, 3 июля 2017 г. 22:11
Я обновил источник, попробуйте, пожалуйста.
Не уверен, как
таймер.setCompare (timer_ch1, 1);
Работа.
Попробуйте прокомментировать это.

Raceautoelectro
Пн, 3 июля 2017 г. 22:18
Такое же задача растет (от 0 до 5 с, затем сбрасывается), с линией, которое растут, время меньше (это требует меньше, чем до 0 до 5 мс)

Пито
Пн, 3 июля 2017 г. 22:23
И попробуй, что происходит с
таймер.setCompare (timer_ch1, 0);


Также попробуйте #include //#include // Hardware-specific library //Adafruit_TFTLCD_8bit_STM32 tft; // Touch screen library with X Y and Z (pressure) readings as well // as oversampling to avoid 'bouncing' // This demo code returns raw readings, public domain #include #include #define YP PA2 // must be an analog pin #define XM PA1 // must be an analog pin #define YM PB8 // can be a digital pin #define XP PB9 // can be a digital pin // For better pressure precision, we need to know the resistance // between X+ and X- Use any multimeter to read it // For the one we're using, its 300 ohms across the X plate TouchScreen ts = TouchScreen(XP, YP, XM, YM); /************************** SETUP ******************************/ void setup(void) { Serial.begin(9600); } /* Setup */ /*************************** LOOP ********************************/ void loop(void) { // a point object holds x y and z coordinates // pinMode(PA3,OUTPUT); // digitalWrite(PA3,HIGH); /* pinMode(PA1, INPUT_PULLDOWN); pinMode(PA1, INPUT_ANALOG); pinMode(PA2, INPUT_PULLUP); pinMode(PA2, INPUT_ANALOG); */ TSPoint p = ts.getPoint(); // Serial.print("A0 = "); Serial.print(analogRead(PA0)); Serial.print("\tA1 = "); Serial.print(analogRead(PA1)); Serial.print("\tA2 = "); Serial.println(analogRead(PA2)); // Serial.print("\tA3 = "); Serial.println(analogRead(PA3)); // we have some minimum pressure we consider 'valid' // pressure of 0 means no pressing! if (p.z > ts.pressureThreshhold) { Serial.print("X = "); Serial.print(p.x); Serial.print("\tY = "); Serial.print(p.y); Serial.print("\tPressure = "); Serial.println(p.z); } /* Serial.print("\tX = "); Serial.print(p.x); Serial.print("\tY = "); Serial.print(p.y); Serial.print("\tPressure = "); Serial.println(p.z); */ delay(2000); } /* Loop */

Raceautoelectro
Пн, 3 июля 2017 г. 22:37
таймер.setCompare (timer_ch1, 0); ничего не меняет и с #include

Raceautoelectro
Пн, 3 июля 2017 г. 22:47
Этот код работает, большое спасибо, пито ! #include #include #include SPIClass SPI_2(2); //Create an instance of the SPI Class called SPI_2 that uses the 2nd SPI Port #include #include "streaming.h" /****** Display stuff *******/ #include "Adafruit_GFX_AS.h" #include "Adafruit_ILI9341_STM.h" #define TFT_DC PB6 //Data/Command #define TFT_CS PB7 //Chip select #define TFT_RST PB9 /*For hardware SPI channel 1: * PA5 SCK * PA6 MISO * PA7 MOSI */ // Create TFT display of the name tft Adafruit_ILI9341_STM tft = Adafruit_ILI9341_STM(TFT_CS, TFT_DC, TFT_RST); int w = 0; int h = 0; //w & h of the tft to make calculations easier /****** Touch screen stuff ******/ #include #define TS_CS PB8 XPT2046_Touchscreen ts(TS_CS); /****** Temp reading stuff ********/ #include #define MAX_CS PB12 //SPI.setModule(2); MAX31855 thermocouple(MAX_CS);

Пито
Втюю 04 июля 2017 г., 7:32 утра
Большой!!
:)

Дэнниф
Втюл 04 июля 2017 г., 17:13
Мне кажется, что для чего -то такого простого код чрезмерно сложный.

Ваша задача может быть сломана до двух частей:

1) После того, как будет обнаружен нулевой пересечение, перезапустите таймер и сбросьте выходные контакты;
2) Как только таймер переполнится, переверните выходной штифт. Нет смысла работать на таймере здесь вообще.

Это кусок кода, который я написал для Dimmer (Cosine Mode Commutation для линейного светового вывода). Я воспроизвел соответствующую часть здесь для демонстрации.
SPI.beginTransaction(SPISettings(, ...));

Rogerclark
Вт, 04 июля 2017 г., 21:56
Это действительно интересно..

Спасибо за публикацию.

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

Интересно, какое оборудование вы используете для обнаружения нуля. Я нашел проблемы с простого оборудования E.глин. Просто оптокупа, так как она может вмешаться в пользу эксплуатации, если у вас шумная электрическая нагрузка на одну и ту же схему входной сети.

Я также проделал некоторую работу по сопоставлению доли власти с доли задержки, чтобы я мог, например, выбрать определенный процент власти.
Потому что задержка 25 % не приводит к 75 % мощности из -за формы синусоидальной волны.

Но, в конце концов, я не использовал проект, и я не совсем уверен, куда я поместил код

Дэнниф
Ср. 5 июля 2017 г. 15:36
Я использовал резистор. Первоначально это было для диммера, а затем регулируемого источника питания.

Схема по существу такая же, как и ST в примечании применения в калибере HSI. Код в значительной степени следует за применением применения микрочипов на Dimmers.

Код прост. Единственное, что интересно - это офлайн расчет таблицы поиска вверх.

Надеюсь, это поможет.