506977544

个性签名:每天进步一点,大神带菜鸟,真是谢谢您们的支持、帮助和无私的奉献。

    1. HAL库下,STM32 产生互补PWM 1/5336 stm32/stm8 2018-12-25
      楼主,你好,有用标准库做过互补对称带死区的PWM波吗?
    2. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-09-21
      楼主,你好,想请教你个问z题,我现在想用Tim2的Ch1,Ch2的2个通道实现如下波形,不知是否可行?其中频率都是20KHz的,
    3. wmb731407749 发表于 2015-8-3 17:07 可否共享学习呢?
      可以的,我整理下就上传啊,最近好久没来了。
    4. wmb731407749 发表于 2015-7-21 16:12 楼主,你的程序能调试出来了吗?
      调出来了,能输出两对带死区互补对称的PWM波。
    5. 问题已经解决了,谢谢各位的支持,原因:PA11不能配置为GPIO_AF_6,需要配为GPIO_AF_11.
    6. zhaojun_xf 发表于 2015-7-3 10:24 建议一路一路调,最后确定原因所在。
      谢谢你的回复,你是说的意思是不是先调ch3在PWM1模式工作,再调ch4在PWM2模式工作吗?
    7. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-06-11
      huo_hu 发表于 2015-6-10 15:17 恐怕不能这么做,电流方向在你控制输出pwm就是已知的或者说是希望的,但实际情况是线圈里的电流并不是完全的直流,而且由于线圈电感的影响会有相差,转速和负载对相差都有影响,即便你要确定电流也不该在输出的pwm上,应该在桥的输出端.
      我用的是参考电流的幅值与正弦表的乘机,这样电流就会有正负的,现在关键我想关注的是能否把stm32中的        TIM_OCInitStructure.TIM_Pulse = 200;         TIM_OC1Init(TIM1, &TIM_OCInitStructure);这两句不要放在初始化中,而是放在AD中可以吗?怎么实验中一直为低,感觉不应该,但又找不到原因。求帮忙解答 谢谢
    8. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-06-10
      huo_hu 发表于 2015-6-10 11:22 放在AD中是什么目的啊
      AD中采样电压和电流,我想根据电压和电流的不同(方向不同),输出不同的驱动波形,
    9. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-06-10
      huo_hu 发表于 2015-6-2 10:47 记得有一个位是可以设置输出极性的,具体你对着手册看一下.
      楼主,你好,我想用stm32通过全桥spWM调制最终产生正弦波形,现在遇到的问题是: 用stm32f302的我通过TIM1的配置可以产生我要的驱动波形,但是我如果把产生驱动的占空比赋值放到AD中怎么就不对了,例如:我如果TIM1的初始化中直接产生TIM1_CH1输出高,TIM1_CH1N输出低,TIM1_CH2输出低,TIM2_CH2N输出可变占空比的PWM(如图一)是可以的;但是我如果将设置TIM1_CH1,TIM1_CH1N,TIM1_CH2,TIM2_CH2N输出的放在AD中就怎么输出不对呢?求帮忙分析解答,谢谢
    10. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-06-01
      huo_hu 发表于 2015-6-1 12:59 是可以通过软件做到这一点.
      谢谢你的指导,已经实现了:互补的两个通道OCx和OCxN通过寄存器的配置可以产生一个输出PWm波,一个输出低电平的;那能否实现一个输出有一定占空比的PWM波,一路输出高电平??
    11. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-06-01
      huo_hu 发表于 2015-5-27 23:40 可以的,稍微复杂点的是过几个固定周期后再从CH1N输出也可以实现.
      在stm32的互补对称的PWM里面: Re-directing OCxREF to OCx or OCxN In output mode (forced, output compare or PWM), OCxREF can be re-directed to the OCx output or to OCxN output by configuring the CCxE and CCxNE bits in the TIMx_CCER register. This allows you to send a specific waveform (such as PWM or static active level) on one output while the complementary remains at its inactive level. Other alternative possibilities are to have both outputs at inactive level or both outputs active and complementary with dead-time. 在输出模式下(强置、输出比较或PWM),通过配置TIMx_CCER寄存器的CCxE和CCxNE位,OCxREF可以被重定向到OCx或者OCxN的输出。 这个功能可以在互补输出处于无效电平时,在某个输出上送出一个特殊的波形(例如PWM或者静态有效电平)。另一个作用是,让两个输出同时处于无效电平,或处于有效电平和带死区的互补输出。 但是不理解什么意思,是不是互补的两个通道OCx和OCxN通过寄存器的配置可以产生一个输出PWm波,一个没有输出呢?谢谢   
    12. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-05-27
      huo_hu 发表于 2015-5-26 18:01 这个信号需要你的电路硬件上有配合起到保护的作用.
      那我可以把TIM1_CH1高频输出PWM,TIM1_CH1N一直关闭吗?
    13. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-05-26
      huo_hu 发表于 2015-5-26 15:48 互补输出非正即负本身就没有全关的吧
      那我如果应用stm32的TIM1产生两对互补对称波形(TIM1_CH1、TIM1_CH1N和TIM1_CH2、TIM1_CH2N)控制逆变全桥实现SPWM控制可以吗?还有就是可以不接TIM1_BKIN吗?(看列程或者网上好多都用到了break功能,我理解的是外部硬件需要关驱动了需要,但是控制产生SPWM不需要TIM1_BKIN,不知我这样理解对不对?)麻烦请楼主帮忙指导,谢谢
    14. spwm超级无敌stm32步进电机控制教程 255/164068 电机驱动控制(Motor Control) 2015-05-26
      楼主,你好,如果我用TIM1的TIM1_CH1和TIM1_CH1N来产生互补对称的PWM波,请问可以产生占空比为0的波吗?也就是关全桥驱动,谢谢!
    15. 各位有没有sleep的例子? 7/6040 stm32/stm8 2015-05-22
      jkwzh 发表于 2007-12-28 18:21 AN2629 STM32F101xx和STM32F103xx的低功耗模式 (2007年10月)本文是面向那些需要了解STM32F101xx和STM32F103xx的低功耗模式下软硬实现概况的系统设计人员。文中讲述了如何使用STM32F0xxx产品系列以及时钟系统、寄存器设置和低功耗管理的细节,用户可据此在功耗敏感应用中优化STM32F10xxx的使用。本文的前四节介绍了STM32F10xxx中用于低功耗配置的相关部分,后面的部分从一个使用的角度演示了低功耗功能的应用。各个部分都是依据同时发布的软件讲解的。英文下载  程序下载
      你好,能帮我分享下吗?谢谢,我点下载怎么是网络错误,下载不了。
    16. huo_hu 发表于 2015-4-14 20:10 不可以,计数方式是属于定时器而不是通道,一个定时器只能用一种
      好的,谢谢!
    17. huo_hu 发表于 2015-4-14 10:20 是这个意思,具体能不能行你的做下实验
      你好,再问一个问题,TIM1计数器的通道我想这样分配你看会不会有什么问题,谢谢你的解答指导 1、配置两对带死区的互补对称的PWM(TIM1_CH1和TIM1_CH1N,TIM1_CH2和TIM1_CH2N),配置计数模式为向上计数; 2、再配置两路PWM(TIM1_CH3和TIM1_CH4),配置技术模式为中央对齐1计数模式; 请问针对同一个TIM1计数器,这样设置两种计数模式可以吗?
    18. huo_hu 发表于 2015-4-14 10:20 是这个意思,具体能不能行你的做下实验
      好的,谢谢你的指导,等实验后再告诉你结果。
    19. huo_hu 发表于 2015-4-10 22:11 这些结构体只是在初始化时传一下参数,然后就没用了,gpio如果一样的设置参数可以直接用"或"在一起,一次完成,timebase是对定时器时钟部分的设置只有一个,OC和BTR的设置是对通道的,两个通道一定要两次.
      有点乱,重新发一下,请帮我看看这样是否正确呢?谢谢 //PWM1 for inverter (PA8---TIM1_CH1(pin29),PB13---TIM1_CH1N(pin26)) //PWM2 for inverter (PA9---TIM1_CH2(pin30),PB14---TIM1_CH2N(pin27)) GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure,TIM_OCInitStructure1; TIM_BDTRInitTypeDef TIM_BDTRInitStructure,TIM_BDTRInitStructure1; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;    //PA.8 and PA.9 for TM1_CH1 and TM1_CH2 pin config GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;  //PB.13 and PB.14 for TIM1_CH1N and TIM1_CH2N pin config GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   GPIO_Init(GPIOB,&GPIO_InitStructure); //TIM base config TIM_DeInit(TIM1);                      TIM_TimeBaseStructure.TIM_Period=1200-1;           //72M/1200 = 60k TIM_TimeBaseStructure.TIM_Prescaler = 0;           //  72M/(0+1) = 72M TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;   TIM_TimeBaseStructure.TIM_RepetitionCounter=0;       TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); //PWM1输出配置 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;       // TIM_OCInitStructure.TIM_Pulse = 3000-1;          TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;   TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;   TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable; TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;    TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; TIM_OC1Init(TIM1,&TIM_OCInitStructure);                TIM_BDTRInitStructure.TIM_DeadTime = 0x24;         TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure); //PWM2输出配置 TIM_OCInitStructure1.TIM_OCMode = TIM_OCMode_PWM1;    // TIM_OCInitStructure1.TIM_Pulse = 3000-1;          TIM_OCInitStructure1.TIM_OCPolarity=TIM_OCPolarity_High;    TIM_OCInitStructure1.TIM_OutputState=TIM_OutputState_Enable;    TIM_OCInitStructure1.TIM_OCNPolarity = TIM_OCNPolarity_High;   TIM_OCInitStructure1.TIM_OutputNState=TIM_OutputNState_Enable; TIM_OCInitStructure1.TIM_OCIdleState=TIM_OCIdleState_Reset;    TIM_OCInitStructure1.TIM_OCNIdleState=TIM_OCNIdleState_Reset; TIM_OC1Init(TIM1,&TIM_OCInitStructure1);               TIM_BDTRInitStructure1.TIM_DeadTime = 0x24;          TIM_BDTRInitStructure1.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable; TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure1); TIM_Cmd(TIM1,ENABLE);                      TIM_CtrlPWMOutputs(TIM1, ENABLE);               
    20. huo_hu 发表于 2015-4-10 22:11 这些结构体只是在初始化时传一下参数,然后就没用了,gpio如果一样的设置参数可以直接用"或"在一起,一次完成,timebase是对定时器时钟部分的设置只有一个,OC和BTR的设置是对通道的,两个通道一定要两次.
      //PWM1 for inverter (PA8---TIM1_CH1(pin29),PB13---TIM1_CH1N(pin26)) //PWM2 for inverter (PA9---TIM1_CH2(pin30),PB14---TIM1_CH2N(pin27)) GPIO_InitTypeDef GPIO_InitStructure; TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; TIM_OCInitTypeDef TIM_OCInitStructure,TIM_OCInitStructure1; TIM_BDTRInitTypeDef TIM_BDTRInitStructure,TIM_BDTRInitStructure1; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;    //PA.8 and PA.9 for TM1_CH1 and TM1_CH2 pin config GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA,&GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 | GPIO_Pin_14;  //PB.13 and PB.14 for TIM1_CH1N and TIM1_CH2N pin config GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;   GPIO_Init(GPIOB,&GPIO_InitStructure); //TIM base config TIM_DeInit(TIM1);                      //¸´Î»TIM1¶¨Ê±Æ÷ TIM_TimeBaseStructure.TIM_Period=1200-1;           //×Ô¶¯ÖØ×°ÔؼĴæÆ÷µÄÖµ  72M/1200 = 60k(ƵÂÊ) TIM_TimeBaseStructure.TIM_Prescaler = 0;           //ʱÖÓÔ¤·ÖƵÊý  72M/(0+1) = 72M TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;    //²ÉÑù·ÖƵ TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;  //ÏòÉϼÆÊý TIM_TimeBaseStructure.TIM_RepetitionCounter=0;       //Öظ´¼Ä´æÆ÷£¬ÓÃÓÚ×Ô¶¯¸üÐÂPWMÕ¼¿Õ±È TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure); //PWM1输出配置 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;      //ÉèÖÃΪpwm1Êä³öģʽ // TIM_OCInitStructure.TIM_Pulse = 3000-1;          //ÉèÖÃÕ¼¿Õ±Èʱ¼ä (¸ù¾ÝµçÁ÷ÄÚ»·¼ÆËãµÄÕ¼¿Õ±È½øÐи³Öµ) TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;   //ÉèÖÃÊä³ö¼«ÐÔ TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //ʹÄܸÃͨµÀÊä³ö TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;  //ÉèÖû¥²¹¶ËÊä³ö¼«ÐÔ TIM_OCInitStructure.TIM_OutputNState=TIM_OutputNState_Enable;//ʹÄÜ»¥²¹Êä³ö TIM_OCInitStructure.TIM_OCIdleState=TIM_OCIdleState_Reset;   //ËÀÇøºóÊä³ö״̬ TIM_OCInitStructure.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //ËÀÇøºó»¥²¹¶ËÊä³ö״̬ TIM_OC1Init(TIM1,&TIM_OCInitStructure);              //°´ÕÕÖ¸¶¨²ÎÊý³õʼ»¯ TIM_BDTRInitStructure.TIM_DeadTime = 0x24;         //ÉèÖÃËÀÇøʱ¼ä1us TIM_BDTRInitStructure.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;// TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure); //PWM2输出配置   TIM_OCInitStructure1.TIM_OCMode = TIM_OCMode_PWM1;      //ÉèÖÃΪpwm1Êä³öģʽ // TIM_OCInitStructure1.TIM_Pulse = 3000-1;          //ÉèÖÃÕ¼¿Õ±Èʱ¼ä (¸ù¾ÝµçÁ÷ÄÚ»·¼ÆËãµÄÕ¼¿Õ±È½øÐи³Öµ) TIM_OCInitStructure1.TIM_OCPolarity=TIM_OCPolarity_High;   //ÉèÖÃÊä³ö¼«ÐÔ TIM_OCInitStructure1.TIM_OutputState=TIM_OutputState_Enable;  //ʹÄܸÃͨµÀÊä³ö TIM_OCInitStructure1.TIM_OCNPolarity = TIM_OCNPolarity_High;  //ÉèÖû¥²¹¶ËÊä³ö¼«ÐÔ TIM_OCInitStructure1.TIM_OutputNState=TIM_OutputNState_Enable;//ʹÄÜ»¥²¹Êä³ö TIM_OCInitStructure1.TIM_OCIdleState=TIM_OCIdleState_Reset;   //ËÀÇøºóÊä³ö״̬ TIM_OCInitStructure1.TIM_OCNIdleState=TIM_OCNIdleState_Reset; //ËÀÇøºó»¥²¹¶ËÊä³ö״̬ TIM_OC1Init(TIM1,&TIM_OCInitStructure1);             //°´ÕÕÖ¸¶¨²ÎÊý³õʼ»¯ TIM_BDTRInitStructure1.TIM_DeadTime = 0x24;          //ÉèÖÃËÀÇøʱ¼ä1us TIM_BDTRInitStructure1.TIM_AutomaticOutput = TIM_AutomaticOutput_Enable;// TIM_BDTRConfig(TIM1,&TIM_BDTRInitStructure1); TIM_Cmd(TIM1,ENABLE);                      //´ò¿ªTIM1 TIM_CtrlPWMOutputs(TIM1, ENABLE);                //PWMÊä³öʹÄÜ

最近访客

< 1/1 >

统计信息

已有17人来访过

  • 芯积分:21
  • 好友:7
  • 主题:30
  • 回复:152

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言