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.

[参考译文] CC2530 PWM 定义第4部分

Guru**** 2616675 points

Other Parts Discussed in Thread: CC2530

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

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/703988/cc2530-pwm-definitions-part4

主题中讨论的其他器件:CC2530

大家好、

正如我之前在 PWM 定义第1、2和3部分中所述、我已经成功配置了调光器件。

我加入了用于执行 LED 光驱动器的电子元件、但在测试期间、我观察到光 LED 灯闪烁75%。 我怀疑发生这种情况的原因是计时器设置、特别是频率/周期(halTimer1SetPeriod (4292);// 233Hz)定义为计时器1。  

有人有这样的经验来建议如何解决这个问题?

有人有一些文章可以帮助我更好地理解这一点?


以帮助我更好地理解这一点吗?

下面您可以在 timer.c 文件中看到计时器1设置:

空 HalTimer1Init (halTimerCBack_t cBack)

T1CCTL0 = 0;//确保中断被禁用*/
T1CCTL1 = 0;//确保中断被禁用*/
T1CCTL2 = 0;//确保中断被禁用*/
T1CCTL3 = 0;//确保中断被禁用*/
T1CCTL4 = 0;//确保中断被禁用*/

/*设置 timer0的预分频和时钟*/
halTimerRecord[hw_timer_1].prescale = HAL_Timer1_16_prescale;
halTimerRecord[hw_timer_1].clock = HAL_timer_32MHz;
halTimerRecord[hw_timer_1].prescaleVal = HAL_Timer1_16_prescale_VAL;

/*设置 Timer1通道结构*/
halTimer1Channel[0].TxCCTL = TCHN_T1CCTL;
halTimer1Channel[0].TxCCL = TCHN_T1CCL;
halTimer1Channel[0].TxCCH = TCHN_T1CCH;

halTimerRecord[hw_timer_1].configured = true;
halTimerRecord[hw_timer_1].opMode = HAL_Timer1_OPMODE_updown;
halTimerRecord[hw_timer_1].channel = 0;
halTimerRecord[hw_timer_1].channelMode = 0;
halTimerRecord[hw_timer_1].intEnable = false;
halTimerRecord[hw_timer_1].callBackFunc = cBack;
Timer1MaxCount = halTimer1SetPeriod (4292);// 233Hz

halTimerSetPrescale (hw_timer_1、halTimerRecord[hw_timer_1].prescale);
halTimerSetChannelMode (HW_TIMER_1、halTimerRecord[HW_TIMER_1].channelMode);
halTimer1SetChannelCCTL (HAL_T1_CH0、0、1、HAL_Timer1_CH0_CMP_MODE_SET_ON_COMP、1、 HAL_Timer1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL (HAL_T1_CH1、0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、 HAL_Timer1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL (HAL_T1_CH2、0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、 HAL_Timer1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL (HAL_T1_CH3、0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、 HAL_Timer1_CH_CAP_MODE_NO);
halTimer1SetChannelCCTL (HAL_T1_CH4、0、1、HAL_Timer1_CHN_CMP_MODE_CLR_ON_COMP_SET_ON_0、1、 HAL_Timer1_CH_CAP_MODE_NO);

halTimer1SetChannelDuty (HAL_T1_CH1、0);
halTimer1SetChannelDuty (HAL_T1_CH2、0);
halTimer1SetChannelDuty (HAL_T1_CH3、0);
halTimer1SetChannelDuty (HAL_T1_CH4、0);


/*设置定时器1的运行模式*/
T1CTL &=~(HAL_Timer1_OPMODE_Bits);
T1CTL |= HAL_Timer1_OPMODE_UPDOWN;

BR

Alex

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

    大家好、

    我在´ve 上发现了一些讨论、我认为这种行为与 PWM 信号(方波)和负载电波之间的时序或同步有关、 我已经看到了两种可能产生过 零或相位角行为。  

    我认为我需要更改 timer.c 中的一些参数、可能是 PWM 时间周期、百分比占空比和其他参数。

    有人有类似的问题吗?

    BR

    Alex

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

    欢迎您改变 PWM 频率并观察变化、但这是一个特定于应用的问题此问题不适合本论坛、因为它不直接涉及 MCU 或网状网络问题。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我在我们的设计中没有看到类似的问题、但如 Ryan 所说、欢迎更改 PWM 频率并观察变化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Ryan、非常感谢您的帮助。

    我怀疑是否还需要更改计时器1的预分频和时钟。

    您是否有文章或文章可帮助我做出此决定?

    BR
    Alex
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢你、YK 先生。 我´ll 更改频率。
    但我认为我需要添加一个额外的电路来检测零交叉以同步计时器。

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

    您好、黄先生和 Ryan、

    我了解更好地解释 LED 灯闪烁原因的现象。 它们可以看到波形如下:

    用于触发 TRIAC 的 PWM 信号(方波)需要与正弦电波建立同步/时序。 为此、我构建了一个外部电路(过零检测器)、通过 CC2530连接一个 I/O 端口。  当电波变为零时、过零检测器将输出端口更改为电平(3.3V)。

    我需要检查 CC2530输入端口、包括条件函数(如果是的话)、它通过过零检测器连接、并通过其端口停止计时器连接、以允许波之间的计时。

    我在´ll 点使用检查:

    void halTimer1SetChannelDuty (uint8通道、uint16 promill)


    #define MIN_PROMALL 20.
    uint16计数;

    if (promill < min_PROMALL)
    promill = 0;

    /*加载计数=((秒/周期) x 时钟)/预分频*/
    计数=(uint16)((((uint32)(Timer1MaxCount)* promill + 500)/ 1000);
    计数=((计数>= Timer1MaxCount)? Timer1MaxCount-1:(计数==0? 1:计数);

    halTimer1SetChannelCount (通道、计数)

    您认为这是实现过零检测的正确方法吗? 或更好地使用中断?

    BR

    Alex

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

    如果您需要与正弦电波同步/定时、我认为 CC2530不是足够的资源或强大、不足以同时实现这一目标和 Zigbee 射频。 我建议您使用另一个 MCU 来实现此目的。

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

    黄先生,非常感谢!!!!

    我怀疑 CC2530没有强大的功能。

    我将在两个方面开展工作、一个是通过 UART 与外部模块进行通信、这个模块已经准备就绪、这使得我的合作伙伴能够学习具有中期替代方案的 MCU TI MSP430。

    但在第一个选项中、我需要通过 UART 设计一个串行协议、以便与外部模块通信。  
    如果我需要帮助、可以帮我吗?

    BR

    Alex

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

    有关  在 CC2530上使用 UART 的信息、请参阅。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    黄先生
    感谢你们一直给予我的帮助!!!!
    BR
    Alex