网站建设价格优惠,广州网站优化网站建设,如何建设废品网站,成都网络营销公司哪个好文章目录 前言一、cubemx配置二、代码1.serve.c2.serve.h3.主函数 总结 前言
stm32对舵机进行控制#xff0c;很简单直接一个pwm就可以实现 pwm的周期是50HZ占空比分别对应 一个0.5ms的高电平对应于0度 一个1.5ms的高电平对应于90度 一个2.5ms的高电平对应于180度 因此#… 文章目录 前言一、cubemx配置二、代码1.serve.c2.serve.h3.主函数 总结 前言
stm32对舵机进行控制很简单直接一个pwm就可以实现 pwm的周期是50HZ占空比分别对应 一个0.5ms的高电平对应于0度 一个1.5ms的高电平对应于90度 一个2.5ms的高电平对应于180度 因此您可以通过改变PWM信号的占空比来改变舵机的角度。占空比是PWM信号的高电平时间与PWM信号的总周期之比。在这里PWM信号的总周期通常是20ms对应于50Hz的频率所以 对于0度占空比是0.5ms/20ms 2.5% 对于90度占空比是1.5ms/20ms 7.5% 对于180度占空比是2.5ms/20ms 12.5% 一、cubemx配置 以我的c8t6为例 时钟频率是72MHZ 为了得到50HZ就设定为720-1 和 2000-1 其中2000-1的arr值后面还要用到。
二、代码
1.serve.c
#include serve.hServo ser_1;void servo_init(Servo* servo, TIM_HandleTypeDef* htim, uint32_t channel, uint16_t arr)
{servo-htim htim;servo-channel channel;servo-arr arr;HAL_TIM_PWM_Start(htim,channel); }void set_servo_angle(Servo* servo, uint8_t angle)
{if (angle 180) {// Angle out of rangeangle 180;}if(angle0){angle 0;}servo-angle angle;uint16_t pulse_length (uint16_t)(servo-arr * 1.0 / 20 * (1.0 angle / 180.0));__HAL_TIM_SET_COMPARE(servo-htim, servo-channel, pulse_length);
}
2.serve.h
typedef struct {TIM_HandleTypeDef* htim;uint32_t channel;uint16_t arr;uint8_t angle;
} Servo;extern Servo ser_1;void servo_init(Servo* servo, TIM_HandleTypeDef* htim, uint32_t channel, uint16_t arr) ;
void set_servo_angle(Servo* servo,uint8_t angle) ;
3.主函数 servo_init(ser_1,htim1,TIM_CHANNEL_1,2000);set_servo_angle(ser_1,180);总结
over