Страницы

Ярлыки

ДШИ-200 (1) КСВУ-6 (1) ЛЧМ (1) МДР-23 (1) микроконтроллер (1) перенаправление (1) С (1) структуры (1) учебный курс (1) AC/DC (1) ADC (1) ADS1248 (1) Altium (1) Altuim (1) Amolifer (1) ARM (1) assembler (2) Asynchronous (1) at command (3) at#eaddr (1) at#epassw (1) at#esmtp (1) at#euser (1) at#gprs (1) at#selint=2 (1) at#sgact (1) at#tcpatcmdseq (1) ATX (1) AVR (2) bit (1) boost (1) boot (2) bootlloader (1) C (6) C# (7) C++ (1) CMSIS (1) command (1) CP2101 (1) CSD (1) Danfoss (6) DBGMCU (1) debug (1) debug.ini (1) delegate (1) Discovery (1) DMA (1) DRV8805 (1) DWT (1) e-mail (1) email (1) Exel (1) exFAT (1) FC-051 (1) gl868-dual (2) gl868-dual cmux (1) GPIO (2) GSM (1) I2C (1) IAR (1) ID (1) Invoke (1) Keil (3) LabVIEW (1) Linux (1) LMP7721 (1) LoRa (3) mdmread (1) memory (1) MODBUS (1) Operation Amplifer (1) pack (1) printf (2) printf() (1) RCC (1) retargetting (1) RFM95/96/87/98(W) (1) RS232 (4) RS485 (1) RSAPI.DLL (1) RSS (1) RTC (2) send (2) SerialPort (1) Silabs (1) spl (1) standard peripherals library (1) startup (1) stepper (2) STlink (1) STlink/V2 (2) STM32 (10) stm32 stm32f10x (1) STM32DBG.IN (1) STM32F (19) STM32F103 (4) struct (1) Structure (1) system (1) SystemInit (1) Task (1) telit (5) thread (4) TIM (1) Type Cast (1) UART (1) uni-trend (1) USART (6) USB (1) UT61B (1) viewer (1)

среда, 29 июня 2016 г.

Unipolar stepper control DRV8805 with STM32F103 (for МДР-23)










Structure for command of control of stepper motor with 8 byte

1 -  0x01 start byte 

2 - 0x01 forward rotation, else other - rewind rotation

3 - 0x00 reserv

4 - HI byte for number of steps (hex mode)  
5 - MI byte for number of steps (hex mode)   
6 - MI byte for number of steps (hex mode)  
7 - LO byte for number of steps (hex mode)  

8 - 0xFF - end byte


Send from stepper motor to PC for control

TxData[0] = 0x30;
TxData[1] = 0x31;
TxData[2] = 0x32;
TxData[3] = 0x33;
TxData[4] = 0x34;
TxData[5] = 0x35;
TxData[6] = 0x0D;
TxData[7] = 0x0A;




C# send command 
=======================================================================
private void SendCommand(byte address, byte direction, UInt32 number_of_step)
        {
            byte[] send_to_stpepper = { address, direction, 0, (byte)(number_of_step >> 24), (byte)(number_of_step >> 16), (byte)(number_of_step >> 8), (byte)(number_of_step),  0xFF };
            if (serialPort_stepper.IsOpen)
            {
                serialPort_stepper.Write(send_to_stpepper, 0, 8);
            }
        }

Keil
========================================================================

if(HAL_GPIO_ReadPin(GPIOB, PC_Manual_Pin) == GPIO_PIN_SET) // Manual control
{
if(HAL_GPIO_ReadPin(GPIOB, Manual_DIR_Pin) == 0) // set direcrion of rotation
{
HAL_GPIO_WritePin(GPIOB, DIR_Pin, GPIO_PIN_SET); // ser forward
}
else
{
HAL_GPIO_WritePin(GPIOB, DIR_Pin, GPIO_PIN_RESET); //set rewind
}
if((HAL_GPIO_ReadPin(GPIOB, SW2_Pin))&&(HAL_GPIO_ReadPin(GPIOB, SW1_Pin)) != 0) // control of SW1 SW2
{
nFAULT();
one_step();
}
if(((HAL_GPIO_ReadPin(GPIOB, DIR_Pin)) == 0) && (HAL_GPIO_ReadPin(GPIOB, SW1_Pin) == 0))
{
nFAULT(); // rotation
one_step();
}
if(((HAL_GPIO_ReadPin(GPIOB, DIR_Pin)) == 1) && (HAL_GPIO_ReadPin(GPIOB, SW2_Pin) == 0))
{
nFAULT(); // rotation
one_step();
}
}

//==================================================================================
//==================================================================================
else // PC control
{
HAL_UART_Receive_DMA(&huart1, RxData, 8);
if(RxData[7] == 0xFF)
{
if(RxData[1] == 0) // set direcrion of rotation
{
HAL_GPIO_WritePin(GPIOB, DIR_Pin, GPIO_PIN_SET); // ser forward
}
else
{
HAL_GPIO_WritePin(GPIOB, DIR_Pin, GPIO_PIN_RESET); //set rewind
}
number_of_step = (RxData[3]<<24) + (RxData[4]<<16) + (RxData[5]<<8) + RxData[6];
for(uint32_t sss = 0; sss < 8; sss++) {RxData[sss] = 0;}
for(i=0; i < number_of_step; i++)
{
i++;
nFAULT(); // rotation
one_step();
if((HAL_GPIO_ReadPin(GPIOB, SW1_Pin)) == 0)
{
i = number_of_step;
TxData[0] = 3;
HAL_UART_Transmit_DMA(&huart1, TxData, 1);
}
if((HAL_GPIO_ReadPin(GPIOB, SW2_Pin)) == 0)
{
i = number_of_step;
TxData[0] = 4;
HAL_UART_Transmit_DMA(&huart1, TxData, 1);
}
if(RxData[7] == 0xFF)
{
number_of_step = (RxData[3]<<24) + (RxData[4]<<16) + (RxData[5]<<8) + RxData[6];
for(uint32_t sss = 0; sss < 8; sss++) {RxData[sss] = 0;}
TxData[0] = 2;
HAL_UART_Transmit_DMA(&huart1, TxData, 1);
}
}
HAL_GPIO_WritePin(GPIOB, nENBL_Pin, GPIO_PIN_SET);
TxData[0] = 1;
HAL_UART_Transmit_DMA(&huart1, TxData, 1);
}
}

void nFAULT(void) { while(HAL_GPIO_ReadPin(GPIOB, nFAULT_Pin) == 0) { } } void one_step(void) { HAL_GPIO_WritePin(GPIOB, nENBL_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOB, STEP_Pin, GPIO_PIN_SET); HAL_Delay(time_of_step); HAL_GPIO_WritePin(GPIOB, STEP_Pin, GPIO_PIN_RESET); }

Комментариев нет:

Отправить комментарий

ваше мнение...