项目需求需要诺干个精确数量的1mHZ的PWM波,试过GPIO的+定时器驱动,但是无法输出1mnhz的,可能频率太高,目前只能产生1mhz的PWM波但是无法确定个数?(这里指的是1个PWM波的精确数量的脉冲,不是几路通道的pwm波)
Viki Shi:
请提供更详细的需求描述:
1、请问你们的项目需求多少个PWM波
2、使用的芯片是什么
3、有没有其他项目需求
yekun kun:
回复 Viki Shi:
芯片是CC2640R2F 7*7 ;具体PWM是8个脉冲
YiKai Chen:
回复 yekun kun:
要HW timer 控制到PWM只精確輸出8个脉冲應該不大可行
yekun kun:
回复 YiKai Chen:
请问CC2640 R2F可以实现吗
YiKai Chen:
回复 yekun kun:
基本上我認為都不大可行,除非原本HW timer有這樣的設置
yekun kun:
回复 YiKai Chen:
我不需要太精确,大概8个就行;
现在的代码:PWM_Handle pwm;PWM_Params pwmParams;
void PWM_Init(void)
{
//uint32_tdutyValue;
// Initialize the PWM driver.PWM_init();// Initialize the PWM parametersPWM_Params_init(&pwmParams);pwmParams.idleLevel = PWM_IDLE_HIGH;// Output low when PWM is not runningpwmParams.periodUnits = PWM_PERIOD_HZ;// Period is in HzpwmParams.periodValue = 1e6;// 1MHzpwmParams.dutyUnits = PWM_DUTY_FRACTION; // Duty is in fractional percentagepwmParams.dutyValue =(uint32_t) (((uint64_t) PWM_DUTY_FRACTION_MAX * 15) / 100);// 0% initial duty cycle}
static void SimplePeripheral_performPeriodicTask(void)
{
//uint8_t valueToCopy;PWM_Init();// Open the PWM instancepwm = PWM_open(Board_PWM0, &pwmParams);
// if (pwm == NULL) {// PWM_open() failedwhile (1);}PWM_start(pwm);CPUdelay(22);PWM_stop(pwm);PWM_close(pwm);
}
但是波形大概在8个脉冲,但是波形在开始和结束时有比较宽的脉冲,与1mhz的脉冲差太多;
就是 PWM_start(pwm);和 PWM_stop(pwm);这两句的执行;一个不能马上开始,一个不能马上结束。
之前使用使用GPTimerCC26XX回调翻转电平,但是频率不够。
我看到GPTimerCC26XX有pwm模式,是否可以产生PWM,我的思路通过直接控制定时器开关来控制PWM,来减少开启和关闭时的脉宽不稳定;
Viki Shi:
回复 yekun kun:
如果我理解正确,是要输出8个1mhz的PWM脉冲,也就是8us。但是,CC2640R2F的Clock.tickPeriod为10us
For CC2640R2F devices, this is reconfigured in the TI-RTOS configuration file (.cfg):
Clock.tickPeriod = 10;
yekun kun:
回复 Viki Shi:
什么意思不太理解
Viki Shi:
回复 yekun kun:
就是输出8个1mhz的PWM脉冲不好实现