Step motor wires/ шаговый мотор - провода, A+, A-, B+, B-, A1, A2, B1, B2
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Электроника / cхемотехника
- Просмотров: 704
STM32G031: TIM1 PWM LL: exact pulses to generate
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 627
void runCmdFromUart(void){
uint32_t frequency = 0;
uint32_t ARR_reg_val = 0;
uint32_t PSC_reg_val = 7;
static uint32_t pulses = 1000; //im ms
if(receiveBuffer[0] == 'f'){ //frequency
frequency += (receiveBuffer[1] - 0x30) *100000;
frequency += (receiveBuffer[2] - 0x30) *10000;
frequency += (receiveBuffer[3] - 0x30) *1000;
frequency += (receiveBuffer[4] - 0x30) *100;
frequency += (receiveBuffer[5] - 0x30) *10;
frequency += receiveBuffer[6] - 0x30;
if(frequency > 10000)
PSC_reg_val = 0;
else
if(frequency > 100)
PSC_reg_val = 7;
else
PSC_reg_val = 4095;
ARR_reg_val = (BASE_FREQ/(PSC_reg_val+1))/frequency;
LL_TIM_WriteReg(TIM1, PSC, PSC_reg_val);
LL_TIM_WriteReg(TIM1, ARR, ARR_reg_val);
CountTim1P = pulses-1;
LL_TIM_WriteReg(TIM1, CCR1, 0);
LL_TIM_OC_SetCompareCH4(TIM1, (ARR_reg_val/2)); //50% PWM, 100 kHz
}
if(receiveBuffer[0] == 'd'){
if(receiveBuffer[1] == '1')
LL_GPIO_ResetOutputPin(DIR_GPIO_Port,DIR_Pin);
else
if(receiveBuffer[1] == '0')
LL_GPIO_SetOutputPin(DIR_GPIO_Port,DIR_Pin);
}
if(receiveBuffer[0] == 'e'){
if(receiveBuffer[1] == '1')
LL_GPIO_ResetOutputPin(ENABLE_GPIO_Port,ENABLE_Pin);
else
if(receiveBuffer[1] == '0')
LL_GPIO_SetOutputPin(ENABLE_GPIO_Port,ENABLE_Pin);
}
if(receiveBuffer[0] == 'p'){ //pulses
pulses = 0;
pulses += (receiveBuffer[1] - 0x30) *100000000;
pulses += (receiveBuffer[2] - 0x30) *10000000;
pulses += (receiveBuffer[3] - 0x30) *1000000;
pulses += (receiveBuffer[4] - 0x30) *100000;
pulses += (receiveBuffer[5] - 0x30) *10000;
pulses += (receiveBuffer[6] - 0x30) *1000;
pulses += (receiveBuffer[7] - 0x30) *100;
pulses += (receiveBuffer[8] - 0x30) *10;
pulses += receiveBuffer[9] - 0x30;
}
}
void TIM1_CC_IRQHandler(void)
{
/* USER CODE BEGIN TIM1_CC_IRQn 0 */
/* USER CODE END TIM1_CC_IRQn 0 */
/* USER CODE BEGIN TIM1_CC_IRQn 1 */
LL_TIM_ClearFlag_CC1(TIM1);
if(CountTim1P)
CountTim1P--;
else
LL_TIM_OC_SetCompareCH4(TIM1, 0xFFFF);
/* USER CODE END TIM1_CC_IRQn 1 */
}
STM32G031 LL library: freq. for control step motor appx. fast setup
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 661
/* USER CODE BEGIN 0 */
uint8_t receiveBuffer[BUFFER_UART_LEN];
#define BASE_FREQ 16000000
void runCmdFromUart(void){
uint32_t frequency = 0;
uint32_t ARR_reg_val = 0;
uint32_t PSC_reg_val = 7;
if(receiveBuffer[0] == 'f'){ //frequency
frequency += (receiveBuffer[1] - 0x30) *100000;
frequency += (receiveBuffer[2] - 0x30) *10000;
frequency += (receiveBuffer[3] - 0x30) *1000;
frequency += (receiveBuffer[4] - 0x30) *100;
frequency += (receiveBuffer[5] - 0x30) *10;
frequency += receiveBuffer[6] - 0x30;
if(frequency > 10000)
PSC_reg_val = 0;
else
if(frequency > 100)
PSC_reg_val = 7;
else
PSC_reg_val = 4095;
ARR_reg_val = (BASE_FREQ/(PSC_reg_val+1))/frequency;
LL_TIM_WriteReg(TIM1, PSC, PSC_reg_val);
LL_TIM_WriteReg(TIM1, ARR, ARR_reg_val);
LL_TIM_OC_SetCompareCH4(TIM1, (ARR_reg_val/2)); //50% PWM, 100 kHz
}
}
/* USER CODE END 0 */
STM32G031: LL HAL: enabling PWM on CH4 TIM1
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 638
TIM1->BDTR |=(TIM_BDTR_MOE); // needed, see http://efton.sk/STM32/gotcha/g3.html LL_TIM_EnableCounter(TIM1); LL_TIM_CC_EnableChannel(TIM1, LL_TIM_CHANNEL_CH4); LL_TIM_OC_SetCompareCH4(TIM1, 500); //50% PWM
STM32G031: LL USART (UART) receive
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 740
/* USER CODE BEGIN 0 */
uint8_t receiveBuffer[6];
uint8_t cmdReceived = 0;
/* USER CODE END 0 */
...............
MX_USART1_UART_Init();
MX_TIM1_Init();
/* USER CODE BEGIN 2 */
LL_USART_EnableIT_RXNE(USART1);
LL_USART_EnableIT_ERROR(USART1);
/* USER CODE END 2 */
/* USER CODE BEGIN 4 */
void USART_CharReception_Callback(void){
static int bytes = 0;
uint8_t received_char;
received_char = LL_USART_ReceiveData8(USART1);
if(received_char == '@'){
bytes = 0;
cmdReceived = 1;
}
else{
receiveBuffer[bytes] = received_char;
bytes++;
}
if (bytes == sizeof(receiveBuffer)){
bytes = 0;
cmdReceived = 1;
}
}
/* USER CODE END 4 */
In stm32g0xx_it.c:
/**
* @brief This function handles USART1 global interrupt / USART1 wake-up interrupt through EXTI line 25.
*/
void USART1_IRQHandler(void)
{
/* USER CODE BEGIN USART1_IRQn 0 */
USART_CharReception_Callback();
/* USER CODE END USART1_IRQn 0 */
/* USER CODE BEGIN USART1_IRQn 1 */
/* USER CODE END USART1_IRQn 1 */
}
Страница 24 из 193
