контроллер ручки газа на детскую машинку

Автор ELITE, 30 Сен. 2022 в 16:50

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

ELITE

Помаленьку АПгрейдирую квадроцикл ребенка
2 года - первые попытки рулить...
3 года - уверено рулит, хотя часто отвлекается и еще не может правильно рассчитать сложные маневры (сбивает углы задними колесами, сложно рулить задним ходом)
4 года - правтически не цепляет и не врезается никуда, почти не отвлекается (даже если отвлекается, удерживает траекторию движения) , боле-менее нормально рулит задним ходом...
...
что уже было сделано
1) аккумултор заменен на литий 3s16p - позволило значимо увеличить время катания (примерно 1 час по бездорожью, до 3 часов по ровной дороге)
2) переделана подвеска , добавлены пружины (ход 3 см) , задняя подностью переделана , полунезависимая, подпружиненная - на бездорожье и щебенке значимо стало комфортнее ребенку, улучшено сцепление с дорогой за счет подвести (колеса меньше и реже подвисают)
3) силовая честь переделана на реле , ибо пиковые токи огромны!
4) установлено еще 2 мотора - на передние колеса! = теперь полный привод!! - проходимость просто бомбическая!!
---
Ну и теперь добрался до перехода с педали на ручку газа
С китая заказал ручку
Контроллер реализовал на МК AtTiny85

пока что выполняет единственную функцию = ручка газа - ШИМ моторов...

Скетч простейший, без каких либо изыской, защит, прибамбасов  = дальше он будет еще дополнятся и усложнятся, нол минимально этого достаточно!
Всё сделано под ардуину (среда ардуины и SPI программатор из ардуино мини)


//#define F_CPU 1200000UL //(1.2мгц)
#include <avr/io.h>
#include <avr/interrupt.h>

#define MOTOR PB0 // OC0A (5)
#define STOP PB1 // OC0B (6)
#define GAZ PB4 //ADC2 (3)
#define P_IN PB3 //  (2)
#define P_OUT PB2 //  (7)
uint8_t stp = 0;

// Обработчик прерывания по завершению преобразования АЦП
ISR(ADC_vect)
{
  // Записываем значение, полученное на выходе АЦП в регистры сравнения таймера.
  // Здесь же, задаём минимальный порог свечения светодиода, после которого он будет гарантированно гаснуть
  uint16_t t = ADCH;
  t = (t < 46) ? 0 : (t-45);
  t = t * 164 / 100;
  //t = (t-45)*1.64; //подгоняю показания ручки 0.8-4.2В (45-200) под диапазон 0-255
  t = (t > 255) ? 255 : t;
  OCR0A = t;
  OCR0B = t;
//  OCR0A=(t < 45) ? 0 : t;
//  OCR0B=(t > 200) ? 255: t;
}

int main(void)
{
  // выходы:
  DDRB |= (1 << MOTOR)|(1 << LED1); // выходы = 1
  PORTB &= ~((1 << MOTOR)|(1 << LED1)); // по умолчанию отключены = 0
  // Ручка газа (переменный резистор):
  DDRB &= ~(1 << GAZ); // вход = 0
  // Таймер для ШИМ:
  TCCR0A = 0xB1; // режим коррекции фазы ШИМ, неинверсный сигнал на выходе OC0A, инверсный - на выходе OC0B
  TCCR0B = 0x03; // предделитель тактовой частоты CLK/64
  TCNT0 = 0; // начальное значение счётчика
  OCR0A = 0; // регистр сравнения A
  OCR0B = 0; // регистр сравнения B
  // Настройка АЦП:
  ADMUX = 0x22; // опорное напряжение - VCC, левое ориентирование данных, выбран вход ADC2 (на нём висит перем. резистор)
  ADCSRA = 0xEA; // АЦП включен, запуск преобразования, режим автоизмерения, прерывание по окончанию преобразования, частота CLK/4
  ADCSRB = 0x00; // режим автоизмерения: постоянно запущено
  DIDR0 |= (1 << GAZ); // запрещаем цифровой вход на ноге аналогового входа
 
  sei(); //разрешаем глобально прерывания
 
  while(1)
  {
  }
}


как видим - тут аппаратный ШИИ по прерыванию
частота МК выбрана 8мгц
делитель 64

АЦП под стандартную ручку газа 0.8-4.2В на выходе которой

код с комментариями
размер минимальный (262 байта всего) - можно даже в tiny 10 зашить )

Oleg_

эко  вы  замарочились.....💪 , так то есть  контроллеры на 12в  под  педаль или  ручку  газа . Ток  10ампер .

ELITE

Цитата: Oleg_ от 30 Сен. 2022 в 21:38Ток  10ампер
есть - но 10А это для машинок с 1 3хх мотором годится..
есть на 25А (подороже) - это уже можно на один 550й мотор поставить...

У меня же ЧЕТЫРЕ 550х мотора... а это под полной нагрузкой порядка 100-120А...

Вот и изобретаю "велосипед"

+ ко всему в планах не только ручка газа, но и оставить педаль в роли ТОРМОЗА

Oleg_

Один  контроллер - один  мотор 🤷......
4  мотора  конечно накладно   получается .

ELITE

Цитата: Oleg_ от 04 Окт. 2022 в 20:44конечно накладно   получается
Ага - дороже самого квадрика получается...

а еще и не очень хорошо согласуются они...

ELITE

#5



Немного  ЛУТа.. припоя и срарых деталей и родилось вот что :)



Тестовая модель
МК tiny85
детали от платы гиросткутера (по сути всё имеется :) )

по схеме - за основу взято 2 варианта
Силовой

и 2 канала вспомогательнях

--
Так как это ШИМ - то важным является крутизна фронтов - а это на прямую от тока затвора зависит... готового драйвера не было (а покупать дороговато)
Собрал на транзиторах
Итого имелись транзисторы на ток 1.5А = что достаточно дял 1-2 силовых мосфетов
Поэтому решил сделать 4 группы по 2 мосфета
управляющий сигнал общий с предусилителя и инвертором на 3 транзисторах

Тестовый вариант проверил на шуруповерте и токе около 20А - мосветы нагреваются медленно.. (и это без радиатора!) = а значит всё работает :)

2 дополнительных канала на оптопаре для дополнительных цепей - думаю пойдет на управление реле (ибо надо реле тормоза и реле реверса тоже подключить...