Ардуино: 50 Гц на цифровых выходах

photomuza
Offline
Зарегистрирован: 16.09.2021

Код (лишнее удалил):

01#include <Servo.h>
02 
03Servo FwdPin_A;
04Servo BwdPin_A;
05Servo FwdPin_B;
06Servo BwdPin_B;
07 
08void setup() {
09  FwdPin_A.attach(2); //подключения к пинам драйвера L298N (здесь 50 Гц)
10  BwdPin_A.attach(3); //подключения к пинам драйвера L298N (здесь 50 Гц)
11  FwdPin_B.attach(4); //подключения к пинам драйвера L298N (здесь 50 Гц)
12  BwdPin_B.attach(5); //подключения к пинам драйвера L298N (здесь 50 Гц)
13  
14}
15void loop() {
16  NRF24L01();
17}
18void NRF24L01() {
19}

Видео - https://www.youtube.com/watch?v=pbC6X-zLaR0

Что не так с кодом, откуда 50 Гц?
Сразу чтоб не было вопросов: ардуину менял, это не наводки (см. видео). Такое только если в коде есть #include <Servo.h>.

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

шимить можно только по пинам ENA и ENB если ничего не путаю...

            /***L298N***/   
const int in1 = 4;    // direction pin 1
const int in2 = 7;    // direction pin 2
const int ena = 5;    // PWM pin to change speed
const int in3 = 8;    // direction pin 1
const int in4 = 12;   // direction pin 2
const int enb = 6;    // PWM pin to change speed
int fspeed;           // forward speed 
int lr;               // положение руля   
 

Да и библиотека тебе зачем? так напрямую всё делает, смотри код по ссылке, что я давал для тележки, там вся математика написана для твоих двух двигателей осталось радиоканал приаттачить )))

 

rkit
Offline
Зарегистрирован: 23.11.2016

photomuza пишет:

Что не так с кодом, откуда 50 Гц?

Вот отсюда, может быть?

FwdPin_A.attach(2);

Чет у меня пригорает от таких тупых вопросов. Ты то ли тролль, то ли наркоман какой-то

photomuza
Offline
Зарегистрирован: 16.09.2021

ua6em пишет:

шимить можно только по пинам ENA и ENB если ничего не путаю...

Прошил только D5 и D6 (ENA и ENB), правильно? Шумит.

ua6em пишет:

осталось радиоканал приаттачить )))

Ну, если бы я мог приаттачить... Мне просто страшно любопытно, откуда прет четкий сигнал 50 Гц? Да, я видел в других скетчах, что Servo.h не используют. Но мне так программер написал, а я подумал, что-то с питанием у меня не так и принял работу, а он там после принятия заказа больше и не появляется. Вот теперь допер. Код по ссылке тоже видел, но выковыривать нужное и приделывать к своему... Я уже пытаюсь, но пока безуспешно.

 

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

photomuza пишет:

ua6em пишет:

шимить можно только по пинам ENA и ENB если ничего не путаю...

Прошил только D5 и D6 (ENA и ENB), правильно? Шумит.

ua6em пишет:

осталось радиоканал приаттачить )))

Ну, если бы я мог приаттачить... Мне просто страшно любопытно, откуда прет четкий сигнал 50 Гц? Да, я видел в других скетчах, что Servo.h не используют. Но мне так программер написал, а я подумал, что-то с питанием у меня не так и принял работу, а он там после принятия заказа больше и не появляется. Вот теперь допер. Код по ссылке тоже видел, но выковыривать нужное и приделывать к своему... Я уже пытаюсь, но пока безуспешно.

 

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

photomuza
Offline
Зарегистрирован: 16.09.2021

Там у вас к L298n шесть контактов ( у него 4)  - уже непонятка.

ua6em, как вам ЛС написать или мэйл, я не вижу здесь ничего.

b707
Offline
Зарегистрирован: 26.05.2017

photomuza пишет:

Что не так с кодом, откуда 50 Гц?
Сразу чтоб не было вопросов: ардуину менял, это не наводки (см. видео). Такое только если в коде есть #include <Servo.h>.

смешной вы...

А в документацию заглянуть?

Период обновления сигнала в библиотеке <Servo.h> - 20мс. какой частоте это соответвует - сами посчитаете или калькулятор дать?

lilik
Offline
Зарегистрирован: 19.10.2017

ТС!, вот это заход с козырей! библиотека сервоприводов управляет обычными моторами?...

А зачем так? В чём прикол?

b707
Offline
Зарегистрирован: 26.05.2017

lilik пишет:

ТС!, вот это заход с козырей! библиотека сервоприводов управляет обычными моторами?...

А зачем так? В чём прикол?

сказано же, "ему так программер написал"... видно такой попался, любит эту либу :)

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

photomuza пишет:

Там у вас к L298n шесть контактов ( у него 4)  - уже непонятка.

ua6em, как вам ЛС написать или мэйл, я не вижу здесь ничего.

ответил

lilik
Offline
Зарегистрирован: 19.10.2017

b707 пишет:

lilik пишет:

ТС!, вот это заход с козырей! библиотека сервоприводов управляет обычными моторами?...

А зачем так? В чём прикол?

сказано же, "ему так программер написал"... видно такой попался, любит эту либу :)

Я не сразу понял, это заказ на управление 2 моторами кто то сделал...

Посмотрел второй ролик ТС. Вроде исполнитель сделал вариант с двумя независимыми джойстиками на каждый мотор. Но  из объяснений заказчика вообще ничего не ясно.

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

lilik пишет:

b707 пишет:

lilik пишет:

ТС!, вот это заход с козырей! библиотека сервоприводов управляет обычными моторами?...

А зачем так? В чём прикол?

сказано же, "ему так программер написал"... видно такой попался, любит эту либу :)

Я не сразу понял, это заказ на управление 2 моторами кто то сделал...

Посмотрел второй ролик ТС. Вроде исполнитель сделал вариант с двумя независимыми джойстиками на каждый мотор. Но  из объяснений заказчика вообще ничего не ясно.

на библиотеке servo.h  задумку эту в принципе нельзя реализовать, она не синхронная, будут сквозняки, история волшебного дыма довольно близка, но подход оригинальный, весьма )))

PS эх, не понять нам широту и размах русской души ...

rkit
Offline
Зарегистрирован: 23.11.2016

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

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

rkit пишет:

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

не, серву он сам воткнул, это с другого скетча видимо...кстати у Гайвера  тоже уши торчали от этого скетча читабельно по Node1... и т.д.

photomuza
Offline
Зарегистрирован: 16.09.2021

Правильный ответ - https://arduino.stackexchange.com/questions/31810/servo-attach-paralyzing-one-motor-on-l298n

"The Servo library uses Timer 1 to create the servo control signal. That means it can run the servo on any pin or combination of pins, and at the 50Hz speed that a servo likes best.
    
However, pins 9 and 10 also use Timer 1 to create the PWM signal."

b707
Offline
Зарегистрирован: 26.05.2017

photomuza пишет:

Правильный ответ - https://arduino.stackexchange.com/questions/31810/servo-attach-paralyzing-one-motor-on-l298n

"The Servo library uses Timer 1 to create the servo control signal. That means it can run the servo on any pin or combination of pins, and at the 50Hz speed that a servo likes best.
    
However, pins 9 and 10 also use Timer 1 to create the PWM signal."

а я вам что в #6 написал? не это же самое? :)

Зачем же так тупить...

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

Обычно двигатели стараются ШИМить на частотах не создающих неприятных звуковых ощущений:
 

01//  Делители таймеров на 490Гц
02#ifdef PWM_490  // 490Гц CLK/64
03  constexpr byte prescaler0 = bit(CS00) | bit(CS01);
04  constexpr byte prescaler1 = bit(CS10) | bit(CS11);
05  constexpr byte prescaler2 = bit(CS22);
06#endif
07 
08//  Делители таймеров на 1 кГц
09//
10#ifdef PWM_980  //  на самом деле 980Гц CLK/64 для FAST PWM
11  constexpr byte prescaler0 = bit(CS00) | bit(CS01);
12  constexpr byte prescaler1 = bit(CS10) | bit(CS11);
13  constexpr byte prescaler2 = bit(CS22);
14#endif
15 
16//  Делители таймеров на 4 и 8 кГц
17//
18#ifdef PWM_4000 // 4 кГц  CLK/8
19  constexpr byte prescaler0 = bit(CS01);
20  constexpr byte prescaler1 = bit(CS11);
21  constexpr byte prescaler2 = bit(CS21);
22#endif
23 
24#ifdef PWM_8000 // 8кГц (на самом деле 7812.5 Гц) CLK/8 для FAST PWM
25  constexpr byte prescaler0 = bit(CS01);
26  constexpr byte prescaler1 = bit(CS11);
27  constexpr byte prescaler2 = bit(CS21);
28#endif

 

photomuza
Offline
Зарегистрирован: 16.09.2021

b707 пишет:

а я вам что в #6 написал? не это же самое? :)

Да.

lilik
Offline
Зарегистрирован: 19.10.2017

photomusa, не удержался и глянул ролик на вашем канале.

https://www.youtube.com/watch?v=b-nCEyQyjFc

А вы прикольный человек :-)

Если хотите (как мне показалось) что бы ехала, посмотрите вот этот ролик, может поможет.

https://www.youtube.com/watch?v=nkqesLSXe4Q

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

lilik пишет:

photomusa, не удержался и глянул ролик на вашем канале.

https://www.youtube.com/watch?v=b-nCEyQyjFc

А вы прикольный человек :-)

Если хотите (как мне показалось) что бы ехала, посмотрите вот этот ролик, может поможет.

https://www.youtube.com/watch?v=nkqesLSXe4Q

это не он, а реализатор прошивки...
мы многое здесь видели, но вот использование в качестве ШИМ библиотеки Servo.h - впервые )