TI中文支持网
TI专业的中文技术问题搜集分享网站

請問如何在CC2531 USB Dongle上實現PWM ??

你好,TI的研發人員 

目前使用TI CC2531 USB Dongle,想在上面試試PWM。

程式是使用SampleRemote project 在 Texas Instruments\Z-Stack Lighting 1.0.1\Projects\zstack\ZLL\SampleRemote\CC2530DB

想了解設定CC2531 PWM的流程是怎樣呢??

請問有沒有CC2531與PWM的相關文件可以參考??

有參考了這篇文章 http://e2e.ti.com/support/low_power_rf/f/156/t/118346.aspx?pi267162=2

在datasheet中也看到可使用Timer1、3、4來做PWM輸出

請問如果使用T1,是在SampleRemote project中的哪支程式去設定Timer1 PWM的參數??

VV:

直接参照

SampleLight project 在 C:\Texas Instruments\Z-Stack Lighting 1.0.1\Projects\zstack\ZLL\SampleLight\CC2530DB 选择RouterZlight工程,已经在CC2531上实现4通道的PWM的功能的,用Timer1 实现的

wun martin:

回复 VV:

謝謝你的回答,但是我剛接觸這部分。

所以不好意思,可以再說的詳細一點嗎?

SampleLight.eww 執行後選擇 Zlight – Router

那請問在哪支程式檔的哪個部分是撰寫Timer1設定PWM的地方??

是否有詳細的關鍵字?

因為我在SampleLight 搜尋T1CTL,只有出現在ioCC2530.h檔案,所以不確定SampleLight中哪部分是撰寫PWM的地方

Yue TANG:

回复 wun martin:

T1CTL是一个寄存器,详细可看CC2530 datasheet.

http://www.ti.com/lit/ug/swru191d/swru191d.pdf

其实datasheet对各种PWM都有做详细描述,可仔细阅读103页开始的内容。

应该是hal_timer.c 是底层PWM的实现,可借鉴。

wun martin:

回复 Yue TANG:

TY ,謝謝你的回答! 這份datasheet關於Timer1以及PWM的部分我有看到

但剛開始接觸這些東西…看了datasheet還是不太懂…

所以想參考SampleLight的做法

但不知道使用Timer1作為用PWM輸出的部分是寫在SampleLight project中的哪個程式檔中?

能不能貼上一些相關的程式碼讓我能夠去查詢SampleLight project中使用Timer1來做PWM輸出的部分 ?

不然只是看datasheet,真的沒有頭緒跟方向下去做

VV:

回复 wun martin:

在C:\Texas Instruments\Z-Stack Lighting 1.0.1\Components\hal\target\CC2530PMP4712 中的hal_timer.c文件中,

你可以看下初始化函数就知道了,协议栈用到的是#define ENABLE_LAMP   P0SEL |= ( 0x08 | 0x10 | 0x20 | 0x40); /* P0.3:6 */

wun martin:

回复 VV:

VV 你好 !! 真的很謝謝你的幫忙~

在CC2530PMP4712 的hal_timer.c以及hal_board_cfg.h都有看到Timer1的相關設定

而我要使用的是C:\Texas Instruments\Z-Stack Lighting 1.0.1\Projects\zstack\ZLL\SampleRemote

在CC2530EB中的hal_timer.c內容是空白的。

所以我可以參考CC2530PMP4712中的hal_timer.c以及hal_board_cfg.h關於Timer1的設定,用來設定CC2530EB中的hal_timer.c及hal_board_cfg.h的Timer1嗎??

例如:CC2530PMP4712-hal_timer.c

1.前面定義的一些typedef struct

2.FUNCTIONS – Local

3.HalTimer1Init

4.halTimer1SetPeriod

5.halTimer1SetChannelDuty..以及接下去的一些函式

這些都需要在CC2530EB中的hal_timer.c裡面做設定 ?

只是我只用到Timer1來做PWM輸出,所以就不需要其他的Timer,對吧??

那為什麼在這邊看到一些用Timer1還做PWM輸出的部分,都與下面論壇中的程式設定不太一樣呢??

例如程式定義P0DIR及其他參數的部分??

http://e2e.ti.com/support/low_power_rf/f/156/t/118346.aspx

所以我也必須去選擇使用free-running mode 或 up/down mode來使用PWM嗎?

wun martin:

回复 wun martin:

我軟體目前使用如下圖,使用了add-on-lighting-kit,使CC2531可以使用SampleRemote

Q1 : 那現在要在SampleRemote中加入PWM,那是要把hal_timer.c 

Z-Stack Lighting 1.0.1\Components\hal\target\CC2530PMP4712

複製到

Z-Stack Lighting 1.0.1\Components\hal\target\CC2530USB嗎?

Q2 : 除了這個檔案以外還有其他檔案要複製到CC2530USB這個target嗎?

Q3 : 假設加入PWM的檔案都從CC2530PMP4712複製到CC2530USB後,要在SampleRemote project中哪之程式去做暫存器的設置呢?(如下面網址中暫存器的設置)

http://e2e.ti.com/support/low_power_rf/f/156/t/118346.aspx?pi267162=1

Q4 : 如果可直接使用Timer裡面的function,那我要怎麼知道我的operation mode (Free-Running , Modulo or Up/Down Mode)  以及 output compare mode 還有我要設為PWM輸出的Pin腳位是哪支腳??

我想利用示波器測量PIN腳來觀看輸出的波形,所以需要知道如何暫存器的設定、PWM輸出腳位的設定

謝謝!!

VV:

回复 wun martin:

你好,

1:不同的工程是针对不同的硬件对象的,CC2530EB是针对和SmartRF05EB来搭配使用的开发套件,在这个开发套件的code上,没有使用PWM的控制。

CC2530PMP4712的工程,是正对ZLight2 这个开发套件的,你可以TI网上了解下这个开发套件,上面实现了PWM的功能。你可以参考上面的例程来做。

2:任何一个单片机的操作,都会跟寄存器打交道,只是看每个人写代码的风格了,为了让硬件相关的程序封装的更好,所以一般我们会给开发者把设置底层硬件的寄存器的API写好,换句话说,你根据API可以知道具体是怎样操作的,具体内部怎么实现你可以不用管。当然如果你想追究下去也很容易,

#define ENABLE_LAMP   P0SEL |= ( 0x08 | 0x10 | 0x20 | 0x40); /* P0.3:6 */

定时器的寄存器配置也是一样的。

至于P0DIR是因为,当用作定时器的通道IO输出的时候,P0SEL已经配置为 periphera方式,所以就不需要在配置方向了。

你选择什么方式实现PWM,都无所谓。

3:Q1,可以这样做

Q2,其他的可能需要,你debug程序的时候,根据报错,自己可以去修改添加的

Q3,你调试以后就会发现的

Q4:具体去看CC2530的user guide,Timer1 PWM输出都是固定的Pin脚的,多看user guide和datasheet。

谢谢。

wun martin:

回复 VV:

我有看過

1.A USB Enabled System-On-Chip Solution for 2.4-GHz IEEE 802.15.4

關於PWM只有第20頁簡單說明關於Timer的這一頁提到

2.CC2531 USB Hardware User's Guide

裡面沒有提到PWM的相關說明

3.CC253x-4x User Guide. (Rev. D) _swru191d

第九章關於Timer1的有說明,例如

使用modulo mod : channel使用1或2,output compare mode用4、5、6或7。

使用free-running mode : channel output compare mode用4、5、6或7。

使用up/down mode : channel使用1或2,channel output compare mode用4、5。

但找不到Timer1 PWM输出的固定Pin脚是哪支? 可否指導一下?

還是在第9.8Output Compare Mode開頭提到

"In output compare mode, the I/O pin associated with a channel is set as an output."

I/O Pin是在這邊決定的嗎?是甚麼意思呢?

wun martin:

回复 VV:

你好  想再請問一下

在zll_samplelight.c中看到下列程式

halTimer1SetChannelDuty (WHITE_LED, PWM_FULL_DUTY_CYCLE);

WHITE_LED定義為HAL_T1_CH4

而HAL_T1_CH4定義為4

請問這邊設置channel 4 的dutycycle100%,是代表channel 4輸出的佔空比為100%

但此輸出是從哪個pin腳輸出呢?

那麼你提到的#define ENABLE_LAMP   P0SEL |= ( 0x08 | 0x10 | 0x20 | 0x40);

是指PWM的輸出給LED燈的輸出腳位嗎?

赞(0)
未经允许不得转载:TI中文支持网 » 請問如何在CC2531 USB Dongle上實現PWM ??
分享到: 更多 (0)