IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> STM32cubeMX+PWM频率控制(步进电机)+TMC260 -> 正文阅读

[嵌入式]STM32cubeMX+PWM频率控制(步进电机)+TMC260

一、搭建系统框架,打开stm32cubeMX,创建工程

1)选择外部晶振

2) 按下图配置SPI

?3)配置定时器

?4)配置时钟

?5)勾选图中划线处

?6)输入工程名称,工程路径

?7)点击生成代码按钮,生成代码,并使用MDK5打开工程文件

二、添加SPI、TIM控制函数

1、配置驱动芯片寄存器

1)SPI读写函数

static uint8_t SPIReadAndWrite(uint8_t dat)
{
	uint8_t Rxdata;
	HAL_SPI_TransmitReceive(&tmc260spi,&dat,&Rxdata,1, 1000);       
 	return Rxdata;
}

2)TMC260读写函数

static uint32_t TMC260RegWR(uint8_t mId, uint32_t data)
{
	uint32_t retData = 0;
	uint8_t sendBuff[3] = {0, 0, 0};
	uint8_t rcvBuf[3] = {0, 0, 0};
	
	sendBuff[0] = (data>>16)&0xFF;
	sendBuff[1] = (data>>8)&0xFF;
	sendBuff[2] = data&0xFF;
	motor_cs(0); 
	rcvBuf[0] = SPIReadAndWrite(sendBuff[0]);
	rcvBuf[1] = SPIReadAndWrite(sendBuff[1]);
	rcvBuf[2] = SPIReadAndWrite(sendBuff[2]);
	motor_cs(1);
	retData = rcvBuf[0] << 16 | rcvBuf[1] << 8 |rcvBuf[0];
	return retData;
}

3)驱动芯片配置函数

void tmc260_init(void)
{
    SPIReadAndWrite(0Xff);	// 启动传输
    ForceSet();		        // 电机电流
    ChopperConfig();		// 写斩波器
    DriverConfig();		    // 写驱动配置寄存器
    StepDirMStepRes();		// 脉冲和方向微步细分数
    SmartEnergyControl();	// 写智能节能控制配置寄存器
}

2、脉冲设置函数

1)定时器配置函数

void My_MX_TIM10_Init(uint8_t Prescaler, uint16_t Period)
{
  TIM_OC_InitTypeDef sConfigOC = {0};
  htim10.Instance = TIM10;
  htim10.Init.Prescaler = Prescaler;
  htim10.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim10.Init.Period = Period;
  htim10.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim10.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim10) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_TIM_PWM_Init(&htim10) != HAL_OK)
  {
    Error_Handler();
  }
  sConfigOC.OCMode = TIM_OCMODE_PWM1;
  sConfigOC.Pulse = 0;
  sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
  sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
  if (HAL_TIM_PWM_ConfigChannel(&htim10, &sConfigOC, TIM_CHANNEL_1) != HAL_OK)
  {
    Error_Handler();
  }
  HAL_TIM_MspPostInit(&htim10);

}

2)脉冲给定函数,最大频率为500kHz,如需要使用更高频率,需要更改分频系数

void Motor_hz(int32_t hz)
{
    uint16_t a = 1000000 / hz;
	My_MX_TIM10_Init(168-1, a-1);
	HAL_TIM_PWM_Start(&htim10, TIM_CHANNEL_1);
	TIM10->CCR1 = a / 2;
}

3)方向控制函数

void Motor_dir(uint8_t dir)
{
    if(dir == 0){
        HAL_GPIO_WritePin(MOTOR_DIR_GPIO_Port, MOTOR_DIR_Pin, GPIO_PIN_RESET);
    }
    else{
        HAL_GPIO_WritePin(MOTOR_DIR_GPIO_Port, MOTOR_DIR_Pin, GPIO_PIN_SET);
    }
}

3、主函数

1)初始化(已由cubemx配置好)

2)配置电机驱动芯片:tmc260_init();

3)控制电机方向: Motor_dir(0);? ? ? ?Motor_dir(1)

4)控制电机转速函数: Motor_hz(10000);? ? ? ? //pwm频率10kHz,占空比50%

int main(void)
{
    ...
    tmc260_init();
    Motor_dir(0);           //设置电机旋转方向
    Motor_hz(10000);        //设置频率为 10kHz
    while(1)
    {
        HAL_Delay(1000);
    }
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:07:25  更:2022-03-21 21:09:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:48:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码