打印
[MM32软件]

【EV Board (MM32L0136C7P)测评】+ TIM输出PWM波形

[复制链接]
867|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
muxb|  楼主 | 2022-12-8 11:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
#申请原创# 从原理图上挑了两个SLCD没用到的脚,PA0,PA1,用来做PWM的波形输出。因为想继续用SLCD来显示时间和温度。



可以看到,PA0,PA1的 AF2的功能是TIM4的CH1,CH2。

控制TIM4计时器定时1ms一个周期,每个周期和ARR的值比较并输出波形。
TIM4的代码如下:
//PA0-TIM4_CH1
//PA1-TIM4_CH2
void TIM4_PWM_Init(u16 arr, u16 psc)
{
        GPIO_InitTypeDef GPIO_InitStruct;
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStruct;

        RCC_GPIO_ClockCmd(GPIOA, ENABLE);
        //PA0
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource0, GPIO_AF_2);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
        //PA1
        GPIO_PinAFConfig(GPIOA, GPIO_PinSource1, GPIO_AF_2);
    GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStruct);
        
    RCC_APB1PeriphClockCmd(RCC_APB1ENR_TIM4, ENABLE);
    TIM_TimeBaseStructInit(&TIM_TimeBaseStruct);
    TIM_TimeBaseStruct.TIM_Period = arr;
    TIM_TimeBaseStruct.TIM_Prescaler = psc;
    TIM_TimeBaseStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStruct.TIM_RepetitionCounter = 0;
    TIM_TimeBaseStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStruct);
        
        //CH1,CH2
        TIM4->CCMR1 |= 0x6060;        //PWM1
        TIM4->CCER |= 0x0011;
        TIM4->CCR1 = arr*1/10;
        TIM4->CCR2 = arr*1/5;

    TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable);
    TIM_ARRPreloadConfig(TIM4, ENABLE);
    TIM_CtrlPWMOutputs(TIM4, ENABLE);
    TIM_Cmd(TIM4, ENABLE);
}

void timer_init(void)
{        
        //1ms
        TIM4_PWM_Init(800, 60-1);
        //10ms
        TIM16_Init(8000, 60-1);
        //1ms
        TIM17_Init(800, 60-1);
}

CH1输出占空比1/10的PWM,CH2输出占空比1/5的PWM。
输出波形如下:

测量波形与代码逻辑一致。
OK.

使用特权

评论回复
沙发
sdCAD| | 2022-12-15 10:29 | 只看该作者
支持多大的PWM的分辨率              

使用特权

评论回复
板凳
muxb|  楼主 | 2022-12-15 10:57 | 只看该作者
sdCAD 发表于 2022-12-15 10:29
支持多大的PWM的分辨率

分辨率由自己填的CCR的值决定。例如:CCR最小值为1,当前配置的分辨率可达1/800。

使用特权

评论回复
地板
sheflynn| | 2022-12-15 11:36 | 只看该作者
定时器支持几路PWM的输出?              

使用特权

评论回复
5
muxb|  楼主 | 2022-12-15 11:47 | 只看该作者
sheflynn 发表于 2022-12-15 11:36
定时器支持几路PWM的输出?

从封装管脚看,全部定时器最多支持8通道输出。

使用特权

评论回复
6
mnynt121| | 2022-12-15 13:43 | 只看该作者
MM32L0136C7P可以生成互补PWM吗?

使用特权

评论回复
7
muxb|  楼主 | 2022-12-15 14:07 | 只看该作者
mnynt121 发表于 2022-12-15 13:43
MM32L0136C7P可以生成互补PWM吗?

可以,输出电平极性可设置,选两个通道,输出相反的电平极性就行了。

使用特权

评论回复
8
tpgf| | 2023-1-3 16:05 | 只看该作者
这个电路板上哪种定时器可以输出pwm波形呀

使用特权

评论回复
9
qcliu| | 2023-1-3 16:12 | 只看该作者
muxb 发表于 2022-12-15 11:47
从封装管脚看,全部定时器最多支持8通道输出。

您说的这8通道是说的同时能输出8路pwm而不是分时复用吗

使用特权

评论回复
10
drer| | 2023-1-3 16:19 | 只看该作者
请教一个问题 就是不同的定时器 可以同时输出不同占空比的pwm波吗

使用特权

评论回复
11
coshi| | 2023-1-3 16:25 | 只看该作者
咱们常用的pwm输出 最大能支持输出多块频率的波形啊

使用特权

评论回复
12
kxsi| | 2023-1-3 16:47 | 只看该作者
我们使用的普通的定时器也支持pwm输出吗

使用特权

评论回复
13
wiba| | 2023-1-3 16:54 | 只看该作者
不同的定时器可以做互补输出吗 配合的有问题吗

使用特权

评论回复
14
muxb|  楼主 | 2023-1-4 14:43 | 只看该作者
qcliu 发表于 2023-1-3 16:12
您说的这8通道是说的同时能输出8路pwm而不是分时复用吗

是的。

使用特权

评论回复
15
muxb|  楼主 | 2023-1-4 14:44 | 只看该作者
drer 发表于 2023-1-3 16:19
请教一个问题 就是不同的定时器 可以同时输出不同占空比的pwm波吗

可以的。

使用特权

评论回复
16
muxb|  楼主 | 2023-1-4 14:45 | 只看该作者
kxsi 发表于 2023-1-3 16:47
我们使用的普通的定时器也支持pwm输出吗

看芯片手册的说明。

使用特权

评论回复
17
muxb|  楼主 | 2023-1-4 14:46 | 只看该作者
wiba 发表于 2023-1-3 16:54
不同的定时器可以做互补输出吗 配合的有问题吗

可以的。

使用特权

评论回复
18
muxb|  楼主 | 2023-1-4 14:47 | 只看该作者
coshi 发表于 2023-1-3 16:25
咱们常用的pwm输出 最大能支持输出多块频率的波形啊

频率由自己设置的定时器溢出值决定。

使用特权

评论回复
19
muxb|  楼主 | 2023-1-4 14:51 | 只看该作者
tpgf 发表于 2023-1-3 16:05
这个电路板上哪种定时器可以输出pwm波形呀

通用定时器,基本定时器和LPTIM都可以的。

使用特权

评论回复
20
muxb|  楼主 | 2023-1-4 14:51 | 只看该作者
kxsi 发表于 2023-1-3 16:47
我们使用的普通的定时器也支持pwm输出吗

是的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

36

主题

594

帖子

7

粉丝