PWM库的调用与使用 - 16通道PWM网络开发板

首先在代码的开头调用PWM所需要的库,以及在顶部做相关的参数声明:

// PWM 参数设置
#include <Adafruit_PWMServoDriver.h>
#include <Wire.h>
TwoWire wire = TwoWire();
Adafruit_PWMServoDriver pwm =
    Adafruit_PWMServoDriver(PCA9685_I2C_ADDRESS, wire);
#define MIN_PULSE_WIDTH 600
#define MAX_PULSE_WIDTH 2600
#define FREQUENCY 50

在 setup() 中自定义对应的I2C引脚,开发板对应的I2C输出引脚为14,12。

void setup() {
  // 自定义I2C接口
  wire.pins(14, 12);
  pwm.begin();
  pwm.setPWMFreq(FREQUENCY); 
}

然后在 loop() 中调用输出PWM到对应的引脚,具体使用方法如下:

void loop(){
  pwm.setPWM(0, 0, pulseWidth(90));    // 0号接口输出90度
  pwm.setPWM(1, 0, pulseWidth(180));   // 1号接口输出180度
}

另外记得在代码中新增如下方法:

// PWM舵机控制函数
int pulseWidth(int angle) {
  int pulse_wide, analog_value;
  pulse_wide = map(angle, 0, 180, MIN_PULSE_WIDTH, MAX_PULSE_WIDTH);
  analog_value = int(float(pulse_wide) / 1000000 * FREQUENCY * 4096);
  return analog_value;
}

PWM网络开发板引脚说明以及使用准备工作

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
328254178Msp430F149.rar AD_DA.rar e96e317f-d9ab-41e5-b87f-ebc3f6131c4b.zip MSP430-149单片机应用实例(USB实例).rar MSP430-F149对应的液晶程序(描述详细,易于调用).rar MSP430F149 AD转换C程序.rar MSP430F149 C语言驱动DS18B20.zip MSP430F149 GSM基本控制,初始化接收短息,解读短信.rar MSP430F149+1602数码显示和实时时钟.rar MSP430F149+DS1302+UART程序可以用.rar MSP430F149,IAR,ADC采样之后对太阳点光源进行跟踪.rar MSP430F149--485串行通信.rar MSP430F149-SHT15传感器例程(,随时调用,含注释) (1).rar MSP430F149-SHT15传感器例程(,随时调用,含注释).rar MSP430F149下的s级别,us级别,ms级别延时.rar MSP430F149单片机与RF2401硬件SPI无线通信 (1).zip MSP430F149单片机与RF2401硬件SPI无线通信.zip MSP430F149单片机定时器A的PWM输出程序.rar MSP430F149单片机对1602液晶进行的简单测试.rar MSP430F149单片机对1604液晶进行的简单操作.rar MSP430F149单片机对PS2键盘的控制程序和源码.rar MSP430F149单片机对继电器的控制程序和源码.rar MSP430F149单片机控制LED全彩显示屏的某一行列数据传输控制显示程序.rar MSP430F149单片机模拟IIC和DS18B20通信进行测试温度代码.rar MSP430F149单片机的Flash程序.rar MSP430F149可以通过串口显示温度传感器的数值.rar MSP430F149开发例程(控制8个LED闪烁).rar MSP430f149控制LCD12864显示汉字、字母.zip MSP430F149温度测量.zip MSP430F149的无线模块24L01程序.rar MSP430F149跑ADC和USB好用的代码.rar MSP430F149通过SPI接口控制ADS1216.zip MSP430x14x控制SED1335驱动320×240屏.rar MSP430x14x系列单片机实现了对EEPROM的读写测试.rar MSP430内置温度传感器的C语言程序.zip MSP430单片机 串口像PC发送数据.rar MSP43F149的USB测试程序.rar mulu.txt RF24L01-AD.rar RF24L01-MCU-PC通信例程.rar RF24L01-PC-MCU通信例程.rar RF24L01无线温度例程.rar RF24L01遥控例程.rar 基于MSP430F149为主芯片下的红外线解码资料源程序.zip 基于MSP430F149单片机中看门狗电路的中断实验.zip 基于MSP430F149单片机的1602程序代码.zip 基于MSP430F149单片机的nRF24L01无线通信程序.rar 基于MSP430F149单片机的串口0驱动程序.rar 基于MSP430F149单片机的温湿度传感器SHT1X驱动程序.rar 基于MSP430F149的12864的显示图片.rar 基于MSP430F149的数字钟源代码(以1602LCD液晶显示).rar 基于MSP430F149的触摸手写程序.zip 展示了MSP430F14x单片机的AD操作.rar 德州仪器MSP430F1449-F169的LCD12864测试程序 (1).rar 德州仪器MSP430F1449-F169的LCD12864测试程序.rar 德州仪器MSP430F149-F169初学者常用代码.rar 演示了如何操作MSP430F149单片机的DMA操作.rar 演示了如何操作MSP430F149的I2C功能.rar
以下是使用STM32F103C8T6开发控制电机的C语言代码示例: ``` #include "stm32f10x.h" #define MOTOR_PIN GPIO_Pin_0 #define MOTOR_PORT GPIOA void PWM_Init(void); void Motor_Control(uint16_t dutyCycle); int main(void) { PWM_Init(); // 初始化PWM while (1) { // 控制电机 Motor_Control(50); // 设置占空比为50% delay_ms(1000); Motor_Control(0); // 停止电机 delay_ms(1000); } } // 初始化PWM void PWM_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure; // 使能GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 配置PWM引脚为复用推挽输出 GPIO_InitStructure.GPIO_Pin = MOTOR_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(MOTOR_PORT, &GPIO_InitStructure); // 使能TIM3时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); // 配置TIM3基本参数 TIM_TimeBaseStructure.TIM_Period = 999; // PWM周期为1ms TIM_TimeBaseStructure.TIM_Prescaler = 71; // 预分频系数为72 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; // 不分频 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; // 向上计数 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); // 配置TIM3通道1为PWM模式 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = 0; // 初始占空比为0% TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; TIM_OC1Init(TIM3, &TIM_OCInitStructure); // 使能TIM3 TIM_Cmd(TIM3, ENABLE); } // 控制电机 void Motor_Control(uint16_t dutyCycle) { TIM3->CCR1 = dutyCycle * 10; // 设置占空比 } ``` 以上代码使用TIM3的通道1作为PWM输出,控制GPIOA的引脚0输出PWM信号。在主函数中循环控制电机,通过调用`Motor_Control()`函数设置占空比实现控制。`PWM_Init()`函数用于初始化PWM模块,配置TIM3的通道1为PWM模式。`Motor_Control()`函数用于设置PWM的占空比,实现电机转速的控制。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xinglei0352

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

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

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

打赏作者

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

抵扣说明:

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

余额充值