Схема управления простая, и состоит из не большого числа элементов. В виде управляющего устройства использован микроконтроллер ATmega8. Схема устройства показана на рисунке:
В схеме использованы драйверы полевых транзисторов IR4427 и сами полевые транзисторы IRFZ44.
Управляющая программа была написана не мною, автор Дмитрий(Maktep) за что ему отдельное спасибо.
Как исключение программа написана на Си для CV-AVR.
ПРограмма транслирована под компилятор WIN GCC.
Частота кварца 8МГц, для устройств с связью по UART рекомендую
использовать внешний кварц, так как при тактировании от внутреннего
генератора могут появляться ошибки в виду его нестабильной работы при
изменении температуры окружающей среды.
#include <avr/io.h> #include <avr/interrupt.h> #include <stdio.h> void USART_Init( unsigned int ubrr); void USART_Transmit( unsigned char data ); char status,data; char state; unsigned int lvl=65530/4; // USART Receiver interrupt service routine ISR(USART_RXC_vect) { status=UCSRA; data=UDR; if (lvl<3000) { if (data=='+') lvl--; else if (data=='-') lvl++;} else {if (data=='+') lvl-=lvl/500; else if(data=='-') //if (lvl,/) lvl+=lvl/500; } } // Timer1 output compare A interrupt service routine ISR(TIMER1_COMPA_vect) { switch (state) { case 0: PORTC=1; break; case 1: PORTC=3; break; case 2: PORTC=2; break; case 3: PORTC=6; break; case 4: PORTC=4; break; case 5: PORTC=5; break; } if (state<5) state++; else state=0; } void USART_Init( unsigned int ubrr) { /* Set baud rate */ UBRRH = (unsigned char)(ubrr>>8); UBRRL = (unsigned char)ubrr; /* Enable receiver and transmitter */ UCSRB=(1<<RXEN)|(1<<TXEN); UCSRB |= (1<< RXCIE); /* Set frame format: 8data, 2stop bit */ UCSRC=0x86;// UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); } void USART_Transmit( unsigned char data ) // { while ( !(UCSRA & (1<<UDRE)) ); // UDR = data; // } int main(void) { PORTC=0x00; DDRC=0x07; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 8000,000 kHz // Mode: CTC top=OCR1A // OC1A output: Discon. // OC1B output: Discon. // Noise Canceler: Off // Input Capture on Falling Edge // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: On // Compare B Match Interrupt: Off TCCR1A=0x00; TCCR1B=0x09; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0xFF; OCR1AL=0xFF; OCR1BH=0x00; OCR1BL=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x10; USART_Init (8);//28800 4MHz USART_Transmit('O'); USART_Transmit('k'); USART_Transmit('!'); USART_Transmit(0x0d); USART_Transmit(0x0a); // Global enable interrupts sei(); while (1) { OCR1A=lvl; }; }
Скачать проект Win AVR
Алгоритм работы построен так, что при нажатии на клавиатуре кнопки "+" передается по UART в микроконтроллер, который увеличивает скорость коммутации обмоток. И при нажатии на кнопку "-" все выполняется наоборот, то есть обороты двигателя уменьшаются. Для работы устройства дополнительно понадобится UART-RS232 конвертер.
Эксперимент показал что при данной программе и данной схеме включения
можно разогнать двигатель до приличных оборотов, точное число не
известно, думаю в пределах 30 000 оборотов в минуту. Но
к сожалению сила двигателя недостаточная для раскручивания пластикового
пропеллера, верней с пропеллером двигатель набирает обороты, но при
нагрузке происходит сбой и остановка двигателя.
|