Контроллер шагового двигателя на Attiny13
Схема была придумана для проверки униполярных шаговых двигателей. Драйвер выполнен на микроконтроллере Attiny13, так как в нем есть АЦП была реализована возможность регулировки частоты вращения двигателя. Силовые ключи выполнены на довольно распространенных транзисторах КТ829А. При программировании контроллера оставить заводские настройки fuse-битов.
Направление вращения меняется потенциометром, его ручка сначала стоит в среднем положении, при повороте ручки в одну сторону движок начинает вращаться по часовой стрелке и наоборотСхема устройства
Макет печатной платы
Исходный файл и прошивка микроконтроллера, а также макет печатной платы находятся в архиве.
Обсуждение статьи на форуме
//*************************************************************************** // File Name : upstepper.c // Version : 1.0 // Description. : Transistor as Switch: Simple Unipolar Stepper // Motor Driver - Full Step Method // Author : RWB // Target : ATTiny13 // Compiler : AVR-GCC 4.3.2; avr-libc 1.6.2 (WinAVR 20090313) // IDE : Atmel AVR Studio 4.17 // Programmer : Atmel AVRISPmkII // Last Updated : 03 Nov 2010 //*************************************************************************** #include#include #include // Unipolar Stepper Motor CW/CCW Stepping Sequence #define MAX_STEP 4 unsigned char cwstep_seq[MAX_STEP]= {0b00000110, 0b00000011, 0b00001001, 0b00001100}; unsigned char ccwstep_seq[MAX_STEP]= {0b00001100, 0b00001001, 0b00000011, 0b00000110}; volatile unsigned char step_index; volatile unsigned int ovftimes; volatile unsigned char status; ISR(TIM0_OVF_vect) { static unsigned int count=1; count++; if (count >= ovftimes) { cli(); // Disable Interrupt // Stepping Output if (status) PORTB = ccwstep_seq[step_index++]; else PORTB = cwstep_seq[step_index++]; if (step_index >= MAX_STEP) step_index=0; count=0; // Reset Count TCNT0=0; // Start counter from 0 sei(); // Enable Interrupt } } int main(void) { // Initial I/O DDRB = 0b00001111; // Set PB0, PB1, PB2, and PB3 as Output, Others as Input PORTB = 0b00000000; // Reset PORTB Output // Set ADCSRA Register on ATTiny13 ADCSRA = (1< Complete while (ADCSRA & (1< 800) status^=0x01; // Toggle the Direction _delay_ms(50); } return 0; // Standard Return Code } /* EOF: upstepper.c */
Похожие материалы