打印
[AT32F421]

有人用过421的timer1外部时钟输入方式吗,遇到点奇怪的问题

[复制链接]
1193|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
配置外部时钟模式b,输入10兆时钟,pr设置9,得到的200k的频率,似乎是多了5分频,并且分频输出的频率存在抖动
提升或者降低外部时钟的频率,输出频率一直等比例的变化,说明外部时钟模式是有效的,但是两个问题:
1、多了5分频,也没找到在哪里取消
2、输出频率抖动,似乎是会漏掉一些输入的脉冲,但是降低输入时钟的频率看不到改善

使用特权

评论回复
沙发
muyichuan2012| | 2022-2-20 11:32 | 只看该作者
不会哦  你定时器的配置代码贴一下呢

使用特权

评论回复
板凳
wangshujun|  楼主 | 2022-2-20 12:19 | 只看该作者
测试了两种方式,都使用pa0,tmr1ext作为外部时钟
a方式
  TMR1->stctrl_bit.esdiv = 0;
  TMR1->stctrl_bit.esp = 0;
  TMR1->stctrl_bit.esf = 0;
  TMR1->stctrl_bit.ecmben = 0;
  TMR1->stctrl_bit.smsel =7;
  TMR1->stctrl_bit.stis =7;
b方式
  TMR1->stctrl_bit.esdiv = 0;
  TMR1->stctrl_bit.esp = 0;
  TMR1->stctrl_bit.esf = 0;
  TMR1->stctrl_bit.ecmben = 1;
  TMR1->stctrl_bit.smsel = 0;
  TMR1->stctrl_bit.stis = 0;
这应该是硬件实现吧,频率跳动不应该,而且额外的5分频找不到

使用特权

评论回复
地板
wangshujun|  楼主 | 2022-2-20 12:32 | 只看该作者
固件库里面的外部输入是tmr3,用ch1输入的,
我使用的是20pin的型号,能用的ext只有tmr1
能输出互补并且可以配置外部时钟的好像也没有其他定时器
现在困惑的是时基设置3,10兆输入,输出pwm是500k,并且在示波器上看脉宽在跳动

使用特权

评论回复
5
wangshujun|  楼主 | 2022-2-20 12:43 | 只看该作者
原本的计划是输入20兆时钟,输出1兆的互补带死区的pwm
现在比较困惑
目前可以实现输入10-20兆时钟,按照存在额外的5分频计算得到期望的互补输出,但是死区就没法设置了

使用特权

评论回复
6
wangshujun|  楼主 | 2022-2-20 12:47 | 只看该作者
/**
  * @brief  tmr1 configuration.
  * @param  none
  * @retval none
  */
static void tmr1_config(){
        gpio_init_type gpio_initstructure;
        tmr_output_config_type tmr_output_struct;

        crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
        crm_periph_clock_enable(CRM_GPIOB_PERIPH_CLOCK, TRUE);

        gpio_init(GPIOB, &gpio_initstructure);
        gpio_default_para_init(&gpio_initstructure);
        gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
        gpio_initstructure.gpio_pins = GPIO_PINS_1;
        gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
        gpio_initstructure.gpio_pull = GPIO_PULL_NONE;
        gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init(GPIOB, &gpio_initstructure);
       
        gpio_default_para_init(&gpio_initstructure);
        gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
        gpio_initstructure.gpio_pins = GPIO_PINS_10;
        gpio_initstructure.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
        gpio_initstructure.gpio_pull = GPIO_PULL_NONE;
        gpio_initstructure.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init(GPIOA, &gpio_initstructure);

        gpio_default_para_init(&gpio_initstructure);
        gpio_initstructure.gpio_mode = GPIO_MODE_MUX;
        gpio_initstructure.gpio_pins = GPIO_PINS_0;
        gpio_init(GPIOA, &gpio_initstructure);       
       
        gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE1, GPIO_MUX_2);
        gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE10, GPIO_MUX_2);
        gpio_pin_mux_config(GPIOA, GPIO_PINS_SOURCE0, GPIO_MUX_5);

        crm_periph_clock_enable(CRM_TMR1_PERIPH_CLOCK, TRUE);
        tmr_base_init(TMR1, 2-1, 0);
        tmr_cnt_dir_set(TMR1, TMR_COUNT_UP);


  TMR1->stctrl_bit.esdiv = 0;
  TMR1->stctrl_bit.esp = 0;
  TMR1->stctrl_bit.esf = 0;
  TMR1->stctrl_bit.ecmben = 1;
  TMR1->stctrl_bit.smsel = 0;
  TMR1->stctrl_bit.stis = 0;

       
        tmr_output_default_para_init(&tmr_output_struct);
        tmr_output_struct.oc_mode = TMR_OUTPUT_CONTROL_PWM_MODE_B;
        tmr_output_struct.oc_output_state = TRUE;
        tmr_output_struct.oc_polarity = TMR_OUTPUT_ACTIVE_HIGH;
        tmr_output_struct.oc_idle_state = TRUE;
        tmr_output_struct.occ_output_state = TRUE;
        tmr_output_struct.occ_polarity = TMR_OUTPUT_ACTIVE_HIGH;
        tmr_output_struct.occ_idle_state = TRUE;
        tmr_output_channel_config(TMR1, TMR_SELECT_CHANNEL_3, &tmr_output_struct);
       
        //tmr_output_channel_polarity_set(TMR1, TMR_SELECT_CHANNEL_1C,TMR_POLARITY_ACTIVE_HIGH);
        tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_3, 1);
        tmr_channel_value_set(TMR1, TMR_SELECT_CHANNEL_1, 1);
        tmr_counter_enable(TMR1, TRUE);
        tmr_output_enable(TMR1, TRUE);
}

使用特权

评论回复
7
wangshujun|  楼主 | 2022-2-20 12:53 | 只看该作者
ch1---PB1输出
ch2---PA0输入,来自一路pll芯片的输入

微信图片_20220220125024.jpg (460.45 KB )

微信图片_20220220125024.jpg

使用特权

评论回复
8
wangshujun|  楼主 | 2022-2-20 21:58 | 只看该作者
找到问题了,系统主时钟设置太低了,直接用了外部晶振,外部输入时钟依赖主时钟的同步,两者接近的时候形成差频效果了

使用特权

评论回复
9
wangshujun|  楼主 | 2022-2-20 22:35 | 只看该作者
虽然频率基本是对的,但是使用外部时钟来发送pwm的时候还是没能达成预期,使用外部输入生成的pwm抖动还是很明显的,看来还要改硬件

使用特权

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

本版积分规则

38

主题

513

帖子

3

粉丝