Форум РадиоКот https://radiokot.ru/forum/ |
|
Помогите найти подобие lb1838 но на 12вольт https://radiokot.ru/forum/viewtopic.php?f=61&t=175827 |
Страница 1 из 1 |
Автор: | vispower [ Вт мар 02, 2021 14:49:32 ] |
Заголовок сообщения: | Помогите найти подобие lb1838 но на 12вольт |
Нарыл с дисковода драйвер шагового движка lb1838, мне он очень понравился тем что можно тремя ножками моторчик крутить (ena1 и ena2 можно объединить), а значит на один контроллер можно их больше повесить, но у нее минус максимальное наряжение в 9вольт, нужно до 14вольт. Может кто знает подобный дривер, на большее напряжение. |
Автор: | kr5 [ Сб мар 06, 2021 17:32:26 ] |
Заголовок сообщения: | Re: Помогите найти подобие lb1838 но на 12вольт |
Стоимость и доступность сдвигового регистра серии 595 такова, что позволяет не обращать внимание на кол-во "ножек" в подобных задачах, а значит утверждение "понравился тем что можно тремя ножками моторчик крутить" не выдерживает критики и не может быть нормальным критерием для поиска драйвера. |
Автор: | vispower [ Вт мар 09, 2021 07:47:53 ] |
Заголовок сообщения: | Re: Помогите найти подобие lb1838 но на 12вольт |
Не согласен! Зачем мне на плате лишнее. У каждого свои тараканы |
Автор: | iddqd [ Пт апр 09, 2021 04:42:17 ] |
Заголовок сообщения: | Re: Помогите найти подобие lb1838 но на 12вольт |
Я как раз с флопаря сдул какой-то KA28xx (производитель - Fairchild). И шаговик оттуда же. По найденому даташиту до 15 вольтов держит. У него вообще по сути 2 сигнала, задающих полярность каждой фазы. Есть chip enable но он странный, я так и не понял на что влияет, ток через обмотки не вырубает. Впрочем с тем степпером и чипом не так уж важно, они с самого начала ОК насчет такого режима. Насколько это до сих пор производится и продается - хз. А что до сдвиговых регистров - ну, знаете?! Шаговикам все же какие-никакие времянки надо формировать, и когда это просто лапки, вон того шаговика переключить - одно, а когда кучу битов в регистр загонять, с точки зрения программирования и трекинга состояний кучи шаговиков это уже трэш какой-то. Вместо тривиального кода делающего что задумано будут какие-то костыли, потому что в лоб сменить в момент X состояние только потребных лапок не трогая остальные - уже ой. В таком случае может иметь смысл взять процик с чуть большим количеством лапок. |
Автор: | Morroc [ Ср апр 21, 2021 23:33:31 ] |
Заголовок сообщения: | Re: Помогите найти подобие lb1838 но на 12вольт |
Сколько же у вас ШД и с какой частотой их крутите чтобы это стало критично ? ) Код сильно отличаться не должен, просто дергать пины будете через функцию-прокладку. |
Автор: | Land [ Пт апр 22, 2022 14:20:50 ] |
Заголовок сообщения: | Re: Помогите найти подобие lb1838 но на 12вольт |
не знаю, вдруг кому пригодится. Код для lb1838 под атмегу8. СпойлерКод: #include <avr/io.h> #include <avr/interrupt.h> //---------- // Управление портом B //---------- #ifdef PORTB #define PORTB_OUT_ALL() (DDRB = 0xFF); #define PORTB_IN_ALL() (DDRB = 0x00); // Настройка порта B на выход по пинам #define PORTB_OUT(x) (DDRB |= (1 << x)) // Настройка порта B на вход по пинам #define PORTB_IN(x) (DDRB &= ~(1 << x)) // Вывод в порт B по пинам 1 #define PORTB_ON(x) (PORTB |= (1 << x)) // Вывод в порт B по пинам 0 #define PORTB_OFF(x) (PORTB &= ~(1 << x)) // Чтение из порта B по пинам #define PORTB_RD(x) (PINB & (1 << x)) // Инвертирование битов порта B #define PORTB_XOR(x) (PORTB ^= (1 << x)) // Вывод значения в порт #define PORTB_DATA_OUT(b) PORTB = b // Чтение из порта #define PORTB_DATA_IN() PINB //---------- #define EN1 1 #define EN2 2 #define IN 3 #define RVRS 0 #endif char i = 1; uint16_t steps = 0; char flag_STOP = 1; char flag_RVRS = 0; ISR(TIMER2_COMP_vect) { PORTB ^= (1 << EN1)|(1 << EN2); if(!i) {PORTB_XOR(IN); i = 2;} else; i--; steps--; OCR2 = 0x25; } ISR(INT0_vect) { } void setup(void) { asm("wdr"); MCUCSR &= ~(1<<WDRF); /* Clear WDRF in MCUSR */ WDTCR |= (1<<WDCE) | (1<<WDE); /* Write logical one to WDCE and WDE */ /* Keep old prescaler setting to prevent unintentional time-out */ WDTCR = 0x00; /* Turn off WDT */ //---------- PORTB_IN(RVRS); PORTB_ON(RVRS); PORTB_OUT(EN1); //PB1, PB2 out PORTB_OUT(EN2); PORTB_OUT(IN); PORTB_OFF(EN1); PORTB_OFF(EN2); PORTB_OFF(IN); //--------Timer2------------------- TCCR2 = 0; // set entire TCCR2A register to 0 TCNT2 = 0x00; // initialize counter value to 0xFF // 256 presc. toggle OC2 PWM Pfase Correct TIMSK |= (1 << OCIE2); OCR2 = 0x25; // 500Hz 0x25 для тактов sei(); } int main(void) { setup(); while(flag_STOP) { if(PORTB_RD(0)) { PORTB_ON(EN1); PORTB_OFF(EN2); PORTB_ON(IN); flag_RVRS = 1; TCCR2 |=(1 << WGM21)|(1 << CS22)|(1<< CS21)|(1<< CS20); steps = 477; } else { PORTB_ON(EN2); PORTB_OFF(EN1); PORTB_OFF(IN); flag_RVRS = 0; TCCR2 |=(1 << WGM21)|(1 << CS22)|(1<< CS21)|(1<< CS20); steps = 477; } while (steps){}; PORTB &= ~(1 << EN1)|(1 << EN2); TCCR2 = 0; flag_STOP = 0; } } |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |