This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] EK-TM4C1294XL:当 PWM0激活时、GPTM 边沿计数加速 GPTM OneShot。

Guru**** 2478495 points
Other Parts Discussed in Thread: LM4041-N, INA240, TM4C1294KCPDT, TM4C1294NCPDT

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/687869/ek-tm4c1294xl-gptm-edge-counts-accelerate-gptm-oneshot-when-pwm0-active

器件型号:EK-TM4C1294XL
主题中讨论的其他器件:LM4041-NINA240TM4C1294KCPDTTM4C1294NCPDT

问题条件:

  1/2 宽输入边沿 下 计数的 GPTM 12位输入转速计信号。  每210个边沿计数@4PPS 驱动一个中断 并 触发  为201Hz 设置的一次性计时器  、用于 通过 中断处理程序更新匹配计数变量、每个周期重新加载相同的201Hz 时间。  该周期在 PMW0 激活时漂移很大。

2. OneShot 处理程序使用 GPTM 边沿计数器寄存      器来确定边沿输入事件的当前计数、方法是从 GPTMTnILR 寄存器的值中减去 GPTMTnR、并更新中断边沿计数频率中使用的匹配计数静态变量。 然后、骑手重新加载 OneShot  @201Hz 以用于下一个周期。 这证明了更新 RPM 数字显示的方法比在每个间隔等待60秒和 对相同数量的预设边沿进行计数 以产生与 CCP1输入频率相关的边沿计数中断更快。

3.只要 PWM0外设不使用 NVIC 或 GPIO 端口、OneShot 速度更新就会稳定且准确。 当 PWM0 占空比加速时、OneShot reload 的频率也会加速、201Hz 加速、但 CCP1输入保持在102Hz 或1671 RPM 的稳定状态。     如果保持相同的 CCP1 (102Hz 边沿计数)并且 PWM0输出 GPIO 引脚时上升沿或下降沿几乎没有相位抖动>1us、这种情况会发生什么? 同时测试 了仅 POS 边缘事件计数、在102Hz 时具有0%的相位抖动、发生相同的错误触发 CCP1 。

4. 经验证 的201hz 脉冲是通过 GPIO 引脚在边沿计数中断处理程序内产生的、加速并成为稳定的1us 脉冲。 由于    CCP1边沿计数保持静态、很难测量201Hz 频闪脉冲、而不是通过亲眼目睹单个频闪脉冲频率的人眼/大脑错误加速。

5、 GPTM 边沿计数和 OneShot 定时器在配置后已同步、并且每个定时器 分别具有相同的 INT 优先级0x40、INT51/INT36。

问:  其中一 个 PWM 外设的 GPIO 管脚 MUX 值是否可以在内部 通过 GPTM 边沿计数输入的 CCP1进行多路复用?

问:PWM0中断/ADC0触发器或 GPIO 引脚如何严重影响 GPTM-0或 OneShot GPTM-3的 CCP1输入?

答:2018年10月5日;外部

// Taco 输入 PL5:TM0CCP1
MAP_GPIOPinConfigure (GPIO_PL5_T0CCP1);
MAP_GPIOPinTypeTimer (GPIO_PORTL_AHB_BASE、GPIO_PIN_5); 
//为 COMP1 CO1 (数字) GPIO 输出
MAP_GPIOPinConfigure (GPIO_PD1_C1O)启用 PD1引脚2;
GPIOPinTypeComparatorOutput (GPIO_PORTD_AHB_BASE、GPIO_PIN_1);  

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    否则、GPIO PD1是 GPTM0 CCP1的备用选择引脚、用于 C1-模拟输入的模拟比较器 C01输出。  

    PD1通过 INA240电流监控器输出为 PWM0发生器提供模拟比较器反馈、通常情况下、信号幅值不会通过 LM4041-N 上升到高于 ANIx 输入相对1.225v VREF1/2 PD1似乎是一个内部 GPIO 模拟 I/O 焊盘交叉触发边沿计数进入数字 CCP1 PL5 (3)。 这些交叉触发 GPTM0 CCP1边沿 计数在 PD1上不是直接可见  的、但当 PWM0从 PWMENABLE REG3输出数据时、似乎会导致 CCp1输入下降边沿抖动。 同样、GPIO 引脚 H3正在监控下面的边沿计数中断处理程序代码中显示的这种两难问题。 奇怪的是 PD1未配置、时序问题仍然存在、可能是由于 C1-模拟输入、甚至已配置?

    怀疑 模拟比较器 C1-输入替代 PD1在内部触发边沿计数,不是 CCP1触发边沿计数,而是直接触发 GPIO PL5……

    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    将边缘计数过程加速到201Hz 最大 taco 速度只会降低速度计数漂移。 尝试减去 GPTM3 中断中的 GPTM0边沿计数导出的匹配值对于 偏移  从意外触发的边沿溢出 CCP1的边沿计数漂移是徒劳的。

    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 BP101:

     [引用 user="BP101"]

    问:  其中一 个 PWM 外设的 GPIO 管脚 MUX 值是否可以在内部 通过 GPTM 边沿计数输入的 CCP1进行多路复用?

    [/报价]

     我无法从数据表中看到它。 来自 PWM 模块的 M0PWMx 被带到 PF、PG 和 PK 端口、这些端口将独立于 PL5。  

    [引用 user="BP101"]问:PWM0中断/ADC0触发或 GPIO 引脚如何严重影响 GPTM-0或 OneShot GPTM-3的 CCP1输入 ?

     在 CPU 处理 GPTM 中断之前、一种类型的中断(即 PWM 中断)是否可能发生过频繁? 否则、我无法连接 PWM 中断和 CCP1上 GPTM 边沿计数之间的关系。  

      

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    [引用 USER="Charles Tsaa"] 是否一种类型的中断(即 PWM 中断)在 CPU 处理 GPTM 中断之前发生得太频繁。 [/报价]

    CCP1和 GPTM3 都是同步时基、只有 TM3使用 超时 INT 来处理节拍  、PWM0零 INT 在12.5kHz 时每80us 发生一次。   每次 TM3过期 时、 都会在 FanSpeedTickHandler (void)中重新加载201Hz 的 TM3。   只要 TM3被设定为1秒 、在  X11插头引脚上添加0.001uf 电容器后、所有边沿计数漂移就消失了。 当 PMW0被激活时、无需其它措施来获得正确的速度读数。  

    禁用进入 PL5 PD1的模拟比较器输入/输出驱动没有任何不同。 24V DC 上的12.5kHz PWM0脉冲可能比 预期的更影响风扇逻辑。 CCP1边沿计数似乎下降、220uF 电容器被放置在24V 直流风扇电机插头上、并且与现有的33uF 电解电容器并联。 在论坛中发帖之前、测试了 CC1输入上与 MCU 输入引脚附近的现有0.001uf 并联的0.047uf 陶瓷电容至 GND。 它所做的只是进一步滚降 CCP1的上升沿 、CCP1的上升沿已经远远低于信号顶部移除的 PWM0脉冲锁定。

    将肖特基二极管串联添加到 TOLO 信号 CCP1使 幻象边沿计数进一步下降。 然而、计数在较低(假 )速度附近随机变化、远高于102Hz。 二极管将 CCP1信号从接地端上升50mV、两个50m Ω 铁氧体也与3R9k 串联、但仍然不会停止将是幻象边缘计数脉冲。

    进入 CCP1的 TOLO 信号为高电平有效、 信号 顶部的12.5kHz PMW0脉冲锁定始终不会下降到低于布尔逻辑电平低电平、甚至 @102Hz TOLO 速度。 这就是为什么这个问题看起来与边沿计数器比风扇电路更相关的原因、因为在 PWM0关断后 GPIO 标记脉冲速率返回到选通@201Hz。 如何从 信号顶部的12.5kHz 锁定触发 CCP1? 除了在 CCP1处添加连接到3V3的肖特基二极管外、还可以采取什么措施来阻止 PMW0锁定失败 CCP1?

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    从这个前提出发、应用程序不会因 NVIC 处理 GPTM3中断而导致计数漂移; CCP1 输入 可能 对通过 4R8K 至3V3电源轨上拉的风扇集电极开路输出有点敏感。 此类入侵的测试人员不知道外部信号 如何影响 CCP1 输入驱动结构。  我们也不知道 CCP1输入触发来自非约束输入逻辑结构、 在  高于布尔逻辑低 电平的反相运行脉冲上触发、 概述了电气 特性。  回顾 CCP1信号 斜率 的上升沿接收随机反相运行脉冲的情况、尤其是   在上升沿触发 CCP1输入时、错误触发变得明显。 这似乎 是由从 不会交叉进入布尔低电平区域的反相 RUNT 脉冲引起的、  会发生无约束的施密特触发器行为 、并且边沿计数通过 CCPn 输入触发器变得不可靠。  

    1、  按照 GPIO 表10-4配置的 CCP1 OD (输入/输出)能否比  显示的典型输入配置更好地对输入信号进行逻辑滤波?

    也许通过以不同于 表10-4中显示的 CCP1的方式对 FAN 信号进行滤 波、高电平的布尔电平对 GPIO 焊盘上的 PWM0输出不太敏感?

    2.  风扇开路集电极信号引脚上的低值上拉 R 可能会将不需要的 PWM0信号传入 CCP1 。  

    在  最近发布的另一个   控制 PWM0栅极驱动器的帖子(GPIO OD 输出失败)下、奇怪的问题可能属于同一 PDF 范围。

    3. OD 或简单 GPIO 输入上的高值上拉 R 可能有助于阻止 位于直流电源轨上的 PWM0信号  从中的外部影响 GPIO 管脚?

    这将假定 CCP1被配置为 OD 和大值上拉 R 被优化以减少 PWM0信号错误 触发 CCP1输入驱动结构的影响。 这是 CCP0信号的一种氧合、 因为 GPTM0-A 1/2宽在另一条线缆上为同一个风扇产生25kHz PWM 输出。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您很容易放弃了吗?

    由于边沿计数 CCP1输入引脚已经被置位、所以从 GPTMTnILR 中减去 GPTMTnR 或 GPTMTnV 似乎会导致计数从内部 PWM0噪声中上升。 即使在120MHz SYSCLK 时间源下、GPTM#13也似乎在发生。 当 PWM0输出时、克服#13的唯一方法是在从 TnILR 值中减去 GPTM0-B TNR/TNB 之间等待一秒钟、以更新 CCP1的中断计数值。

    通过 WPU 使 CCP1输入悬空 、并将肖特基二极管放置 在 taco 信号串联位置、与二极管并联100R 可 使 CCP1获得更好的隔离效果。  然后、定时循环 产生稍低 的计数、 当 在节拍处理器内(下面)启用时、可以注意到 GPTM3 (OneShot)证明 TNR/TNV 值在定时频率更新中不能保持一致的计数。  

    void
    FanSpeedTickHandler (void)
    {
    uint32_t ui32TBVEdgeCount;
    uint32_t ui32TBILREdgeCount;
    
    //清除周期性102.7Hz 超时中断。*/
    MAP_TimerIntClear (TIMER3_base、TIMER_TINA_TIMEOUT);
    
    //在递减计数模式下,
    可以通过从
    GPTMTnPR (预分频)
    *和 GPTMTnILR 寄存器组合组成的值中减去 GPTMTnR *或 GPTMTnV 来获取输入*事件的当前计数。 *
    
    /*获取 GPTMTBV 自由运行计数值。 //
    ui32TBVEdgeCount = HWREG (TIMER0_BASE + TIMER_O_TBR);
    //获取 GPTMTBILR 电流匹配边沿计数*/
    ui32TBILREdgeCount = HWREG (TIMER0_BASE + TIMER_O_TBILR );
    //确定上升到
    32TB iEdgeCount 的边沿总数= HWREG (TIMER0_BASE + TIMER_O_TBIRR);//确定32 uTB iEdgeCount
    
    /*禁用 GPTM-B0以更新 TnMATCHR 计数寄存器*//HWREG
    (TIMER0_BASE + TIMER_O_CTL)&&~(TIMER_CTL_TBEN);
    
    //将计数的边沿重新加载到该 ISR *//MAP_TIMER_MATCHR
    (TIMER_CTL_TBEN);//
    
    
    将 GPTM0B TnMATCHR 计数加载到该 ISR *+ IMURE_COUNTHRS 计数+ TRIMUTE_COUNTHRS + TRIMUTRIM32B;/TIMER_COUNTHRS + TRIMUEETRIM0_COUNTHRS + TRIMUTE_COUNTHRS 计数。 //
    //HWREG (TIMER0_BASE + TIMER_O_CTL)|= TIMER_CTL_TBEN;
    
    //将 GPTM-3 OneShot 重新加载到120.7Hz 间隔。 /
    HWREG (TIMER3_base + TIMER_O_TAILR)= 0xBC0CA0;
    
    /* Trigger GPTM3 OneShot */
    HWREG (TIMER3_base + TIMER_O_CTL)|= TIMER_CTL_TAEN;
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:
    GPTM#13是使用备用时钟源时的情况。 除非您使用 PIOSC 等替代时钟源、否则我认为它不适用于您。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    有趣的是、让 GPTM3使用备用 PIOSC 进行1秒的写入、这解决了过去的问题。 使用针对 GPTM3的 SYSCLK 源使 GPTM0 CCP1计数非常高。 在使 GPTM3使用备用源 PIOSC 后、PWM0活动不再引起 GPTM-0B 中的随机高边沿计数

    请注意、在上面的代码中、HWREG 可启用将相同匹配值直接写入 GPTM-0B 的功能。 启用时、边沿计数匹配值保持不一致。 当 SYSCLK 或 PIO 作为时钟源时、根据 GPTM 16、似乎 GPTM3一次性写入值会丢失。

    使 GPTM3作为一个从 GPTM-0B 中断处理程序启用的周期定时器、在 GPTM-0B 边沿计数中产生的行为与 PWM0速度之后的持续时间相同、而不是 GPTM3一次性时间值。  

    什么会导致 GPTM3 OneShot 在 节拍中断处理程序内的零周期内不写入寄存器值(0xBC0CA0)、或在任一情况下更新递减计数值?

    也许为什么这个问题似乎让我们感到很受欢迎、因为始终有虚线边沿发生、但实际上并不会触发脉冲。

    /*********
    * GPTM-3:32位宽 OneShot 计时器配置
    *用于生成102Hz 风扇 Taco Tick 间隔。
    (三 /
    /*设置 GPTM-3A 时钟源120MHz/16MHz */
    MAP_TimerClockSourceSet (TIMER3_base、TIMER_CLOCK 系统);//TIMER_CLOCK _PIOSC
    //为 OneShot 设置 GPTM-3A 下一次超时。 *
    MAP_TimerConfigure (TIMER3_base、TIMER_CFG_ONE_SHOT);
    /*禁用 PWM 中断*/
    HWREG (TIMER3_base + TIMER_O_TAMR)&=~(TIMER_TAMR_TAPWMIE);
    HWREG (TIMER3_base + TIMER_O_TBMR)&=~(TIMER_TBMR_TBPWMIE);
    /*为102.7Hz 设置 GPTM-3A 加载值*/
    MAP_TimerLoadSet (TIMER3_base、TIMER_A、0xBC0CA0);//1sec SYSCLK:0x7270E00、PIOSC:0xF42400
    /*启用定时器超时时中断。 *
    MAP_TimerIntEnable (TIMER3_base、TIMER_TINA_TIMEOUT);
    /*启用1秒 OneShot taco tick 计时器*/
    MAP_TimerEnable (TIMER3_base、TIMER_A);
    /*在控制器中注册全局中断*/
    TimerIntRegister (TIMER3_base、TIMER_A、FANSpeedTickHandler);
    MAP_IntEnable (INT_TIMER3A);
    
    /*同步 CCP1和102.7赫兹定时器
    *阻止两个计数器之间的漂移*/
    MAP_TimerSynchronize (TIMER0_BASE、TIMER_0B_SYNC | TIMER_3A_SYNC); 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 BP101:
    尽管我不明白为什么 PIOSC 会使它在您的用例中更好地工作、而不是在勘误表中说明、但我很高兴它能解决您的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    PIOSC 的确是、但仅持续1秒 GPTM3一次性加载值、它通过 PWM0零中断停止边沿计数漂移。 定制 PCB 上的 TM4C1294KCPDT MCU 不再如此。 两个时钟源都不会对停止随 PWM0中断加速的边沿计数产生任何影响。 当 PWM0 GEN0零标志中断 NVIC 时、似乎 GPTM3一次性写入值被忽略、之后不被忽略。 甚至测试了另一个定时触发器、GPTM5也不会与任一时钟源发生任何变化。 在 POISC 被设置为 GPTM3时钟源之后、很久以前 TM4C1294NCPDT 就认为这个问题已解决。

    最近在 Taco 信号上测试了150uH 扼流圈、并将+24Vdc 测试到风扇中、仅以小裕量减少了不断增加的边沿计数。 这似乎意味着部分问题是内部延迟时间故障、因此外部计数器措施对阻止不断上升的边缘计数几乎没有影响。 使用边沿计数模式的边沿定时器模式捕获 CCP1边沿并确定从 RPM 开始的时间的想法也以类似的方式失败。 因此间隔定时器 GPTM3对于确定边沿速度(频率)至关重要、而不仅仅是 CCP1每个中断周期发生的边沿计数。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Charles、

    昨天用全新的 MCU 替换了旧 MCU。 只需通过 Dremel 碳化物色轮从 PCB 上切割旧 MCU、然后粘在新的 MCU 上(无热)、以对周围的组件施加应力。 为手持式感应拆卸/重新安装装置带来了很好的想法。 更好的方法是粘在 MCU 的预粘贴封装引脚上,只需加热引脚即可加热235*C 的热空气,再继续坚持下去。 这将是行业游戏的改变!

    遗憾的是、全新 MCU 仍存在相同的加速边缘计数问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "这将是行业游戏的改变!"

    我认为您对小数整数的想法是一个好得多的尝试。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    BTW:测试了不带 D13的边沿计数电路、而是使用 D13焊盘的两个串联铁氧体。 较高的值 R121会切断战术信号、并且边沿计数变为零。

    看似简单的风扇控制不需要低通滤波器、并且在 GEN0开始中断的时间比空闲模式1ms 周期快之前工作良好。 很难想象 NVIC 中断尾链会以某种方式导致 AHB 上的中断优先级问题。 尤其是在 GEN0 80us 期间、GPTM3 102Hz 单次触发计时器也会中断 NVIC。

    也许您之前提到的边沿计数间隔定时器 GPTM3在 PWM0中断 NVIC 时错误地与 CCP1异步。 当 GEN0 1ms 周期变为80us 或更短的频率周期时、这一点看起来更加明显。

    可能是1秒间隔(GPTM3)以某种方式在 PWMCLK=SYSCLK/2周围发生冲突的方式、因为 PIOSC 在备用时域中。 先前对 GPTM-0B (CCP1)进行的测试也使用了 PISOC、即使在1秒的时间间隔内通过 SYSCLK 源也没有任何帮助。 似乎我错过了一个连接、只关注边沿计数错误。 PWM0-GEN0始终运行、但当边沿计数错误地开始加速时、PWMENABLE 会置位、因此周期从1ms 更改为80us。 该模型似乎与直流 B+上的信号相关、但对边缘计数的影响极小。

    因此、如果我们尝试使 GPIOSC 时钟域中存在 GPTM-0B/GPTM-3、则有一个 GPTM#16。 这似乎是一个不合理的解决方案、我们可以等待 TI 将 MCU 器件更新为 RA3版本、从而修正了 GPTM#12/#13勘误表。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否曾一次更换过一个或多个 MCU?

    焊锡膏的概念非常糟糕、需要丝印板、人或机械臂的精密应用。 辐射热会破坏周围组件、并会降低每个焊接加热会话的组件预期寿命。

    电感式元件发布是一种更合乎逻辑的方法、可移除 MCU、在20年前就很容易实现。 如果美国经济中最大的收入来源之一不能改变一个深思熟虑的概念、那么谁会这样做?

    导电聚合物技术已取得巨大进步、3D 打印技术已发展成为一个完整的电机、铜绕组通过陶瓷聚合物涂层。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "在.方面取得了巨大进展。"

    与您的小数整数发明相比、所有这些都是苍白的、在我看来、这是业内在过去127年中看到的唯一的游戏改变者。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    实际上、变相侮辱是为了 掩盖问题的发布、这远远不是重点... 试图注入 从 过去 的线索中获取的未经请求的观点、您 显然没有完全了解其意图 、这可能不是最谦卑的前进之路!