本人提供STM32 BLDC直流电机控制器原理图和相应的原代码,源代码是基于免费开源CoOS(UCOS类似)操作系统上写的,在学习无刷电机的控制,同时还能学习到操作系统的知识。同时提供用Matlab的GUI编写的串口接收程序和开源的代码,实时接收速度和电流信息,便于PID测试,并且有CAN(TJA1050)接口。同时自己可以进行修改学习Matlab的GUI编程。 1.STM32F103RB处理器 时钟72M Flash 64K RAM 20K 2.MOSFET SUD35N05-26L 55V 35A Rds=0.02 3.MOSFET驱动 IR2101S 电机参数如下: 额定电压 12V 额定电流 2.26A 额定转速 13027RPM 软件资料如下: 有无刷电机转速调节的PID程序(基于免费开源CoOS操作系统) 自己做的Matlab GUI串口PID调试程序(开源,自己可以改进) 自己以前做的STM32程序
制作出来的实物图如下:
整体图
系统局部图
Matlab GUI控制界面
单片机源程序如下:
- #include "includes.h"
- /********************CoOS变量**********************/
- #define TASK_STK_SIZE 128
- #define TASK0_PRIO 2
- #define TASK1_PRIO 3
- #define TASK2_PRIO 4
- #define TASK3_PRIO 5
- OS_STK STK_TASK0[TASK_STK_SIZE];
- OS_STK STK_TASK1[TASK_STK_SIZE];
- OS_STK STK_TASK2[TASK_STK_SIZE];
- OS_STK STK_TASK3[TASK_STK_SIZE];
- void TASK0(void *param);
- void TASK1(void *param);
- void TASK2(void *param);
- void TASK3(void *param);
- /*************************************************/
- /*********************一般变量********************/
- extern uint32_t Speed_count;
- uint8_t USART_Flag = 0;
- /*************************************************/
- int main(void)
- {
- /* 片内外设初始化 */
- Periph_Init();
-
- /* 操作系统初始化 */
- CoInitOS();
- CoCreateTask( TASK0, (void*)0, TASK0_PRIO, &STK_TASK0[TASK_STK_SIZE - 1], TASK_STK_SIZE);
- CoCreateTask( TASK1, (void*)0, TASK1_PRIO, &STK_TASK1[TASK_STK_SIZE - 1], TASK_STK_SIZE);
- CoCreateTask( TASK2, (void*)0, TASK2_PRIO, &STK_TASK2[TASK_STK_SIZE - 1], TASK_STK_SIZE);
- CoCreateTask( TASK3, (void*)0, TASK3_PRIO, &STK_TASK3[TASK_STK_SIZE - 1], TASK_STK_SIZE);
- CoStartOS();
- while(1);
- }
- void TASK0(void *param)
- {
- uint8_t start_flag=0;
- uint8_t sw_state = 1;
- KEY_Init();
- Speed_PIDInit();
- for(;;)
- {
- //SW__Read()=1 Direction = SET
- if(SW__Read()^sw_state)
- {
- if(start_flag)
- {
- BLDC_Stop();
- }
- sw_state = SW__Read();
- if(sw_state)
- {
- Direction = SET;
- }
- else
- {
- Direction = RESET;
- }
- if(start_flag)
- {
- BLDC_Start();
- }
- }
- if(KEY_Read(KEY1))
- {
- CoTickDelay(5);
- if(KEY_Read(KEY1))
- {
- BLDC_Start();
- start_flag = 1;
- }
- }
- if(KEY_Read(KEY2))
- {
- CoTickDelay(5);
- if(KEY_Read(KEY2))
- {
- BLDC_Stop();
- start_flag = 0;
- }
- }
- CoTickDelay(10);
- }
- }
- void TASK1(void *param)
- {
- uint16_t adc_value= 0;
- uint8_t i = 0;
- for(;;)
- {
- adc_value= 0;
- for(i=0;i<4;i++)
- {
- ADC_SoftwareStartConvCmd(ADC1,ENABLE); /* 使能转换开始 */
- while(ADC_GetSoftwareStartConvStatus(ADC1));
- adc_value += ADC_GetConversionValue(ADC1);
- }
- ADC_Speed = adc_value/4;
- CoTickDelay(10);
- }
- }
- void TASK2(void *param)
- {
- uint16_t data;
- for(;;)
- {
- if(USART_Flag)
- {
- data = 1000000/(6*Speed_count);
- USART_SendData( USART2, data);
- USART_Flag = 0;
- }
- CoTickDelay(1);
- }
- }
- void TASK3(void *param)
- {
- LED_Off();
- for(;;)
- {
- LED_On();
- CoTickDelay(200);
- LED_Off();
- CoTickDelay(200);
- }
- }
复制代码
所有资料51hei提供下载:
相关技术文档及其他.7z
(11.97 MB, 下载次数: 201)
|