提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
原理:“输入捕获和输出比较单元”“”“输出比较模块”
输出比较可以通过比较CNT计数器与CCR捕获比较寄存器的值
“输出比较模块”的双重功能:
“输出比较模块”做输入捕获功能时,它是捕获寄存器;
“输出比较模块”做输出比较功能时,它是比较寄存器;
在定时器PWM输出比较功能中,会比较CNT计数器和CCR比较器的值,CNT计数自增,CCR是可以设定的值
使用PWM波形近似等效模拟信号输出,调控点亮和熄灭的时间比例,就能让led呈现不同级别的亮度,对于电机调速也是一样的原理,PWM的应用场景必须是一个惯性系统,比如电机断电不会马上停转,这样的惯性场景;
“脉宽调制”在于控制高低电平的持续时间
这时一个周期10ms的PWM波形,延续3部分
①部分前4ms亮,后6ms灭,亮度最暗
②部分前6ms亮,后4ms灭,亮度居中
③部分前8ms亮,后2ms灭,亮度最亮
占空比:就是输出的PWM中,高电平保持的时间与该PWM的时钟周期的时间之比;
分辨率:也就是占空比最小能达到多少,如8位的PWM,理论的分辨率就是1:255(单斜率),16位的的PWM理论就是1:65535(单斜率)。假设我们规定:当t=0时我们称占空比为0%,t=T时我们称占空比为100%,那么8位即为把100%的占空比分为256(2的8次方)个档位,16位即为将其分为65536个档位,这样当“位”越大,则其分辨率就越高,那么在进行脉宽调制时就越接近“无级调速”
图中“有效电平”指高电平,“无效电平”指低电平;
接线:led正极接在Pin引脚,led负极接在GND,这时正极性驱动方法,高电平点亮低电平熄灭
①RCC开启TIM时钟和GPIO时钟;
②配置时基单元,包括这前面的时钟源选择
③配置输出比较单元,里面包括CCR值,输出比较模式,极性选择,输出使能,用库函数的结构体同一配置
④配置GPIO,初始化为“复用推挽输出”
⑤运行控制,启动计数器,这样就嫩高输出PWM了
TIM_OC1Init(1,2);
TIM_OC2Init(1,2);
TIM_OC3Init(1,2);
TIM_OC3Init(1,2);
用来配置输出比较单元的,就是第③步,里面包括CCR值,输出比较模式,极性选择,输出使能,用库函数的结构体同一配置,你需要哪个通道,就调用哪个序号的函数;
1.参数是定时器选择;
2.参数指结构体地址;
TIM_OCStructInit()
这个是用来给输出比较结构体赋一个默认值的
TIM_SetCompare1();
TIM_SetCompare2();
TIM_SetCompare3();
TIM_SetCompare4();
单独更改CCR寄存器值的函数,更改占空比就需要用到;
PWM频率=计数器的更新频率
如果要产生一个1KHz,占空比为50%,分辨率为1%的PWM波形
那代入公式就是:72MHz/(PSC+1)/(ARR+1)=1000;
CCR/(ARR+1)=50%;
1/(ARR+1)=1%;
72MHz/(719+1)/(99+1)=1000;
50/(99+1)=50%;
1/(99+1)=1%;
APB1时钟、APB2时钟出厂默认都是72MHz,“PSC+1”、“ARR+1”、“CCR”这三个参数决定了PWM频率、占空比和分辨率,用工具验证数值和计算吻合;
这是一个通过TIM2定时器CH1、CH2通道产生PWM波,分别由PA0和PA1输出,并且设定PWM模式互补的呼吸灯程序,经测试PA0和PA1交点亮和熄灭,PA0最亮的时候PA1最暗,PA0最暗的时候PA1最亮;
取消代码屏蔽,开启重映射,就会
TIM2_CH1-PA0→PA15;TIM2_CH2-PA1→PB3;TIM2_CH3-PA2→PA2; TIM2_CH3-PA3→PA3;
测试:
**资料链接:**https://pan.baidu.com/s/1teVnq1LJ3VTQ55Lj8gTnFg 提取码:1234
1.电路接线:
驱动板IN1接主板A2,IN2接主板GND,IN3接主板A3,IN4接主板GND;
驱动板MOTOR-A:上接led1正,下接led负;
驱动板MOTOR-B:上接led2正,下接led负;
驱动板VCC为9v直流;
2.代码实现:
同9.八灯流水呼吸灯测试一样;
3.测试验证:
、
2.代码实现:同上
3.测试结果:
设置GPIO_Mode_AF_PP;复用推挽的原因是:根据手册描述对于普通的开漏推挽输出,引脚的控制权是来自于数据寄存器的,那如果想让定时器来控制引脚的化,那就要使用复用推挽输出的模式了,在这里输出数据寄存器将被断开,输出控制权将转移给片上外设,片上外设在这里就是TIM2-CH1,所以只有把GPIO设置成复用推挽输出,引脚的控制权才能交给TIM2-CH1,才能输出PWM
主程序的i是向系统借的一个变量,他指向函数PWM_SetCompare1(uint16_t Compare)的参数Compare,而这个函数的作用整好是单独更新CCR值,这样间接的改变CCR来实现调整占空比,但要知道真正的调整占空比不只是由CCR决定,他是由ARR、PSC和CCR一起共同决定的;
stm32 timer pwm 计算小工具:
链接:https://pan.baidu.com/s/1VXd-Ej1EAWsRmZ0FHphe7Q
提取码:em42
完整程序下载:
链接:https://pan.baidu.com/s/1Zr7_eiOaBZDZk38LpCou8Q
提取码:1mpp
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。