输出占空比和频率实时可调的PWM波!
实验目的:
学习定时器的PWM功能
硬件资源:
1,DS0(连接在PB5)
2,定时器3(TIM3),使用TIM3的通道2(CH2),开启部分重映射,将TIM3_CH2输出到PB5.
从而实现PWM输出控制DS0亮度.
实验现象:
本实验,DS0由暗到亮,再由亮到暗,再由暗到亮,依次循环.
注意事项:
无.
单片机源程序如下:
- #include "led.h"
- #include "delay.h"
- #include "key.h"
- #include "sys.h"
- #include "usart.h"
- #include "timer.h"
-
- int main(void)
- {
- u16 pwmval=6429; // 7143*90%=6428.7
- u8 flag=1;
- delay_init(); //延时函数初始化
- //NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
- //uart_init(115200); //串口初始化为115200
- //LED_Init(); //LED端口初始化
- TIM3_PWM_Init(7143,71);//预分频72:72000000÷(71+1)=1000000 自动重装载值由140Hz频率计算得到:1000000÷140=7142.86
- while(1)
- {
- if(flag==0)
- {
- TIM_SetCompare2(TIM3,pwmval);
- delay_ms(500); //90%的占空比延时0.5秒
- flag=1;
- }
- if(flag==1)
- {
- if(pwmval>714) // 7143*10%=714.3
- {
- pwmval=pwmval-27; // 占空比变化范围:7143*0.8=5714.4
- // 变化时间段的时间分割1500ms÷7ms=214.285(段)
- // 每个计数周期对应占空比变化基数
- TIM_SetCompare2(TIM3,pwmval);
- delay_ms(7); // 频率140HZ等于周期0.007秒
- }
- if(pwmval<714)
- {
- pwmval=6429;
- flag=0;
- }
- }
- }
- }
复制代码
所有资料51hei提供下载:
(成功) PWM输出实验 2017.4.20.7z
(185.82 KB, 下载次数: 389)
|