OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2019|回复: 2

为啥我采集可变的PWM波(占空比是递增递减%10),数据不对捏,比如我写入TIM3->CCR4=3(),应该输出占空比为70%的数据才对...

[复制链接]

10

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
486
金钱
486
注册时间
2019-12-6
在线时间
151 小时
发表于 2023-8-30 23:51:50 | 显示全部楼层 |阅读模式
//

int main(void)
{
    uint8_t t = 0;
    uint8_t i=0,c=2,dir=1;
    double ht, ct, f, tpsc;

    sys_cache_enable();                             /* 打开L1-Cache */
    HAL_Init();                                     /* 初始化HAL库 */
    sys_stm32_clock_init(160, 5, 2, 4);             /* 设置时钟, 400Mhz */
    delay_init(400);                                /* 延时初始化 */
    usart_init(115200);                             /* 初始化USART */
    led_init();                                     /* 初始化LED */
    gtim_timx_pwm_chy_init(10 - 1, 2000 - 1);        /* 1Mhz的计数频率, 100Khz的PWM */
    atim_timx_pwmin_chy_init();                     /* 初始化PWM输入捕获 */

    GTIM_TIMX_PWM_CHY_CCRX = 2;                     /* 低电平宽度2,高电平宽度8 */

    while (1)
    {
        delay_ms(10);
        t++;

       if (t == 20)                                                /* 每200ms输出一次结果,并闪烁LED1,提示程序运行 */
        {   delay_ms(10);
            if (g_timxchy_pwmin_sta)                                /* 捕获了一次数据 */
            {
                printf("\r\n");                                     /* 输出空,另起一行 */
                printf("PWM PSC  :%d\r\n", g_timxchy_pwmin_psc);    /* 打印分频系数 */
                printf("PWM Hight:%d\r\n", g_timxchy_pwmin_hval);   /* 打印高电平脉宽 */
                printf("PWM Cycle:%d\r\n", g_timxchy_pwmin_cval);   /* 打印周期 */
                tpsc = ((double)g_timxchy_pwmin_psc + 1) / 200;     /* 得到PWM采样时钟周期时间 */
                ht = g_timxchy_pwmin_hval * tpsc;                   /* 计算高电平时间 */
                ct = g_timxchy_pwmin_cval * tpsc;                   /* 计算周期长度 */
                f = (1 / ct) * 1000000;                             /* 计算频率 */
                printf("PWM Hight time:%.3fus\r\n", ht);            /* 打印高电平脉宽长度 */
                printf("PWM Cycle time:%.3fus\r\n", ct);            /* 打印周期时间长度 */
                printf("PWM Frequency :%.3fHz\r\n", f);             /* 打印频率 */
                atim_timx_pwmin_chy_restart();                      /* 重启PWM输入检测 */

                printf("c=%d\r\n",TIM3->CCR4);
                i=100*ht/ct;
                if(i>=90) dir=1;
                if(i==10) dir=0;
                if(dir) c++;
                else c--;
                printf("i=%d\r\n",i);
                TIM3->CCR4=c; //设置占空比
//               HAL_TIM_GenerateEvent(&g_timx_handle, TIM_EVENTSOURCE_UPDATE);
           }                     
            LED1_TOGGLE();                                          /* LED1闪烁 */
            t = 0;        
           }           
       }   
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

10

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
486
金钱
486
注册时间
2019-12-6
在线时间
151 小时
 楼主| 发表于 2023-8-30 23:57:14 | 显示全部楼层
这个是调试的数据,执行了TIM3->CCR4=3这条语句后示波器的已经改变了,但是再次打印数据的时候c=3;占空比i=80; 再次打印变成c=4;占空比i=70;请大神解释一下为啥会这样
C:\Users\Administrator\Documents
回复 支持 反对

使用道具 举报

10

主题

97

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
486
金钱
486
注册时间
2019-12-6
在线时间
151 小时
 楼主| 发表于 2023-9-5 23:52:02 | 显示全部楼层
陶佳不哭 发表于 2023-8-30 23:57
这个是调试的数据,执行了TIM3->CCR4=3这条语句后示波器的已经改变了,但是再次打印数据的时候c=3;占空比i= ...

本人已解决 把这条语句atim_timx_pwmin_chy_restart();   放在TIM3->CCR4=c; //设置占空比这条语句后即可
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-24 06:41

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表