目录
1 pwm的简介
2pwm的工作原理
3pwm的所需的硬件
4 代码配置
1 pwm的简介
pwm:脉冲宽度调制 就是利用数字输出对模拟地电路的的控制 ,简单点就是 对脉宽的控制
2 pwm的工作原理
在上面的图 我们可以看到在y轴 有 三个数据 一个是 cnt(计数值 )CCRX(比较值)ARR(自动重装载值 ) 我们用的是定时器的向上计数 这里就不讲了 直接进入正题。
因为我们的pwm占空比时间 是通过 DAC 转换 才可以得到 舵机的转动 所以 在y的下半轴会有 0和1 的出现 不能理解这个知识点 在后面会体现出来 不用着急 现在我来解析一下这个图 会出现的情况 1 当CCRX<CNT 时 并且是使用向上计数的模式 通道就会输出 数字信号1 反之就是 输出 数字信号0 2 自动重装载值确定 频率 CCRX 确定占空比信号 占空比:就是 一个周期内高电平持续的所占总时间比例
3 pwm的所需的硬件和下载软件
一个 祖传的 c8t6 一个是 SG90 舵ji 下载器 RX接 PA9 TX接PA10 这样就实现了串联 通讯
下载器的配置 红色款款都是需要注意的地方 最后一个 下载注意的地方
4 代码配置
void PwmMotor_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
TIM_TimeBaseInitTypeDef TIMPwm_TimeBaseInitStruct;
TIM_OCInitTypeDef TIMPwm_OCInitStruct;
// GPIO ʱÖÓ ¶¨Ê±Æ÷ʱÖÓ PWM ¸´Óà ʱÖÓ
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB,ENABLE);
RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM3,ENABLE);
RCC_APB2PeriphClockCmd( RCC_APB2Periph_AFIO,ENABLE);
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE);//部分重映射 使能
GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AF_PP;//复用推挽输出
GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;
GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOB,&GPIO_InitStruct);
// 定时器 配置 arr psc 向上计数
TIMPwm_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;//一分频 就是 没有分频
TIMPwm_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上计数
TIMPwm_TimeBaseInitStruct.TIM_Period=200-1;//自动重装载值
TIMPwm_TimeBaseInitStruct.TIM_Prescaler=7200-1;//预分频系数
TIM_TimeBaseInit(TIM3,&TIMPwm_TimeBaseInitStruct);//
// PWM
TIMPwm_OCInitStruct.TIM_OCMode=TIM_OCMode_PWM1;//模式1
TIMPwm_OCInitStruct.TIM_OutputState=TIM_OutputState_Enable;
TIMPwm_OCInitStruct.TIM_OCPolarity=TIM_OCPolarity_Low;// 输出数字信号为0 转为为模拟
信号 控制舵机
TIM_OC2Init(TIM3,&TIMPwm_OCInitStruct);
TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable );//预加载器使能
TIM_Cmd(TIM3,ENABLE); //最后使能定时器
}
pwm的代码我解释一下 因为我用的是 tim3 舵机接了 pb5 pb5 的口是部分重映射 所以我们在配置完 pwm模式 后 gpio的配置 多加一个pb5 的 定时器部分重映射的 使能函数 我在前面提到了为什么 用到DAC转换才能控制电机 我们首先要配置一个函数 可以使能他的模拟电路 TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable ); 这是不可缺的一个步骤
我这里回顾一下前面讲解的 大概 有几个核心要点 1 要知道 cnt和ccrx的关系 并且会得出什么的结果 2懂得周期和频率的关系 和相关计算 3知道dac转换的知识 D表示什么 A表示什么 占空比是什么 4 不要忘记使能模拟信号的函数
主函数部分 首先 定义一个变量 并赋值 变量就是比较值 比较值可以确定占空比的周期长度
设定了 200 最大的计数值 占空比就占了 (195-175)/200 =1/10 总的T=(200-1)*(7200-1)/72M=20MS 而占空比时间 就是 2ms 转动的角度有四个 一个角度持续的时间 就是 0.5ms
因为计数器的值 就是存入ARR 的 所以可以 说ARR就是CNT CNT 固定了 CCRX的大小 不就是可以确定 占空比在周期时间的长短了吗
感谢 阅读 下次见 !!!!!!!!!!!