1.PWM调速

简介:

PWM(Pulse Width Modulation)是一种用来调节信号脉宽的技术,在电机控制中常常用来实现电机的调速功能。本文将介绍如何使用STM32微控制器实现PWM电机调速的方法。

1. STM32简介

STM32系列是由ST公司推出的一款基于ARM Cortex-M内核的32位单片机系列。它具有强大的性能和丰富的外设资源,非常适合用于电机控制领域。

2. PWM调速原理

PWM调速技术通过改变信号的脉宽来控制电机的速度。脉宽越宽,电机转速越快;脉宽越窄,电机转速越慢。通过不断调整PWM的脉宽,即可实现电机的调速功能。

3. STM32的PWM模块介绍

STM32微控制器内置了多个PWM模块,如TIM(定时器)模块和TIM输出比较模块等。这些模块可以生成高精度的PWM信号,并且具有丰富的配置选项,可满足不同应用场景的需求。

实验要求

小车通过PWM对不同的轮子进行不同的调速

实验步骤

1.硬件接线

B-1A – PA0
B-1B – PB1
A-1A – PA1
A-1B – PB10

2. 所用芯片

stm32f103c8t6
电机驱动: l9110s

3. CubeMX配置

通过查阅文档,我们了解到stm32f103c8t6中的PA0和PA1引脚所用到的PWM通道,PA0和PA1分别用到了TIM2定时器的通道1和2
image.png

根据公式
image.png
其中PSC为分频系数,ARR(AutoReload Register -16 bits value)为 自动重载值.

  1. ARR寄存器:**自动重装载寄存器,包含一个32位的值,用于设置定时器从0开始计数到ARR值后再清零的循环周期。**这个周期时间就是定时器的溢出时间。
  2. PSC寄存器:预分频寄存器,包含一个16位的值,可以对定时器的时钟进行预分频,即将外部时钟频率分频后用于定时器计数。

我们可以计划将Tout配置为20ms,由于Tclk配置成72Mhz,于是我们可以将PSC设置为7199,ARR则为199.其中,自动重加载我们给他打开.

其中 CH Polarity表示有效极性,我们将他保持为高电平

如图:image.png

代码实现

1. 所用函数介绍

//1.
HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);
//这个函数是使能PWM
// 第一个参数是定时器的句柄
// 第二个参数表示第几个通道

//2.
__HAL_TIM_SetCompare(&htim2,TIM_CHANNEL_1,100);
// 这个函数可修改比较值,修改占空比
// 第一个参数是定时器的句柄
// 第二个参数表示第几个通道
// 第三个参数为设置的值

通过这些函数就可以简单的控制,占空比了.也就能随意的控制左右轮的转速了,实现平滑拐弯

2. 使用串口控制检验是否能够成功实现

配置串口

image.png

打开串口中断

image.png

代码实现
// 找到并重写接收中断处理函数 HAL_UARTEx_RxEventCallback
// 接收完成回调函数,收到一个数据后,在这里处理
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
好的,51循迹小车的PWM调速实现需要考虑到两个方面: 1. 控制小车的电机转速。可以通过PWM调节电机的转速,从而实现小车的前进、后退、转弯等控制。 2. 通过循迹传感器检测路面情况。可以根据路面情况的不同,控制小车的转向,从而实现循迹运动。 以下是一个基于51单片机PWM调速程序框架,可以作为参考: ``` #include <reg51.h> sbit IN1 = P1^0; // 电机控制信号IN1 sbit IN2 = P1^1; // 电机控制信号IN2 // 定时器0中断函数 void timer0_isr() interrupt 1 { if (TF0 == 1) // 判断中断源是否是定时器0 { TF0 = 0; // 清除TF0标志位 // 设置PWM输出口的高电平时间和低电平时间 // 根据需要控制电机的转速和转向 // ... // 通过循迹传感器检测路面情况,控制小车的转向 // ... } } void main() { // 关闭电机,避免电机启动时引起干扰 IN1 = 0; IN2 = 0; // 设置定时器0为16位计数器,工作频率为1MHz,周期为1ms TMOD = 0x01; TH0 = 0xFC; TL0 = 0x18; TR0 = 1; ET0 = 1; EA = 1; while (1) { // 循迹小车的主循环 // ... } } ``` 在上面的程序框架中,定时器0中断函数中的PWM输出操作和循迹控制操作需要根据具体的硬件平台和需求进行实现。以下是两个示例: 1. PWM调速操作: ``` // 假设需要实现占空比为20%的PWM调速 unsigned int high_time = 200; // 高电平时间为200us unsigned int low_time = 800; // 低电平时间为800us // 设置PWM输出口的高电平时间和低电平时间 CCAP0H = high_time >> 8; // PWM高电平时间高8位 CCAP0L = high_time & 0xFF; // PWM高电平时间低8位 PCA_PWM0 = 1; // 启动PWM输出 // 通过IN1和IN2控制小车的转向和转速 IN1 = 1; IN2 = 0; // 正转 ``` 2. 循迹控制操作: ``` // 假设使用两个循迹传感器,分别连接P2.0和P2.1口 sbit sensor1 = P2^0; sbit sensor2 = P2^1; // 根据传感器检测结果控制小车的转向 if (sensor1 == 1 && sensor2 == 1) { // 直行 IN1 = 1; IN2 = 0; } else if (sensor1 == 1 && sensor2 == 0) { // 左转 IN1 = 0; IN2 = 0; } else if (sensor1 == 0 && sensor2 == 1) { // 右转 IN1 = 1; IN2 = 1; } else // sensor1 == 0 && sensor2 == 0 { // 停止 IN1 = 0; IN2 = 0; } ``` 需要注意的是,具体的PWM输出操作和循迹控制方式可能有所不同,需要根据具体的硬件平台和需求进行调整。同时,要注意PWM信号的频率和占空比的设置,不同的电机可能需要不同的设置来达到合适的控制效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坏柠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值