【蓝桥杯嵌入式】PWM输出及函数控制频率和占空比

前言:封装函数控制PWM的频率和占空比

一、CubeMX配置:

定时器配置:

二、代码部分:

在main中开启定时器:

HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_1);

创建MyPWM.h和MyPWM.c文件用于写关于PWM的代码

MyPWM.h代码:

#ifndef _MYPWM_H
#define _MYPWM_H

#include "main.h"

void PWMset(TIM_HandleTypeDef htim, uint32_t Channel, uint32_t Fre, float Duty);

#endif

MyPWM.c代码:

#include "MyPWM.h"

void PWMset(TIM_HandleTypeDef htim, uint32_t Channel, uint32_t Fre, float Duty){
	__HAL_TIM_SetAutoreload(&htim, 1000000 / Fre - 1);  //TIMx->ARR = 1000000 / Fre - 1
	
    __HAL_TIM_SetCompare(&htim, Channel, 1000000 / Fre * Duty); //TIMx->CCRx = 1000000 / Fre * Duty 
}

解释:__HAL_TIM_SetAutoreload设置TIMx的ARR,__HAL_TIM_SetCompare设置TIMx的CHANNELx的CCR。

另:若要修改分频系数,使用__HAL_TIM_SET_PRESCALER(&htim, prescaler);

主程序中处理方法:

PWMset(htim3,TIM_CHANNEL_1,200,0.8);

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
嵌入式 PWM 是一种用于控制舵机的有效技术。舵机可以通过改变脉冲宽度来调整角度位置,因此使用 PWM 来模拟脉冲信号是非常合适的。 对于嵌入式系统,我们可以使用 C 语言编写控制舵机的代码。首先,我们需要初始化 PWM 模块,并设置频率占空比。然后,我们可以使用一个循环来不断地修改占空比,从而控制舵机的角度。 以下是一个简单的示例代码: ```c #include <msp430.h> #define PWM_PERIOD 1000 // PWM 周期 #define MIN_ANGLE 500 // 最小角度位置对应的占空比 #define MAX_ANGLE 2500 // 最大角度位置对应的占空比 void initPWM() { P1DIR |= BIT2; // P1.2 输出 P1SEL |= BIT2; // P1.2 使用 PWM 功能 TA0CTL = TASSEL_2 + MC_1; // 选择 SMCLK 作为时钟源,设置为增计数模式 TA0CCR0 = PWM_PERIOD - 1; // 设置 PWM 周期 TA0CCTL1 = OUTMOD_7; // 设定输出模式为 PWM TA0CCR1 = MIN_ANGLE; // 初始角度设为最小位置 } void setAngle(int angle) { if (angle < 0) { angle = 0; } else if (angle > 180) { angle = 180; } // 将角度转换成对应的占空比 int dutyCycle = (int)(MIN_ANGLE + (MAX_ANGLE - MIN_ANGLE) * angle / 180.0); TA0CCR1 = dutyCycle; // 设置占空比 } int main() { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗定时器 initPWM(); // 初始化 PWM while(1) { setAngle(90); // 将舵机角度设为 90 度 __delay_cycles(1000000); // 延时 setAngle(0); // 将舵机角度设为 0 度 __delay_cycles(1000000); // 延时 } } ``` 以上代码通过 MSP430 的 PWM 模块来控制舵机的角度,其中使用了 `initPWM` 函数来初始化 PWM 模块,`setAngle` 函数用于设置舵机的角度,`main` 函数则是一个简单的循环示例,用于不断地改变舵机的角度。希望这个示例能够帮助您理解如何利用嵌入式 PWM 控制舵机的代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值