STM32的PWM控制步进电机,怎么实现精确控制输出脉冲数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32的PWM控制步进电机,怎么实现精确控制输出脉冲数相关的知识,希望对你有一定的参考价值。
步进电机的步进脉冲的细分,步进电机不能用PWM控制、8、直流电机可以用PWM(脉冲调宽)来控制电机的转速、4。而步进电机是用步进脉冲来控制电机的转速的,)是靠外围编码设定,都集成在驱动芯片上。三相、16细分等,具体细分(如2据本人所知 参考技术A 用中断,在中断中计数就可以 参考技术B 溢出的次数就是pwm的个数。基于STM32无刷电机BLDC速度控制器系统设计-毕设课设资料
- 可调转速通过可调电阻和STM32的ADC功能,实现500-4596范围的速度调节。
- 通过定时器1的PWM互补输出六路PWM控制电机的转动,驱动器使用L293D和IRF540 MOS管。
- 换向使用的是外部中断,测速使用的是定时器2的三鹿输入捕获,这里有一个坑,proteus中三路输入捕获无法同时工作,本来打算三路都做测速逻辑,但是速度变化很大,所以最后只使用了一路作为测速通道。
- 正反转使用的是外部中断。
- 显示转速和目标转速使用的是lcd1602,在proteus仿真中,显示转速有一定的延时和误差
实现功能:
- 可调转速
- 可控转动方向
- 显示转速和目标转速
下面是原理图和程序
#include "main.h"
#include "adc.h"
#include "tim.h"
#include "gpio.h"
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "includes.h"
#include "lcd.h"
/* USER CODE END Includes */
/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */
/* USER CODE END PTD */
/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */
#define HALL_GPIO GPIOA
//START 任务
//设置任务优先级
#define START_TASK_PRIO 10 //开始任务的优先级设置为最低
//设置任务堆栈大小
#define START_STK_SIZE 64
//任务堆栈
OS_STK START_TASK_STK[START_STK_SIZE];
//任务函数
void start_task(void *pdata);
//LED0任务
//设置任务优先级
#define LED0_TASK_PRIO 2
//设置任务堆栈大小
#define LED0_STK_SIZE 64
//任务堆栈
OS_STK LED0_TASK_STK[LED0_STK_SIZE];
//任务函数
void led0_task(void *pdata);
//Speed_ADC 任务
//设置任务优先级
#define SPEED_ADC_TASK_PRIO 1
//设置任务堆栈大小
#define SPEED_ADC_STK_SIZE 64
//任务堆栈
OS_STK SPEED_ADC_TASK_STK[SPEED_ADC_STK_SIZE];
//任务函数
void speed_adc_task(void *pdata);
【资源下载】下载地址:点击下载(1605) 百度网盘
以上是关于STM32的PWM控制步进电机,怎么实现精确控制输出脉冲数的主要内容,如果未能解决你的问题,请参考以下文章