东莞网站建设销售前景怎么样wordpress兼容ie6主题
2026/2/9 12:46:16 网站建设 项目流程
东莞网站建设销售前景怎么样,wordpress兼容ie6主题,wordpress 主题 首页,东莞网站建设公司注册目录 前言 一、工作原理 二、接线方式 三、软件程序 sg90.h sg90.c main.c 关键说明#xff08;避坑重点#xff09;!!!! 总结 前言 最近用到了STM32驱动HX711称重传感器模块#xff0c;我这里用的STM32是STM32F103C8T6#xff0c;这个模块的扭矩力能达到1.6KG/…目录前言一、工作原理二、接线方式三、软件程序sg90.hsg90.cmain.c关键说明避坑重点!!!!总结前言最近用到了STM32驱动HX711称重传感器模块我这里用的STM32是STM32F103C8T6这个模块的扭矩力能达到1.6KG/CM所以记录一下一、工作原理核心逻辑STM32 定时器生成 50Hz20ms 周期PWM通过 CCR 值控制 0.5~2.5ms 高电平脉宽SG90 内部解析脉宽实现角度控制关键链路系统时钟→定时器 PSC/ARR定周期→定时器 CCR定脉宽→PWM 输出→SG90 内部闭环执行→稳定角度核心映射角度→CCR 值→脉宽→舵机角度三者为线性对应关系。PWM信号控制信号周期20ms50Hz。脉冲宽度0.5ms - 2.5ms对应角度0° - 180°。二、接线方式VIN5VGNDGNDPWMPA0三、软件程序sg90.h#ifndef __SG90_H #define __SG90_H #include stm32f10x.h // 函数声明 void SG90_Init(void); // 舵机初始化GPIO定时器PWM配置 void SG90_Set_Angle(u16 angle); // 舵机角度设置0~180° #endifsg90.c#include sg90.h #include delay.h // 需自行提供延时函数用于舵机稳定转动 /************************* 核心参数说明 ************************* SG90要求 1. PWM周期20ms50Hz 2. 脉宽范围0.5ms0°~ 2.5ms180° STM32F103系统时钟72MHz默认配置 TIM2时钟APB1总线时钟最大36MHz此处72MHz分频后为36MHz 定时器配置 - 预分频器PSC7199 → 计数频率36MHz/(71991)5kHz - 自动重装值ARR99 → PWM周期(71991)*(991)/36MHz20ms - 脉宽对应值0.5ms→2.55kHz*0.5ms、2.5ms→12.55kHz*2.5ms 为避免浮点运算放大2倍0.5ms→5、2.5ms→25对应0°→180° ****************************************************************/ // 舵机初始化配置GPIOTIM2_CH1 PWM输出 void SG90_Init(void) { // 1. 使能时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // GPIOA时钟使能 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE); // TIM2时钟使能 // 2. 配置GPIO引脚PA0 → TIM2_CH1 复用推挽输出 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode GPIO_Mode_AF_PP; // 复用推挽输出定时器PWM专用 GPIO_InitStructure.GPIO_Speed GPIO_Speed_50MHz; GPIO_Init(GPIOA, GPIO_InitStructure); // 3. 配置定时器时基参数 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_TimeBaseStructure.TIM_Period 99; // 自动重装值ARR99配合PSC7199实现20ms周期 TIM_TimeBaseStructure.TIM_Prescaler 7199; // 预分频器PSC7199 TIM_TimeBaseStructure.TIM_ClockDivision TIM_CKD_DIV1;// 时钟分频1 TIM_TimeBaseStructure.TIM_CounterMode TIM_CounterMode_Up; // 向上计数模式 TIM_TimeBaseInit(TIM2, TIM_TimeBaseStructure); // 4. 配置定时器PWM输出通道CH1 TIM_OCInitTypeDef TIM_OCInitStructure; TIM_OCInitStructure.TIM_OCMode TIM_OCMode_PWM1; // PWM模式1计数CCR时输出有效电平 TIM_OCInitStructure.TIM_OutputState TIM_OutputState_Enable; // 使能输出 TIM_OCInitStructure.TIM_OCPolarity TIM_OCPolarity_High; // 有效电平为高电平SG90高电平脉宽有效 TIM_OCInitStructure.TIM_Pulse 5; // 初始脉宽对应0°0.5ms TIM_OC1Init(TIM2, TIM_OCInitStructure); // 5. 使能通道预装载和定时器 TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Enable); // 使能CCR1预装载保证脉宽稳定 TIM_ARRPreloadConfig(TIM2, ENABLE); // 使能ARR预装载 TIM_Cmd(TIM2, ENABLE); // 启动TIM2 } // 舵机角度设置输入0~180°超出范围自动修正 void SG90_Set_Angle(u16 angle) { u16 ccr_val; // 1. 角度边界修正 if(angle 180) angle 180; if(angle 0) angle 0; // 2. 计算对应CCR1值线性映射0°→5180°→25 // 公式ccr_val 5 (25-5)*angle/180 5 angle/9 ccr_val 5 (angle * 20) / 180; // 3. 更新CCR1值改变PWM脉宽 TIM_SetCompare1(TIM2, ccr_val); // 4. 延时等待舵机稳定转动SG90转动全程约200ms delay_ms(250); }main.c#include stm32f10x.h #include sg90.h #include delay.h int main(void) { // 系统初始化 SystemInit(); // STM32系统时钟初始化默认72MHz delay_init(); // 延时函数初始化需自行实现 SG90_Init(); // 舵机初始化 while(1) { // 测试0° → 90° → 180° → 90° 循环转动 SG90_Set_Angle(0); delay_ms(1000); SG90_Set_Angle(90); delay_ms(1000); SG90_Set_Angle(180); delay_ms(1000); SG90_Set_Angle(90); delay_ms(1000); } }关键说明避坑重点!!!!延时函数delay.h和delay.c需自行实现可通过 SysTick 定时器实现毫秒 / 微秒延时舵机转动需要一定时间不可省略delay_ms(250)。供电问题SG90 在转动时电流较大若直接由 STM32 的 5V 引脚供电可能导致单片机复位建议使用外部电源模块如 3.7V 锂电池 升压模块至 5V。角度精度SG90 为模拟舵机存在 ±5° 左右的误差且不可超过 180° 转动否则会烧毁内部齿轮。定时器替换若需更换其他定时器 / 通道如 TIM3_CH2、PA1只需修改对应时钟、GPIO 引脚和定时器通道配置即可。总结本文介绍了STM32F103C8T6驱动SG90舵机的实现方法。通过定时器生成50Hz20ms周期PWM信号调节0.5-2.5ms脉宽对应0-180°角度控制。详细说明了硬件接线VIN-5V、GND-GND、PWM-PA0和软件实现包括定时器配置、PWM参数计算及角度控制函数。特别强调需注意延时函数实现、外部供电要求、角度精度限制和定时器替换方法。提供完整的工程文件结构sg90.h/c、main.c及避坑重点为舵机控制提供了实用参考方案。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询